6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

Android 스튜디오 미리보기의 새로운 기능

Android 스튜디오 3.6이 공개 버전 채널로 출시되었습니다. 여기에서 다운로드하세요.

현재 Android 스튜디오 4.1은 Canary 및 개발자 채널에 있으며 Android 스튜디오 4.0은 베타 채널에 있습니다.

각 출시 버전의 주목할 만한 수정사항 목록을 비롯한 최신 출시 소식은 버전 업데이트를 참조하세요.

Android 스튜디오의 미리보기 버전을 사용하는 동안 문제가 발생하면 알려주시기 바랍니다. 버그 신고는 Android 스튜디오 개선에 도움이 됩니다.

Android 스튜디오 4.1

이 섹션에서는 Android 스튜디오 4.1의 새로운 기능과 변경사항을 간략히 설명합니다.

Database Inspector

Android 스튜디오 4.1 Canary 6 이상에서는 새로운 Database Inspector를 사용하여 앱의 데이터베이스를 검사하고 쿼리 및 수정할 수 있습니다. 예를 들어 데이터베이스의 값을 수정하고 이 변경사항을 기기에서 테스트하여 실행 중인 앱을 디버그할 수 있습니다.

테이블 값을 수정하고 실행 중인 앱에서 변경사항 보기

시작하려면 API 수준 26 이상을 실행하는 기기에 앱을 배포하고 메뉴 바에서 View > Tool Windows > Database Inspector를 선택합니다.

Database Inspector 창에서 앱의 프로세스가 자동으로 선택되어 있지 않으면 드롭다운 메뉴에서 프로세스를 선택합니다.

테이블 검사 및 수정

Databases 패널에서 앱의 데이터베이스를 볼 수 있으며 데이터베이스 노드를 확장하여 테이블을 볼 수 있습니다. 테이블을 더블클릭하면 아래 스크린샷처럼 오른쪽에 있는 별도의 탭에서 검사기가 테이블을 엽니다. 여기서 데이터를 검사하거나 열을 기준으로 정렬하거나 앱이 기기에서 실행되는 동안 값을 수정할 수도 있습니다.

테이블 셀의 값을 변경하려면 셀을 더블클릭하여 값을 변경한 다음 Enter 키를 누르면 됩니다. Room 지속성 라이브러리를 사용 중이며 데이터베이스를 관찰하는 경우(예: LiveData 사용) 실행 중인 앱에서 거의 즉시 변경사항을 확인할 수 있습니다. 그러지 않으면 앱의 데이터베이스 쿼리를 새로고침하여 변경사항을 확인할 수 있습니다.

앱의 데이터베이스 검사, 쿼리, 수정

앱이 데이터베이스를 업데이트하고 검사기 창에서 이 업데이트가 자동으로 표시되게 하려면 Live updates 옆의 체크박스를 선택합니다. 이 옵션을 사용하는 동안에는 검사기의 테이블이 읽기 전용으로 되며 값을 수정할 수 없습니다.

또는 Refresh Table을 클릭하면 검사기에서 수동으로 데이터를 업데이트할 수 있습니다. 마찬가지로 데이터베이스 스키마가 변경되면 Databases 패널에서 Refresh Schema를 클릭합니다.

데이터베이스 쿼리

데이터베이스를 쿼리하려면 Databases 패널에서 Run SQL을 클릭합니다. 그러면 오른쪽에 New Query 탭이 열립니다. 앱에 데이터베이스가 두 개 이상 포함된 경우에는 탭 창의 드롭다운 메뉴를 사용하여 쿼리할 데이터베이스를 선택합니다. 텍스트 입력란에서 SQLite 쿼리를 지정하고 Run을 클릭하면 됩니다. 그러면 검사기에서 앱의 데이터베이스를 쿼리하여 다음과 같이 결과를 반환합니다.

데이터베이스 쿼리

Room 지속성 라이브러리를 사용하는 경우 Android 스튜디오에서 @Query 주석에 정의한 쿼리를 빠르게 실행하는 데 유용한 거터 작업도 제공됩니다. 앱이 호환 기기에 배포되고 IDE에서 Database Inspector가 열려 있는 동안 아래와 같이 @Query 주석 옆의 버튼을 클릭합니다.

Room 쿼리 주석 거터 작업

Database Inspector에서 새 탭이 열리고 쿼리가 실행되어 결과가 반환됩니다. 쿼리에 명명된 결합 매개변수(예: :name)가 포함된 경우 Android 스튜디오는 쿼리를 실행하기 전에 각 매개변수의 값을 요청합니다.

네이티브 메모리 프로파일러

이제 Android 스튜디오 메모리 프로파일러에 Android 10 이상을 실행하는 실제 기기에 배포된 앱의 네이티브 메모리 프로파일러가 포함됩니다. 샘플 크기가 32바이트인 경우 네이티브 메모리 프로파일러는 특정 기간 동안 네이티브 코드에서 객체의 할당/할당 해제를 추적하고 다음 정보를 제공합니다.

  • Allocations: 선택한 기간 동안 malloc() 또는 new 연산자를 통해 할당된 객체의 수입니다.
  • Deallocations: 선택한 기간 동안 free() 또는 delete 연산자를 통해 할당 해제된 객체의 수입니다.
  • Allocations Size: 선택한 기간 동안 모든 할당의 집계 크기(단위: 바이트)입니다.
  • Deallocations Size: 선택한 기간 동안 확보되는 모든 메모리의 집계 크기(단위: 바이트)입니다.
  • Total Count: Allocations 열의 값에서 Deallocations 열의 값을 뺀 값입니다.
  • Remaining Size: Allocations Size 열의 값에서 Deallocations Size 열의 값을 뺀 값입니다.

네이티브 메모리 프로파일러

기록을 시작하려면 메모리 프로파일러 창 맨 위에서 Record native allocations를 클릭합니다.

Record native allocations 버튼

기록을 마칠 준비가 되면 Stop recording을 클릭합니다.

TensorFlow Lite 모델 사용

ML 모델 바인딩을 사용하면 .tflite 모델 파일을 직접 가져와 프로젝트에서 사용할 수 있습니다. Android 스튜디오에서는 사용하기 쉬운 클래스가 생성되므로, 코드를 적게 사용하고 유형 안전성을 높여 모델을 실행할 수 있습니다.

지원되는 모델

현재 ML 모델 결합의 Canary 구현은 메타데이터로 향상되는 경우 이미지 분류 및 스타일 전송 모델을 지원합니다. 시간이 지남에 따라 객체 감지, 이미지 세분화, 텍스트 분류와 같은 다른 문제 영역으로 지원이 확장됩니다.

다양한 선행 학습된 이미지 분류 모델이 TensorFlow Hub에 제공됩니다. '메타데이터'를 언급하는 모델 형식을 찾아 다운로드하면 됩니다. Adding metadata to TensorFlow Lite model(TensorFlow Lite 모델에 메타데이터 추가)의 설명대로 TensorFlow Lite 모델에 메타데이터를 직접 추가할 수도 있습니다.

모델 파일 가져오기

지원되는 모델 파일을 가져오려면 다음 단계를 따르세요.

  1. File 메뉴에서(File > New > Other > TensorFlow Lite Model) TensorFlow Lite 모델 가져오기 대화상자를 엽니다.
  2. 이전에 다운로드했거나 만든 .tflite 모델 파일을 선택합니다.
  3. Finish를 클릭합니다.

그러면 모델 파일을 프로젝트로 가져와 ml/ 폴더에 배치합니다. 디렉터리가 존재하지 않으면 Android 스튜디오에서 자동으로 디렉터리가 만들어집니다.

TensorFlow Lite 모델 가져오기

모델 메타데이터 보기

가져온 모델의 세부정보를 확인하고 앱에서 모델을 사용하는 방법에 관한 안내를 보려면 프로젝트에서 모델 파일을 더블클릭하여 다음을 보여주는 모델 뷰어 페이지를 엽니다.

  • Model: 모델에 관한 대략적인 설명
  • Tensors: 입력 및 출력 텐서에 관한 설명
  • Sample code: 앱에서 모델과 상호작용하는 방법의 예

TensorFlow Lite 모델 뷰어의 스크린샷

모델에 메타데이터가 없는 경우 이 화면은 최소한의 정보만 제공합니다.

앱에서 모델 사용

모델 뷰어는 앱에서 모델을 사용하기 시작하는 데 도움이 되는 샘플 코드를 제공합니다.

다음은 mobilenet_quant_metadata.tflite를 사용하는 예입니다.

Kotlin

    try {
        val model: MobilenetQuantMetadata = MobilenetQuantMetadata.newInstance(this)

        // Creates a TensorImage instance from Bitmap.
        val tensorImage = TensorImage()
        tensorImage.load(bitmap)

        // Runs model inference and gets result.
        val outputs: MobilenetQuantMetadata.Outputs = model.process(tensorImage)
        val tensorLabel: TensorLabel = outputs.getProbabilityAsTensorLabel()
        val probMap = tensorLabel.mapWithFloatValue

        for ((key, value) in probMap) {
            Log.d(TAG, "label = $key, prob = $value")
        }
    } catch (e: IOException) {
        // Handles exception
    }
    

자바

    try {
        MobilenetQuantMetadata model = MobilenetQuantMetadata.newInstance(this);

        // Creates a TensorImage instance from Bitmap.
        TensorImage tensorImage = new TensorImage();
        tensorImage.load(bitmap);

        // Runs model inference and gets results.
        MobilenetQuantMetadata.Outputs outputs = model.process(tensorImage);
        TensorLabel tensorLabel = outputs.getProbabilityAsTensorLabel();
        Map<String, Float> probMap = tensorLabel.getMapWithFloatValue();

        for (Map.Entry<String, Float> entry : probMap.entrySet()) {
          Log.d(TAG, "label = " + entry.getKey() + ", prob = " + entry.getValue());
        }
    } catch (IOException e) {
       // Handles exception
    }
    

예에서 알 수 있듯이 Android 스튜디오는 모델과 상호작용하기 위한 MobilenetQuantMetadata라는 클래스를 만듭니다.

알려진 문제 및 해결 방법

  • 이미지 분류 및 스타일 전송 이외의 문제 영역과 관련한 TensorFlow Lite 모델은 현재 제한적으로 지원됩니다. 가져오기는 잘 작동하지만 일부 모델 입력 및/또는 출력은 친숙한 유형이 아닌 TensorBuffers로 표현됩니다. 메타데이터가 없는 모델의 경우 모든 모델 입력 및 출력은 TensorBuffers입니다.
  • 20MB보다 큰 TensorFlow Lite 모델을 지원하려면 IntelliJ IDE 속성(idea.max.content.load.filesize)을 재정의합니다. 자세한 내용은 이 페이지를 참조하세요.
  • 입력 데이터 유형과 출력 데이터 유형이 DataType.UINT8 또는 DataType.FLOAT32가 아닌 모델은 지원되지 않습니다.

이 기능은 아직 개발 중이므로 의견을 보내거나 버그를 신고해 주세요.

Jetpack Compose 지원

Jetpack Compose 도구 키트를 사용하면 최신 방식으로 앱의 UI를 빌드할 수 있습니다. 도구 키트를 사용하면 간결하고 직관적으로 코드를 작성하고 자바와 완벽하게 상호 운용 가능한 Kotlin의 모든 이점도 누릴 수 있습니다.

Jetpack Compose로 최적의 환경에서 개발하려면 최신 버전의 Android 스튜디오 4.1을 사용해야 합니다. Jetpack Compose와 함께 Android 스튜디오를 사용하여 앱을 개발할 때 Compose UI를 즉시 미리 볼 수 있는 기능 및 새 프로젝트 템플릿과 같은 스마트 편집기 기능을 활용할 수 있기 때문입니다.

자세히 알아보고 시작하려면 Jetpack Compose 개요를 참조하시기 바랍니다.

디버그 빌드의 어설션

앱의 디버그 버전을 배포할 때 이제 자바 코드의 어설션을 사용할 수 있습니다. Android 런타임은 런타임 시(즉, -ea/-enableassertions 플래그와 동등한 항목을 자바 VM에 전달함) 어설션을 사용 설정하도록 지원하지 않으므로 이전에는 앱의 어설션이 적용되지 않았습니다.

이제 Android Gradle 플러그인 4.1.0-alpha01 이상을 사용하여 앱의 디버그 버전을 빌드하고 배포할 때 내장 컴파일러(D8)는 컴파일 시 어설션을 사용 설정하도록 코드를 다시 작성하므로, 항상 어설션 확인이 활성화됩니다.

4.1 미리보기의 알려진 문제

이 섹션에서는 Android 스튜디오 4.1 미리보기의 현재 알려진 문제를 설명합니다.

4.1 Canary 2에서 패치가 작동하지 않음

현재 Android 스튜디오 4.1 Canary 2의 패치가 작동하지 않습니다. 최신 버전의 Android 스튜디오 4.1로 업데이트하려면 Android 스튜디오를 종료한 다음 최신 패키지를 다운로드하여 설치하세요.

이 문제는 Android 스튜디오 4.1 Canary 3에서 해결되었습니다.

CPU 프로파일러의 시간 초과 오류

Sample Java Methods 또는 Trace Java Methods 구성을 선택하면 Android 스튜디오 CPU 프로파일러에서 '기록 중지 실패' 오류가 발생할 수도 있습니다. 특히 idea.log 파일에 다음 오류 메시지가 표시되는 경우 시간 초과 오류입니다.

Wait for ART trace file timed out

시간 초과 오류는 샘플링된 메서드보다 추적된 메서드에, 짧은 기록보다 긴 기록에 더 많은 영향을 미치는 경향이 있습니다. 일시적인 해결 방법으로, 짧은 기록을 시도하여 오류가 사라지는지 확인하는 것이 유용할 수도 있습니다.

프로파일러에 시간 초과 문제가 발생하면 기기의 제조업체/모델과 idea.log 및 logcat의 관련 항목을 포함하여 버그를 신고하세요.

IDE의 Git 버전 제어 오류

Git 버전 제어에서 인증이 필요한 작업은 Android 스튜디오 4.1 Canary 1용 IDE에서 작동하지 않습니다.

이 문제를 해결하려면 Android 스튜디오 4.1 Canary 2로 업그레이드하세요.

Android 스튜디오 4.0

이 섹션에서는 Android 스튜디오 4.0의 새로운 기능과 변경사항을 간략히 설명합니다.

CPU 프로파일러 UI 업그레이드

시스템 트레이스 UI 업그레이드

개발자 의견을 토대로 더욱 직관적인 워크플로를 제공하기 위해 CPU Profiler UI를 개선하였습니다. 눈에 띄는 변경사항은 다음과 같습니다.

  • 이제 CPU 기록이 기본 프로파일러 타임라인에서 분리되어 더 쉽게 분석할 수 있습니다. 기록된 데이터는 Profiler 창의 왼쪽에 그룹으로 구성됩니다. 창 오른쪽 상단에 있는 옵션 프로파일러의 옵션 아이콘 아이콘을 클릭하거나 그룹 내 개별 항목을 드래그 앤 드롭하면 그룹을 위아래로 이동하여 목록을 재구성 할 수 있습니다.
  • 이제 스레드 활동 타임라인에서 메서드, 함수, 이벤트를 비롯한 모든 스레드 활동을 보면서 더 쉽게 비교 분석할 수 있습니다.
  • 이제 Flame Chart, Top Down, Bottom Up 탭이 오른쪽 열에 표시됩니다. 스레드 그룹에서 시스템 트레이스 레코드일 경우에는 스레드가 펼쳐지고 다른 레코드 유형일 경우에는 기본적으로 스레드가 접힙니다. 스레드 이름을 더블클릭하여 스레드를 펼치거나 접습니다.
  • 위의 스크린샷과 같이 시스템 트레이스 UI도 개선되었습니다. 예를 들면 이제 독특한 색상으로 이벤트를 쉽게 구분할 수 있습니다.

이 기능은 아직 작업 중이니 계속 의견을 주시기 바랍니다.

별도의 주석 처리 기능을 삭제하였습니다.

주석 처리를 전용 작업으로 분리하는 기능을 삭제하였습니다. 이 옵션은 자바 전용 프로젝트에서 비증분 주석 프로세서를 사용한 경우 증분 자바 컴파일을 유지하는 데 사용되었으며 더 이상 사용할 수 없는 gradle.properties 파일의 android.enableSeparateAnnotationProcessingtrue로 설정하면 사용할 수 있었습니다.

대신 증분 주석 프로세서 사용으로 이전하여 빌드 성능을 개선해야 합니다.

빌드 속도 창

Android Gradle 플러그인 4.0.0-alpha03을 사용하는 Android 스튜디오 4.0 Canary 3 이상을 사용하는 경우 Build Speed 창을 통해 최적화 장애, 부적절하게 구성된 작업 등의 빌드 프로세스 관련 문제를 파악하고 진단할 수 있습니다. Android 스튜디오 4.0 Canary 3 이상, Android Gradle 플러그인 4.0.0-alpha03 이상을 사용할 경우 다음과 같이 Build Speed 창을 열 수 있습니다.

  1. 앱을 아직 빌드하지 않은 경우 메뉴 바에서 Build > Make Project를 선택하여 앱을 빌드합니다.
  2. 메뉴 바에서 View > Tool Windows > Build를 선택합니다.
  3. Build 창에서 다음 방법 중 하나를 사용하여 Build Speed 창을 엽니다.
    • Android 스튜디오에서 프로젝트 빌드를 완료하면 Build Speed 탭을 클릭합니다.
    • Android 스튜디오에서 프로젝트 빌드를 완료하면 Build Output 창의 오른쪽에 있는 링크를 클릭합니다.

발생 가능한 빌드 문제는 Build Speed 창의 왼쪽 트리에 정리됩니다. 각 문제를 검사하고 클릭하면 오른쪽 패널에서 세부정보를 조사할 수 있습니다. Android 스튜디오는 빌드를 분석할 때 빌드 기간을 결정하는 작업 집합을 계산하고 각 작업의 영향을 파악할 수 있도록 시각화합니다. Warning 노드를 확장하여 경고의 세부정보를 가져올 수도 있습니다.

빌드 속도 차트

빌드 기간을 결정하는 작업은 무엇인가요?

Gradle은 작업 상호 의존성, 프로젝트 구조, CPU 로드에 따라 작업 실행을 결정하며 순차적으로 또는 동시에 작업을 실행합니다. 특정 빌드의 경우 Build Speed 창은 현재 빌드 기간을 결정하는 순차적으로 실행된 작업 집합을 강조표시합니다. 전체 빌드 시간을 줄이려면 강조표시된 작업의 비효율성을 해결하는 것부터 시작하는 것이 가장 좋습니다.

실행하는 빌드마다 빌드 기간을 결정하는 작업 집합이 다를 수 있다는 점에 유의하시기 바랍니다. 예를 들어 빌드 구성을 변경하거나 다른 작업 집합(예: 증분 빌드)으로 빌드를 실행하거나 다른 제약 조건(예 : 과중한 CPU 로드)에서 빌드를 실행하면 Build Speed 창에서 빌드 기간에 가장 큰 영향을 미치는 다른 작업 집합이 강조표시됩니다. 이러한 변동성 때문에 여러 빌드에서 Build Speed 창을 사용하여 빌드 기간을 일관되게 줄일 수 있습니다.

Live Layout Inspector

업데이트된 Live Layout Inspector로 레이아웃을 디버그하세요. 이 기능을 사용하면 기기에 배포된 앱의 UI에 관해 유용한 전체 정보를 실시간으로 확인할 수 있습니다.

Layout Inspector 창을 열려면 View > Tools Windows > Layout Inspector로 이동하세요. Live Layout Inspector에는 기존 Layout Inspector와 동일한 기능이 많이 있을 뿐만 아니라 다음의 기능도 포함되어 있습니다.

  • 동적 레이아웃 계층 구조: 기기의 뷰가 변경되면 업데이트됩니다.

동적 레이아웃 계층 구조

  • 속성값 해상도 스택: 소스 코드에서 리소스 속성값의 출처를 조사한 후 속성 창에서 하이퍼링크를 따라 출처 위치로 이동합니다.

속성값 해상도 스택

  • 3D 보기: 고급 3D 시각화를 통해 런타임 시 앱의 뷰 계층 구조를 확인합니다. 이 기능을 사용하려면 Live Layout Inspector 창에서 레이아웃을 클릭하고 회전하세요.

Layout Inspector: 3D 보기

API 수준 29 이상을 실행하는 기기에 앱을 배포하는 경우에만 Live Layout Inspector를 사용할 수 있습니다. 또한 File > Settings > Experimental로 이동하여 Enable Live Layout Inspector 옆의 체크박스를 선택한 후 기능을 사용 설정해야 합니다.

다중 미리보기

다중 미리보기는 다양한 기기 및 구성의 레이아웃을 동시에 미리 볼 수 있는 시각적 도구로 레이아웃의 잠재적인 문제를 파악할 수 있습니다.

이 기능은 IDE 창의 오른쪽 상단에 있는 Multi Preview 탭을 클릭하여 액세스할 수 있습니다.

Multi Preview 탭

Pixel 기기와 프로젝트 언어라는 두 가지 다른 구성 집합에서 선택할 수 있습니다. 구성 집합 간에 전환하려면 Multi Preview 창의 상단에 있는 드롭다운 메뉴에서 선택합니다.

다중 미리보기 데모

D8 및 R8의 자바 8 라이브러리 디슈가링

이제 Android 스튜디오에서는 앱의 최소 API 수준을 요구하지 않으며 여러 Java 8 언어 API 사용을 지원합니다.

DEX 컴파일러인 D8은 디슈가링이라는 프로세스를 통해 이미 Android 스튜디오 3.0 이상에서 Java 8 언어 기능을 위한 많은 지원(람다 식, 기본 인터페이스 메서드, try with resources 등)을 하고 있습니다. Android 스튜디오 4.0에서는 자바 언어 API를 디슈가링할 수 있도록 디슈가링 엔진이 확장되었습니다. 즉, 최신 Android 릴리스(java.util.streams 등)에서만 사용할 수 있었던 표준 언어 API를 Android 이전 버전을 지원하는 앱에 포함할 수 있습니다.

이 릴리스에서는 다음의 API 집합이 지원됩니다.

  • 순차적 스트림(java.util.stream)
  • java.time의 하위 집합
  • java.util.function
  • 최근 java.util.{Map,Collection,Comparator}에 추가된 사항
  • 선택사항(java.util.Optional, java.util.OptionalIntjava.util.OptionalDouble)과 위의 API에서 유용하게 사용할 수 있는 몇 가지 새로운 클래스
  • 일부 java.util.concurrent.atomic에 추가된 사항(AtomicInteger, AtomicLong, AtomicReference의 새 메서드)
  • ConcurrentHashMap(Android 5.0 버그 수정 포함)

이러한 언어 API를 지원하기 위해 D8에서는 누락된 API의 구현을 포함하는 별도의 라이브러리 DEX 파일을 컴파일하고 앱에 포함합니다. 디슈가링 프로세스를 사용하면 앱 코드를 다시 작성하여 런타임에 이 라이브러리를 대신 사용할 수 있습니다.

이러한 언어 API를 지원하려면 모듈의 build.gradle 파일에 다음을 포함하세요.

android {
      defaultConfig {
        // Required when setting minSdkVersion to 20 or lower
        multiDexEnabled true
      }

      compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }

    dependencies {
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
    }
    

문제가 발생했거나 지원이 필요한 다른 API가 있으면 버그 추적기에서 버그를 신고하여 알려주세요.

Kotlin DSL 스크립트 파일 지원

이제 Android Gradle 플러그인에서 Kotlin DSL 빌드 스크립트 파일(*.kts)을 지원합니다. Android 스튜디오에서 사용하던 프로젝트 구조 대화상자, 빌드 스크립트 빠른 수정과 같은 특정 IDE 기능을 사용하여 Kotlin 빌드 스크립트 파일을 읽고 쓸 수 있습니다.

ProGuard 규칙의 스마트 편집기 기능

이제 Android 스튜디오에서 구문 강조표시, 코드 작성, 오류 검사 등 ProGuard 규칙 파일을 열었을 때 스마트 편집기 기능을 사용할 수 있습니다. 편집기가 Android 스튜디오 프로젝트와 통합되어 모든 클래스, 메서드, 필드에 모든 기호를 작성하고 빠른 탐색과 리팩터링을 할 수 있습니다.

ProGuard 규칙 파일 수정 시 스마트 편집기 기능

새 Motion Editor

이제 Android 스튜디오에 MotionLayout 레이아웃 유형에 사용할 수 있는 시각적 디자인 편집기가 포함되어 애니메이션을 더 쉽게 만들고 미리 볼 수 있습니다.

Motion Editor에서는 Android 앱에서 애니메이션의 기초가 되는 MotionLayout 라이브러리의 요소를 조작할 수 있는 간단한 인터페이스가 제공됩니다. 이전 릴리스에서는 이러한 요소를 만들고 변경할 때 XML 리소스 파일에서 제약 조건을 수동으로 수정해야 했습니다. 이제 시작 및 종료 상태, 키프레임, 전환, 타임라인을 지원하여 Motion Editor에서 XML을 생성할 수 있습니다.

Motion Editor를 시작하는 방법:

  1. ConstraintLayout을 생성합니다.
  2. Layout Editor의 미리보기를 마우스 오른쪽 버튼으로 클릭합니다.
  3. 다음과 같이 Convert to MotionLayout을 클릭합니다.

Android 스튜디오에서 ConstraintLayout을 MotionLayout으로 변환하면 Motion Scene 파일도 XML이 포함된 디렉터리에 추가됩니다.

그 후 MotionLayout가 루트 레이아웃이 되고 Motion Editor UI에 표시됩니다. 레이아웃에 이미 시작 ConstraintSet, 끝 ConstraintSet이 포함되어 있으며 시작부터 끝까지 전환이 이루어집니다.

개요 그래픽을 사용하여 ConstraintSet 또는 Transition을 선택하고 선택 패널에서 구성 요소를 선택할 수 있습니다.

그 후 시작 또는 끝의 제약 조건 및 속성 ConstraintSetConstraintLayout 편집과 같은 방식으로 수정할 수 있습니다.

그래프에 더 많은 요소를 빌드하려면 만들기 아이콘을 사용하여 ConstraintSet, Transition, OnClick/OnSwipe 제스처를 빠르게 추가하면 됩니다.

키프레임을 추가하려면 먼저 Transition 화살표를 클릭합니다.

그 후 Transition 타임라인 창에서 오른쪽 상단을 클릭하고 KeyPosition을 선택합니다.

그러면 키프레임의 속성을 설정할 수 있는 대화상자가 열립니다.

속성 패널의 Transition에 OnClickOnSwipe 핸들러도 추가할 수 있습니다.

그러면 타겟 컴포넌트, 드래그 방향 등 클릭 속성을 설정할 수 있는 대화상자가 열립니다.

Motion Editor는 디자인 화면에서 애니메이션 미리보기를 지원합니다. 애니메이션을 선택할 때 타임라인 상단의 Play를 클릭하면 애니메이션을 미리 볼 수 있습니다.

Android Gradle 플러그인 4.0.0의 새로운 기능

이 섹션에서는 Android Gradle 플러그인 4.0.0에 포함된 새로운 기능과 동작 변경사항을 설명합니다.

빌드 기능을 사용 설정 또는 사용 중지할 수 있는 새로운 옵션

Android Gradle 플러그인 4.0.0-alpha05에는 뷰 바인딩, 데이터 바인딩, Jetpack Compose 등 사용 설정 및 사용 중지할 빌드 기능을 제어하는 새로운 방법이 도입되었습니다. 새로 추가된 기능은 기본적으로 사용 중지됩니다. 이후에 buildFeatures 차단 기능을 사용하여 원하는 기능만 사용하여 프로젝트의 빌드 성능을 최적화할 수 있습니다. 다음과 같이 모듈 수준의 build.gradle 파일에 있는 각 모듈의 옵션을 설정할 수 있습니다.

    android {
        // The default value for each feature is shown below. You can change the value to
        // override the default behavior.
        buildFeatures {
            // Determines whether to generate a BuildConfig class.
            buildConfig = true
            // Determines whether to support View Binding.
            // Note that the viewBinding.enabled property is now deprecated.
            viewBinding = false
            // Determines whether to support Data Binding.
            // Note that the dataBinding.enabled property is now deprecated.
            dataBinding = false
            // Determines whether to generate binder classes for your AIDL files.
            aidl = true
            // Determines whether to support RenderScript.
            renderScript = true
            // Determines whether to support injecting custom variables into the module's R class.
            resValues = true
            // Determines whether to support shader AOT compilation.
            shaders = true
        }
    }
    

다음과 같이 프로젝트의 gradle.properties 파일에 다음 중 하나 이상을 포함하면 프로젝트의 모든 모듈에서 이러한 기능의 기본 설정을 지정할 수도 있습니다. 이 경우에도 모듈 수준의 build.gradle 파일에 있는 buildFeatures 블록을 사용하여 프로젝트 전체의 기본 설정을 재정의할 수 있습니다.

android.defaults.buildfeatures.buildconfig=true
    android.defaults.buildfeatures.aidl=true
    android.defaults.buildfeatures.renderscript=true
    android.defaults.buildfeatures.resvalues=true
    android.defaults.buildfeatures.shaders=true
    

기능별 종속성

이전 버전의 Android Gradle 플러그인에서는 모든 동적 기능 모듈이 앱의 기본 모듈에만 종속될 수 있었습니다. 이제 Android Gradle 플러그인 4.0.0을 사용하여 다른 기능 모듈에 종속되는 기능 모듈을 포함할 수 있습니다. 즉, 아래 그림과 같이 :video 기능은 기본 모듈에 종속되는 :camera 기능에 종속될 수 있습니다.

기능별 종속성

동적 기능 :video는 기본 :app 모듈에 종속되는 기능 :camera에 종속됩니다.

즉, 앱에서 동적 기능 모듈을 다운로드하도록 요청하면 종속된 다른 기능 모듈도 다운로드합니다. 앱에 동적 기능 모듈을 생성한 후 모듈의 build.gradle 파일에 기능별 종속 항목을 선언할 수 있습니다. 예를 들면 :video 모듈은 다음과 같이 :camera에 관한 종속 항목을 선언합니다.

// In the build.gradle file of the ':video' module.
    dependencies {
        // All dynamic feature modules must declare a dependency
        // on the base module.
        implementation project(':app')
        // Declares that this module also depends on the 'camera'
        // dynamic feature module.
        implementation project(':camera')
        ...
    }
    

또한 Android 스튜디오의 기능별 종속성 기능을 사용 설정하여 실행 구성을 수정할 때 기능을 지원해야 합니다. 이렇게 하려면 메뉴 바에서 Help > Edit Custom VM Options를 클릭하고 다음 내용을 포함합니다.

-Drundebug.feature.on.feature=true
    

Android Gradle의 '기능' 및 'instantapp' 플러그인 삭제

Android Gradle 플러그인 3.6.0에서는 동적 기능 플러그인(com.android.dynamic-feature)을 사용하여 Android App Bundle을 사용하는 인스턴트 앱을 빌드하고 패키징할 수 있도록 기능 플러그인(com.android.feature)과 인스턴트 앱 플러그인(com.android.instantapp)이 지원 중단되었습니다.

Android Gradle 플러그인 4.0.0-alpha01 이상에서는 지원 중단된 플러그인이 완전히 삭제됩니다. 따라서 최신 Android Gradle 플러그인을 사용하려면 Android App Bundle을 지원할 수 있도록 인스턴트 앱을 이전해야 합니다. 인스턴트 앱을 이전하면 App Bundle의 이점을 활용하고 앱의 모듈형 디자인을 간소화할 수 있습니다.

종속 항목 메타데이터

Android Gradle 플러그인 4.0.0-beta02 이상을 사용하여 앱을 빌드할 때 플러그인에는 앱에 컴파일되는 종속 항목을 설명하는 메타데이터가 포함되어 있습니다. 앱을 업로드할 때 Play Console은 이 메타데이터를 검사하여 다음과 같은 이점을 제공합니다.

  • 앱에서 사용하는 SDK 및 종속 항목의 알려진 문제에 관한 알림 받기
  • 문제 해결을 위한 실행 가능한 피드백 받기

데이터는 압축되고 Google Play 서명 키에 의해 암호화되며 출시 앱의 서명 블록에 저장됩니다. 그러나 로컬 중간 빌드 파일에서 <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt 디렉터리의 메타데이터를 직접 검사할 수 있습니다.

이 정보를 공유하지 않으려면 모듈의 build.gradle 파일에 다음을 포함하여 선택 해제할 수 있습니다.

android {
        dependenciesInfo {
            // Disables dependency metadata when building APKs.
            includeInApk = false
            // Disables dependency metadata when building Android App Bundles.
            includeInBundle = false
        }
    }
    

Kotlin Android 라이브 템플릿

이제 Android 스튜디오에 Kotlin 클래스용 Android 라이브 템플릿이 포함됩니다. 예를 들면 이제 toast를 입력한 후 Tab 키를 눌러 토스트를 빠르게 삽입할 수 있습니다. 사용 가능한 라이브 템플릿의 전체 목록을 보려면 메뉴 바에서 File > Settings(macOS의 경우 Android Studio(Android 스튜디오) > Preferences(환경설정))을 클릭하여 Editor > Live Templates로 이동합니다.

프래그먼트 마법사 및 새 프래그먼트 템플릿

이제 탐색 편집기에서 File > New > Fragment > Gallery로 이동하거나 Create new destination을 클릭하면 새 Android 프래그먼트 마법사와 프래그먼트 템플릿을 사용할 수 있습니다.

프래그먼트 갤러리 마법사

프래그먼트 갤러리 마법사

AAR 종속 항목에서 네이티브 라이브러리 가져오기

Android Gradle 플러그인 4.0 Canary 9부터 앱의 AAR 종속 항목에서 C/C++ 라이브러리를 가져올 수 있습니다. 아래에 나온 구성 단계를 따르면 Gradle에서 자동으로 이러한 네이티브 라이브러리를 CMake와 같은 외부 네이티브 빌드 시스템에서 사용 가능하도록 합니다. Gradle은 이러한 라이브러리를 빌드에 사용할 수 있도록 할 뿐이며, 개발자는 라이브러리를 사용하도록 빌드 스크립트를 구성해야 합니다.

라이브러리는 Prefab 패키지 형식을 사용하여 내보내집니다.

각 종속 항목은 하나 이상의 모듈로 구성된 Prefab 패키지를 최대 한 개까지 노출할 수 있습니다. Prefab 모듈은 단일 라이브러리로서 공유, 정적 또는 헤더 전용 라이브러리일 수 있습니다.

일반적으로 패키지 이름은 Maven 아티팩트 이름과 일치하고 모듈 이름은 라이브러리 이름과 일치하지만 항상 그렇지는 않습니다. 라이브러리의 패키지 및 모듈 이름을 알아야 하므로 종속 항목 설명서를 참조하여 이름이 무엇인지 확인해야 할 수도 있습니다.

외부 네이티브 빌드 시스템 구성

따라야 할 단계를 보려면 사용하려는 외부 네이티브 빌드 시스템을 클릭합니다.

AAR에 포함된 네이티브 종속 항목은 CMAKE_FIND_ROOT_PATH를 통해 CMake 프로젝트에 노출됩니다. 이 값은 CMake 호출 시 Gradle에 의해 자동으로 설정되므로, 빌드가 이 변수를 수정하는 경우 변수에 할당하지 말고 추가해야 합니다.

각 종속 항목은 config-file 패키지를 CMake 빌드에 노출하며, 이 패키지는 find_package 명령어를 사용하여 가져옵니다. 이 명령어는 지정된 패키지 이름 및 버전과 일치하는 config-file 패키지를 검색하여 정의하는 타겟을 빌드에서 사용되도록 노출합니다. 예를 들어 libapp.so를 정의하고 curl을 사용하는 애플리케이션의 경우 CMakeLists.txt 파일에 다음을 포함해야 합니다.

add_library(app SHARED app.cpp)

    # Add these two lines.
    find_package(curl REQUIRED CONFIG)
    target_link_libraries(app curl::curl)
    

이제 app.cpp에서 #include "curl/curl.h"를 지정할 수 있습니다. 프로젝트를 빌드하면 외부 네이티브 빌드 시스템이 APK 또는 App Bundle의 libcurl.so 및 패키지 libcurl.so에 관해 libapp.so를 자동으로 연결합니다.

4.0 미리보기의 알려진 문제

이 섹션에서는 Android 스튜디오 4.0 미리보기의 현재 알려진 문제를 설명합니다.

빌드 분석 도구가 베타 4에서 사용 중지됨

빌드 분석 도구가 Android 스튜디오 4.0 베타 4에서 사용 중지되며 베타 5에서 다시 사용 설정됩니다.

CPU 프로파일러의 시간 초과 오류

Sample Java Methods 또는 Trace Java Methods 구성을 선택하면 Android 스튜디오 CPU 프로파일러에서 '기록 중지 실패' 오류가 발생할 수도 있습니다. 특히 idea.log 파일에 다음 오류 메시지가 표시되는 경우 시간 초과 오류입니다.

Wait for ART trace file timed out

시간 초과 오류는 샘플링된 메서드보다 추적된 메서드에, 짧은 기록보다 긴 기록에 더 많은 영향을 미치는 경향이 있습니다. 일시적인 해결 방법으로, 짧은 기록을 시도하여 오류가 사라지는지 확인하는 것이 유용할 수도 있습니다.

프로파일러에 시간 초과 문제가 발생하면 기기의 제조업체/모델과 idea.log 및 logcat의 관련 항목을 포함하여 버그를 신고하세요.

4.0 베타 2에서 패치가 작동하지 않음

현재 Android 스튜디오 4.0 Beta 2용 패치가 작동하지 않습니다. 최신 버전의 Android 스튜디오 4.0으로 업데이트하려면 Android 스튜디오를 종료한 다음 최신 패키지를 다운로드하여 설치하세요.

이 문제는 Android 스튜디오 4.0 베타 3에서 수정되었습니다.

IDE의 Git 버전 제어 오류

Git 버전 제어에서 인증이 필요한 작업은 Android 스튜디오 4.0 베타 1용 IDE에서 작동하지 않습니다.

이 문제를 해결하려면 Android 스튜디오 4.0 베타 2 이상으로 업그레이드하세요.

실행, 디버그, 프로필 툴바 버튼 누락

작업 버튼의 Run/Debug 그룹을 맞춤설정(예: Settings 또는 Preferences 창에서 Appearance & Behavior > Menus and Toolbars의 옵션 수정)한 경우 IDE를 다시 시작한 후에 작업 버튼이 툴바에서 사라질 수 있습니다. 이것은 Android 스튜디오 4.0이 빌드된 IntelliJ 버전의 알려진 문제입니다(문제 IDEA-228450 참조).

이 문제를 해결하려면 다음과 같이 버튼에 적용한 맞춤 설정을 되돌립니다.

  1. File > Settings(macOS의 경우 Android Studio(Android 스튜디오) > Preferences(환경설정))를 선택합니다.
  2. 창 왼쪽에서 Appearance & Behavior > Menus and Toolbars로 이동합니다.
  3. 창 오른쪽에서 Main Toolbar > Toolbar Run Actions로 이동하여 Run/Debug를 선택합니다.
  4. 창 상단의 되돌리기 를 클릭하고 Restore Run/Debug를 선택합니다.
  5. OK를 클릭합니다. 이제 누락된 버튼이 툴바에서 표시됩니다.

Canary 5에서 사용할 수 없는 패치

이전에 출시된 Android 스튜디오 4.0 Canary 버전에서는 Android 스튜디오 4.0 Canary 5용 패치를 사용할 수 없습니다. Android 스튜디오 4.0 Canary 5를 설치하려면 Android 스튜디오 다운로드 페이지에서 다운로드하세요.

Canary 5의 프로파일러 및 Live Layout Inspector

Android 스튜디오 4.0 Canary 5부터 Live Layout Inspector와 프로파일러가 Windows에서 제대로 작동하지 않아 다음과 같이 오류 메시지가 표시됩니다.

    transfer error: couldn't create file: Read-only file system.
    

이 문제를 해결하려면 Android 스튜디오 4.0 Canary 7 이상으로 업그레이드하세요.

Kotlin Maven 저장소 누락

Android 스튜디오 4.0 Canary 4 이하를 사용하는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.

Application build has failed with an error (Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25)
    

이 문제를 해결하려면 Android 스튜디오 4.0 Canary 5 이상으로 업데이트하세요.

네이티브 종속 항목이 있는 앱을 배포할 때 IllegalStateException 발생

앱에 네이티브 종속 항목이 포함되고 androidParallelJsonGen=true(기본값)이 있는 경우 Android 스튜디오에서 앱을 배포할 때 IllegalStateException 예외가 발생합니다. 이 문제를 해결하려면 프로젝트의 gradle.properties 파일에서 android.enableParallelJsonGen=false를 설정합니다. 자세한 내용은 문제 149575364를 참조하세요.

네이티브 종속 항목을 포함한 문제

Android Gradle 플러그인은 현재 몇 가지 알려진 문제가 있는 이전 버전의 Prefab으로 기본 설정됩니다.

  • Windows에서 라이브러리 경로가 잘못 이스케이프됩니다.
  • CMake 플러그인이 정적 라이브러리를 잘못 내보냅니다.
  • 유효한 STL 조합이 잘못 거부될 수 있습니다.

최신 버전의 Prefab에서는 이러한 문제를 해결했습니다. 최신 버전의 Prefab을 사용하려면 프로젝트의 gradle.properties 파일에서 android.prefabVersion1.0.0-alpha6 이상으로 설정합니다.