이미 언급했듯이 프로젝트와 라이브러리에 너무 많은 메소드 (65k 이상)가 있습니다.
문제 방지 : Play Services 6.5 이상 및 support-v4 24.2 이상으로 방법 수 감소
Google Play 서비스는 종종 20 만 개 이상의 메소드를 사용하여 "낭비하는"메소드의 주요 용의자 중 하나입니다 . Google Play 서비스 버전 6.5 이상 에서는 여러 개의 작은 클라이언트 라이브러리를 사용하여 애플리케이션에 Google Play 서비스 를 포함시킬 수 있습니다. 예를 들어 GCM과지도 만 필요한 경우 다음 종속성 만 사용하도록 선택할 수 있습니다.
dependencies {
compile 'com.google.android.gms:play-services-base:6.5.+'
compile 'com.google.android.gms:play-services-maps:6.5.+'
}
하위 라이브러리의 전체 목록과 책임은 공식 google doc에서 찾을 수 있습니다 .
업데이트 : Support Library v4 v24.2.0부터 다음 모듈로 분할되었습니다.
support-compat
, support-core-utils
, support-core-ui
, support-media-compat
및support-fragment
dependencies {
compile 'com.android.support:support-fragment:24.2.+'
}
그러나를 사용 support-fragment
하면 다른 모든 모듈에 종속됩니다 (즉, 사용 android.support.v4.app.Fragment
하지 않는 경우 )
support-v4 lib의 공식 릴리스 노트를 참조하십시오.
멀티 덱싱 활성화
Lollipop (일명 빌드 도구 21+)이므로 다루기가 매우 쉽습니다. 이 방법은 덱스 파일 당 65k 메서드 문제를 해결하여 앱에 여러 덱스 파일을 만드는 것입니다. gradle 빌드 파일에 다음을 추가하십시오 ( 이는 65k 이상의 메소드가있는 응용 프로그램의 공식 Google 문서에서 가져옵니다 ).
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
두 번째 단계는 애플리케이션 클래스를 준비하거나 애플리케이션을 확장하지 않는 경우 MultiDexApplication
Android Manifest에서를 사용하는 것 입니다.
이것을 Application.java에 추가하십시오.
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
또는 mutlidex lib에서 제공된 응용 프로그램을 사용하십시오.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
MultiDex로 OutOfMemory 방지
추가 팁으로, OutOfMemory
빌드 단계에서 예외가 발생하면 다음을 사용하여 힙을 확대 할 수 있습니다.
android {
...
dexOptions {
javaMaxHeapSize "4g"
}
}
힙을 4 기가 바이트로 설정합니다.
dex 힙 메모리 문제에 대한 자세한 내용은이 질문을 참조하십시오.
문제의 원인 분석
메소드의 소스를 분석하기 위해 gradle 플러그인 https://github.com/KeepSafe/dexcount-gradle-plugin 은 gradle이 제공하는 종속성 트리와 함께 도움이 될 수 있습니다.
.\gradlew app:dependencies
안드로이드의 메소드 수에 대한 자세한 내용은이 답변과 질문을 참조하십시오