Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Android 스튜디오 및 Android Gradle 플러그인의 알려진 문제

이 페이지는 Android 스튜디오 3.6 및 Android Gradle 플러그인 3.6.0의 알려진 문제를 추적합니다. 여기에 아직 포함되지 않은 문제가 발생하면 버그를 신고하세요.

미리보기로 업그레이드: 각 Android 스튜디오 및 Android Gradle 플러그인 버전의 목표는 안정성과 성능을 개선하고 새로운 기능을 추가하는 것입니다. 지금 향후 버전의 이점을 활용하려면 Android 스튜디오 미리보기를 다운로드하여 설치하세요.

Android 스튜디오의 알려진 문제

이 섹션에서는 안정적인 최신 Android 스튜디오 버전에 존재하는 알려진 문제를 설명합니다.

IDE의 Git 버전 제어 오류

Git 버전 제어에서 인증이 필요한 작업이 Android 스튜디오 3.6 용 IDE에서 손상됩니다.

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

Linux에서 키 매핑 충돌

Linux에서 특정 단축키가 기본 Linux 단축키 및 많이 사용되는 창 관리자(예: KDE, GNIME)의 단축키와 충돌합니다. 충돌하는 단축키는 Android 스튜디오에서 예상대로 작동하지 않을 수도 있습니다.

이 문제에 관한 자세한 내용(잠재적인 해결 방법 포함)은 IntelliJ의 버그 추적기를 참조하세요.

Chrome OS의 작은 UI 텍스트

Chrome OS에서는 텍스트가 이전 버전보다 훨씬 작아 보일 수 있습니다. 이 문제를 해결하려면 다음 단계를 따르세요.

  1. File > Settings를 클릭하여 Settings 창을 엽니다.
  2. Appearance & Behavior > Appearance로 이동합니다.
  3. Use custom font를 선택합니다.
  4. 글꼴 크기를 확대합니다.
  5. Settings 창에서 Editor > Font로 이동합니다.
  6. 글꼴 크기를 확대합니다.
  7. OK를 클릭합니다.

코드 수정

이 섹션에서는 코드 편집기와 관련된 알려진 문제를 설명합니다.

키보드 입력이 정지됨 - Linux의 'iBus' 문제

Linux의 iBus 데몬과 Android 스튜디오 간에는 몇 가지 알려진 상호작용이 있습니다. 일부 시나리오에서는 IDE가 키보드 입력에 응답하지 않거나 임의의 문자를 입력하기 시작합니다. 이 버그는 iBus와 XLib + AWT 간의 일부 누락된 동기화로 인해 트리거되며 이미 JetBrainsiBus에 보고되었습니다. 현재 이 문제를 해결하는 세 가지 방법이 있습니다.

  • 해결 방법 1: iBus를 동기 모드로 강제 전환합니다. Android 스튜디오를 시작하기 전에 명령줄에서 다음을 실행합니다.
    $ IBUS_ENABLE_SYNC_MODE=1 ibus-daemon -xrd
  • 해결 방법 2: Android 스튜디오에서 iBus 입력을 사용 중지합니다. Android 스튜디오에서만 iBus 입력을 사용 중지하려면 명령줄에서 다음을 실행합니다.
    $ XMODIFIERS= ./bin/studio.sh
    이렇게 하면 실행 중인 다른 애플리케이션은 그대로 두고 Android 스튜디오의 입력 방법만 사용 중지됩니다. Android 스튜디오가 실행 중일 때 데몬을 다시 시작하면(예: ibus-daemon -rd를 실행) 다른 모든 애플리케이션의 입력 방법이 효과적으로 사용 중지되며 세그먼트 오류로 인해 Android 스튜디오의 JVM이 다운될 수도 있습니다.
  • 해결 방법 3: 단축키 바인딩을 다시 확인하여 Next input shortcut이 Control+Space로 설정되지 않았는지 확인합니다. 이 단축키는 Android 스튜디오에서 코드 작성 단축키입니다. Ubuntu 14.04(Trusty)에서는 Super+Space가 기본 단축키지만 이전 버전의 설정이 여전히 남아있을 수 있습니다. 단축키 바인딩을 확인하려면 명령줄에서 ibus-setupibus-setup을 실행하여 IBus 환경설정 창을 엽니다. Keyboard Shortcuts 아래에서 Next input method를 확인합니다. Control+Space로 설정되어 있으면 Super+Space나 원하는 다른 단축키로 변경합니다.

프로젝트 구성

이 섹션에서는 프로젝트 구성 및 Gradle 동기화와 관련된 알려진 문제를 설명합니다.

Gradle 동기화 실패: 파이프 단절

Gradle 데몬에서 IPv6 대신 IPv4를 사용하려고 하는 문제입니다.

  • 해결 방법 1: Linux에서 ~/.profile 또는 ~/.bash_profile에 다음을 삽입합니다.
    export _JAVA_OPTIONS="-Djava.net.preferIPv6Addresses=true"
  • 해결 방법 2: Android 스튜디오의 vmoptions 파일에서 -Djava.net.preferIPv6Addresses=true 줄을 -Djava.net.preferIPv6Addresses=true로 변경합니다. 자세한 내용은 네트워킹 IPv6 사용자 가이드를 참조하세요.

Gradle 동기화 또는 SDK Manager의 '피어가 인증되지 않음' 오류

이러한 오류의 근본 원인은 $JAVA_HOME/jre/lib/certificates/cacerts의 인증서 누락입니다. 이 오류를 해결하려면 다음과 같이 진행합니다.

  • 프록시 서버를 통해 연결되어 있다면 직접 연결해 봅니다. 직접 연결이 작동하는 경우 프록시를 통해 연결하려면 keytool을 사용하여 프록시 서버의 인증서를 cacerts 파일에 추가해야 할 수 있습니다.
  • 수정되지 않은 지원 JDK를 다시 설치합니다. Ubuntu 사용자에게 영향을 미치는 알려진 문제가 있으며, 이 문제로 인해 /etc/ssl/certs/java/cacerts가 비어있게 됩니다. 이 문제를 해결하려면 명령줄에서 다음을 실행합니다.
    sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

배포

이 섹션에서는 연결된 기기에 앱을 배포하는 것과 관련된 알려진 문제를 설명합니다.

macOS High Sierra의 Android Emulator HAXM

macOS High Sierra(10.13)의 Android Emulator는 HAXM 6.2.1+가 있어야 macOS 호환성과 안정성이 극대화됩니다. 그러나 macOS 10.13에는 HAXM과 같은 커널 확장자를 설치하는 더 복잡한 프로세스가 있습니다. 다음과 같이 커널 확장자가 설치될 수 있도록 수동으로 허용해야 합니다.

  1. 먼저 SDK Manager에서 최신 버전의 HAXM을 설치합니다.
  2. macOS에서 System Preferences(시스템 환경설정) > Security and Privacy(보안 및 개인 정보 보호)로 이동합니다.
  3. System software from developer 'Intel Corporation Apps' was blocked from loading(개발자 'Intel Corporation Apps'의 시스템 소프트웨어가 차단되어 로드할 수 없습니다)라는 경고가 표시되면 Allow(허용)를 클릭합니다.

자세한 내용과 해결 방법은 이 Apple 웹페이지문제 62395878을 참조하세요.

변경사항 적용

이 섹션에서는 변경사항 적용과 관련된 알려진 문제를 설명합니다.

Android 런타임의 문제로 인해 오류가 발생함

Android 8.0 또는 8.1을 실행하는 기기를 사용하는 경우 특정 유형의 변경사항을 적용하려고 할 때(특히 Kotlin을 사용하는 경우) 'VERIFICATION_ERROR' 메시지가 표시될 수 있습니다. 이 메시지는 Android 9.0 이상에서 수정된 Android 런타임의 문제로 인해 표시됩니다. 이 문제로 인해 변경사항이 적용되지 않지만 앱을 다시 실행 실행 아이콘하여 변경사항을 확인할 수 있습니다. 하지만 기기를 Android 9.0 이상으로 업그레이드하는 것이 좋습니다.

android:sharedUserId를 사용할 때 변경사항을 적용할 수 없음

다음 방법 중 하나로 구성된 실행 중인 앱에 아직 배포되지 않은 클래스를 변경하려는 경우 변경사항이 적용되지 않습니다.

이 문제로 인해 변경사항이 적용되지 않으면 Android 스튜디오에서 다음 메시지를 표시합니다.

Changes were not applied. JVMTI error: UNKNOWN_JVMTI_ERROR
    

Android 스튜디오 3.5에서 이 문제를 해결하려면 Run 실행 아이콘을 클릭하여 앱을 다시 배포하고 변경사항을 확인하세요.

디버깅 및 테스트

이 섹션에서는 앱의 디버깅 및 테스트와 관련된 알려진 문제를 설명합니다.

Android 스튜디오에서 JUnit을 실행하면 클래스 경로의 누락된 리소스를 테스트함

자바 모듈에 특정 리소스 폴더가 있으면 IDE에서 테스트를 실행할 때 이러한 리소스가 발견되지 않습니다. 명령줄에서 Gradle을 사용하여 테스트를 실행하면 제대로 작동합니다. IDE에서 실행하는 Gradle check 작업도 제대로 작동합니다. 자세한 내용은 문제 64887을 참조하세요.

IntelliJ 13부터 클래스 경로로 하나의 폴더만 사용할 수 있기 때문에 이 문제가 발생합니다. IntelliJ의 빌더는 모든 리소스를 빌드 폴더에 복사하지만, Gradle은 리소스를 복사하지 않습니다.

  • 해결 방법 1: 단위 테스트를 실행하는 대신 IDE에서 Gradle check 작업을 실행합니다.
  • 해결 방법 2: 빌드 스크립트를 업데이트하여 리소스를 빌드 폴더에 수동으로 복사합니다. 자세한 내용은 댓글 #13을 참조하세요.

JUnit 테스트를 실행하면 코드가 두 번 컴파일될 수 있음

새로운 프로젝트를 생성하면 두 가지 '출시 전' 단계인 Make와 Gradle 인식 Make를 포함하는 템플릿 JUnit 구성이 생성될 수 있습니다. 그런 다음, 이 구성은 생성된 모든 JUnit 실행 구성으로 전파됩니다.

  • 현재 프로젝트에서 이 문제를 해결하려면 Run > Edit Configurations를 클릭하고 기본 JUnit 구성을 변경하여 Gradle 인식 Make 단계만 포함하도록 합니다.
  • 향후 프로젝트에서 이 문제를 해결하려면 File > Close Project를 클릭합니다. 그러면 환영 화면이 나타납니다. 다음으로, Configure > Project Defaults > Run Configurations를 클릭하고 JUnit 구성을 변경하여 Gradle 인식 Make 단계만 포함하도록 합니다.

일부 테스트 실행 구성이 작동하지 않음

테스트 메서드를 마우스 오른쪽 버튼으로 클릭할 때 사용 가능한 실행 구성이 모두 유효한 것은 아닙니다. 특히 다음 구성이 유효하지 않습니다.

  • Gradle 실행 구성(Gradle 로고 아이콘이 있음)은 작동하지 않습니다.
  • JUnit 실행 구성(초록색 Android가 없는 아이콘이 있음)은 로컬 JVM에서 실행할 수 없는 계측 테스트에 적용되지 않습니다.
Android 스튜디오는 또한 주어진 컨텍스트(예: 특정 클래스 또는 메서드를 마우스 오른쪽 버튼으로 클릭)에서 생성된 실행 구성을 기억하여 향후에 다른 구성에서 실행하지 않도록 합니다. 이 문제를 해결하려면 Run > Edit Configurations를 클릭하고 잘못 생성된 구성을 삭제합니다.

네이티브 코드를 디버깅하는 동안 자바 중단점 추가

앱이 네이티브 코드의 중단점에서 일시중지된 동안 AutoDual 디버거가 새롭게 설정된 자바 중단점을 즉시 인식하지 못할 수 있습니다. 이 문제를 방지하려면 디버그 세션을 시작하기 전에 또는 자바 중단점에서 앱이 일시중지된 상태에서 자바 중단점을 추가합니다. 자세한 내용은 문제 229949를 참조하세요.

네이티브 디버거에서 나가기

자바 및 네이티브 코드를 디버그하는 데 Auto 또는 Dual 디버거를 사용하는 동안 자바 코드에서 네이티브 함수로 들어갔으며(예: 네이티브 함수를 호출하는 자바 코드 줄에서 디버거가 실행을 일시중지하고 개발자가 Step Into 를 클릭함) 자바 코드로 돌아가고 싶은 경우 Step Out 또는 Step Over 대신 Resume Program 을 클릭합니다. 앱 프로세스는 여전히 일시중지되므로 앱 프로세스를 계속하려면 your-module-java 탭의 Resume Program 을 클릭하세요. 자세한 내용은 문제 224385를 참조하세요.

프로파일러

이 섹션에서는 프로파일러와 관련된 알려진 문제를 설명합니다.

디버깅 또는 프로파일링 시 ADB 예외 발생

플랫폼 도구 29.0.3을 사용하는 경우 네이티브 디버깅 및 Android 스튜디오 프로파일러가 제대로 작동하지 않을 수 있으며 Help > Show Log를 선택할 때 idea.log 파일에 'AdbCommandRejectedException' 또는 'Failed to connect port'가 표시될 수 있습니다. 플랫폼 도구를 29.0.4 이상으로 업그레이드하면 두 가지 문제가 모두 해결됩니다.

플랫폼 도구를 업그레이드하려면 다음을 실행하세요.

  1. Android 스튜디오에서 Tools > SDK Manager를 클릭하거나 툴바에서 SDK Manager 를 클릭하여 SDK Manager를 엽니다.
  2. Android SDK Platform-Tools 옆의 체크박스를 클릭하여 체크표시를 표시합니다. 왼쪽 열에 다운로드 아이콘 이 표시됩니다.
  3. Apply 또는 OK를 클릭합니다.

Android Gradle 플러그인의 알려진 문제

이 섹션에서는 안정적인 최신 Android Gradle 플러그인 버전에 존재하는 알려진 문제를 설명합니다.

매니페스트 클래스 누락

앱이 매니페스트에 맞춤 권한을 정의하면 Android Gradle 플러그인은 일반적으로 맞춤 권한을 문자열 상수로 포함하는 Manifest.java 클래스를 생성합니다. 플러그인은 이 클래스를 앱과 패키지로 구성하므로 런타임 시 이러한 권한을 더 쉽게 참조할 수 있습니다.

Android Gradle 플러그인 3.6.0 이상에서 매니페스트 클래스 생성이 손상됩니다. 이 플러그인 버전으로 앱을 빌드하며 매니페스트 클래스를 참조한다면 ClassNotFoundException 예외가 표시됩니다. 이 문제를 해결하려면 다음 중 한 가지를 따르세요.

  • 정규화된 이름으로 맞춤 권한을 참조합니다. 예: "com.example.myapp.permission.DEADLY_ACTIVITY"
  • 아래와 같이 자체 상수를 정의합니다.

    public final class CustomPermissions {
          public static final class permission {
            public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
          }
        

캐리지 리턴(CR) 문자로 이름이 지정된 파일 서명

JAR 서명(v1 체계)은 캐리지 리턴(CR) 문자가 포함된 파일 이름은 지원하지 않습니다. (문제 #63885809 참조).

API 변경사항

Android Gradle 플러그인 3.0.0 이상에 도입된 API 변경사항은 특정 기능을 삭제하며 기존 빌드를 손상시킬 수 있습니다. 이후 버전의 플러그인에서는 손상된 기능을 대체하는 새로운 공개 API가 도입될 수도 있습니다.

빌드 시점에서 변형 출력 수정이 작동하지 않을 수 있음

Variant API를 사용하여 변형 출력을 조작하는 기능은 새로운 플러그인에서 작동하지 않습니다. 그러나 아래와 같이 빌드 시간 중에 APK 이름을 변경하는 등의 간단한 작업은 여전히 작동합니다.

    // If you use each() to iterate through the variant objects,
    // you need to start using all(). That's because each() iterates
    // through only the objects that already exist during configuration time—
    // but those object don't exist at configuration time with the new model.
    // However, all() adapts to the new model by picking up object as they are
    // added during execution.
    android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${variant.versionName}.apk"
        }
    }
    

그러나 outputFile 객체 액세스가 관련된 더 복잡한 작업은 더 이상 작동하지 않습니다. 구성 단계에서 변형별 작업이 더 이상 생성되지 않기 때문입니다. 그 결과, 플러그인이 모든 출력을 미리 다 알지는 못하지만 구성 시간은 더 빨라집니다.

manifestOutputFile을 더 이상 사용할 수 없음

processManifest.manifestOutputFile() 메서드는 더 이상 사용할 수 없으며 이 메서드를 호출하면 다음과 같은 오류가 발생합니다.

    A problem occurred configuring project ':myapp'.
       Could not get unknown property 'manifestOutputFile' for task ':myapp:processDebugManifest'
       of type com.android.build.gradle.tasks.ProcessManifest.
    

각 변형의 manifest 파일을 가져오기 위해 manifestOutputFile()을 호출하는 대신 생성된 모든 manifest가 포함된 디렉터리의 경로를 반환하기 위해 processManifest.manifestOutputDirectory()를 호출할 수 있습니다. 그런 다음, manifest를 찾아 여기에 로직을 적용할 수 있습니다. 아래 샘플은 manifest에서 버전 코드를 동적으로 변경합니다.

    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            output.processManifest.doLast {
                // Stores the path to the maifest.
                String manifestPath = "$manifestOutputDirectory/AndroidManifest.xml"
                // Stores the contents of the manifest.
                def manifestContent = file(manifestPath).getText()
                // Changes the version code in the stored text.
                manifestContent = manifestContent.replace('android:versionCode="1"',
                        String.format('android:versionCode="%s"', generatedCode))
                // Overwrites the manifest with the new text.
                file(manifestPath).write(manifestContent)
            }
        }
    }
    

알려진 문제 해결

이 섹션에서는 최근 버전에서 해결된 알려진 문제를 설명합니다. 이러한 문제가 발생한 경우 안정적인 최신 버전 또는 미리보기 버전으로 Android 스튜디오를 업데이트해야 합니다.

Android 스튜디오 3.6에서 해결됨

  • LineageOS의 APK 설치 오류: LineageOS 또는 CyanogenMod의 특정 버전을 실행하는 기기에 앱을 배포할 수 없고 INSTALL_PARSE_FAILED_NOT_APK 예외가 발생할 수 있습니다.

    Android 스튜디오 3.6 베타 1 이상에서 IDE는 앱이 LineageOS 또는 CyanogenMod 기기에 앱을 배포할 때 전체 앱 설치를 실행하여 이 예외를 처리하며 이에 따라 배포 시간이 길어질 수 있습니다.

Android 스튜디오 3.5.2에서 해결됨

  • 손상된 XML 코드 스타일: XML 코드를 수정할 때 메뉴 바에서 Code > Reformat Code를 선택하면 IDE에서 잘못된 코드 스타일을 적용합니다.

Android 스튜디오 3.3.1에서 해결됨

  • C++ 기반 프로젝트 검색 시 메모리 부족 오류: Gradle이 동일한 드라이브에서 둘 이상의 위치에 C ++ 코드가 있는 프로젝트를 검색하면 첫 번째 공통 디렉터리 아래의 모든 디렉터리가 검색에 포함됩니다. 대량의 디렉터리와 파일을 검색하면 메모리 부족 오류가 발생할 수 있습니다.

    이 문제에 관한 자세한 내용은 문제와 관련된 버그를 참조하세요.