すでに述べたように、プロジェクトとライブラリーに非常に多くのメソッド(65k以上)があります。
問題の回避:Play Services 6.5以降とsupport-v4 24以降でメソッドの数を減らします
多くの場合、Google Play開発者サービスは、20k +メソッドを使用した「無駄」なメソッドの主な疑いの1つです。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+)以降、取り扱いが非常に簡単です。アプローチは、dexファイルごとの65kメソッドを回避して、アプリ用に複数のdexファイルを作成することです。以下を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'
}
2番目のステップは、アプリケーションクラスを準備するか、アプリケーションを拡張しない場合は、 MultiDexApplication
Androidマニフェストでを。
これを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
Androidでのメソッドカウントの詳細については、この回答と質問を参照してください