봄날은 갔다. 이제 그 정신으로 공부하자

Android 13 - 8편 (새로운 기능: 기타) 본문

학습

Android 13 - 8편 (새로운 기능: 기타)

길재의 그 정신으로 공부하자 2022. 7. 29. 19:16

이번 글에서는 Android 13의 새로운 아래 기능에 대해 알아보도록 하겠습니다.

  • 태블릿 및 대형 화면 지원
  • Graphics (프로그래밍 가능한 shaders)
  • Media (Anticipatory audio routing)
  • 접근성 (Audio description)
  • 핵심 기능 (Open JDK 11 업데이트)

 

태블릿 및 대형 화면 지원

Android 13은 시스템 UI 최적화, 향상된 멀티태스킹, 개선된 호환성 모드 등 Android 12 및 12L 기능 출시에서 도입된 태블릿 최적화를 기반으로 빌드되었습니다. 테스트의 일환으로 앱이 태블릿과 기타 대형 화면 기기에서 최적으로 표시되도록 합니다.

 

* 자세한 내용은 아래 링크를 참고해주세요.

https://developer.android.com/about/versions/13/features/large-screens

 

Graphics (프로그래밍 가능한 shaders)

Android 13에서는 프로그래밍 가능한 RuntimeShader 객체를 지원하며 동작은 AGSL(Android Graphics Shading Language)을 사용하여 정의됩니다. 

AGSL은 대부분의 문법을 GLSL과 공유하지만 Android 렌더링 엔진 내에서 작동하여 Android 캔버스 내 페인팅과 뷰 콘텐츠 필터링을 맞춤설정합니다. 

Android는 내부적으로 이러한 셰이더를 사용하여 "ripple effects", "blur", "stretch overscroll"을 구현하고 Android 13을 사용하면 유사한 고급 효과를 앱에 만들 수 있습니다.

 

Media (Anticipatory audio routing)

미디어 앱이 오디오가 라우팅될 방식을 식별할 수 있도록 AudioManager 클래스에 새로운 오디오 경로 API를 추가했습니다. 새로운 getAudioDevicesForAttributes() API를 사용하면 지정된 오디오를 재생하는 데 사용할 수 있는 기기 목록을 가져올 수 있고 추가된 getDirectProfilesForAttributes() API를 사용하면 오디오 스트림이 직접 재생될 수 있는지 파악할 수 있습니다. 

이러한 새 API를 사용하여 오디오 트랙에 사용할 최적의 AudioFormat을 확인하세요.

 

접근성 (Audio description)

Android 13(API 수준 33)에서는 사용자가 모든 앱에서 오디오 설명을 사용 설정할 수 있는 새로운 시스템 전체 접근성 환경설정을 도입했습니다. 오디오 설명은 프레젠테이션을 통해 말하는 내레이터로 구성된 추가 내레이션 트랙으로, 오디오가 자연스럽게 일시중지될 때 화면에서 어떤 일이 일어나는지 설명합니다. 

앱은 아래 코드의 isAudioDescriptionRequested()로 쿼리하여 오디오 설명 트랙의 사용자 환경설정을 따를 수 있습니다.

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (accessibilityManager.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

 

앱은 아래 코드와 같이 AccessbilityManager에 리스너를 추가하여 사용자의 환경설정 변경을 모니터링할 수 있습니다.

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

 

핵심 기능 (Open JDK 11 업데이트)

Android 13에서는 애플리케이션과 플랫폼 개발자를 위한 라이브러리 업데이트 및 자바 11 언어 지원이 모두 포함된 OpenJDK 11 LTS 출시에 맞춰 Android의 핵심 라이브러리를 새로고침하는 작업을 시작합니다. Android 13에서 도입된 핵심 라이브러리 변경사항은 ART 메인라인 모듈의 Google Play 시스템 업데이트를 통해 Android 12 기기에서도 사용할 수 있습니다.

Android 13에는 다음과 같은 핵심 라이브러리 변경사항이 포함되어 있습니다.

  • 로컬 변수 및 매개변수 람다로 var 키워드 지원
  • String 클래스의 새 메서드
    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • 컬렉션을 배열에 맞게 더 쉽게 조정할 수 있는 Collection.toArray(IntFunction) 지원
  • java.util 클래스 Optional, OptionalDouble, OptionalInt, OptionalLong에서 ifPresentOrElse(), isEmpty(), orElseThrow(), stream() 지원
  • 소켓 재사용을 포함하여 SocketOptions 지원 확장
  • NullReader, NullWriter, InputStream, OutputStream, transferTo(), Reader 기능이 읽기 문자를 Writer로 전송
  • Charsets를 사용하여 URL 인코딩 및 디코딩 기능 추가
  • FileReader, FileWriter, PrintStream, PrintWriter의 Charset 기능
  • ByteArrayInput 또는 OutputStream 및 Input 또는 OutputStream의 새로운 transferTo(), readNBytes(), readAllBytes(), writeBytes() 함수
  • java.lang.invoke.VarHandle에 관한 런타임 및 컴파일러 지원
  • 내부적으로 VarHandle 사용하여 java.util.concurrent OpenJDK 11 API 업데이트
Comments