プロジェクトに現在Androidアプリケーションに取り組んでいます。プロジェクトに再生サービスとFirebaseライブラリを含めた後、このエラーが発生し、コードを実行できません。
:app:prePackageMarkerForDebug:app:transformClassesWithDexForDebug dex in processを実行するには、Gradleデーモンに大きなヒープが必要です。現在、約910 MBあります。ビルドを高速化するには、Gradleデーモンの最大ヒープサイズを2048 MB以上に増やします。これを行うには、プロジェクトgradle.propertiesでorg.gradle.jvmargs = -Xmx2048Mを設定します。詳細については、 https://docs.gradle.org/current/userguide/build_environment.html エラーを参照してください。dexファイル内のメソッド参照の数は64Kを超えることはできません。 https://developer.Android.com/tools/building/multidex.html :app:transformClassesWithDexForDebug FAILED Error:Execution failed for task ':app:transformClassesWithDexForDebug'でこの問題を解決する方法をご覧ください。 com.Android.build.api.transform.TransformException:com.Android.ide.common.process.ProcessException:Java.util.concurrent.ExecutionException:com.Android.ide.common.process.ProcessException:org.gradle.process。 internal.ExecException:プロセス 'command' /ライブラリ/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/Java ''がゼロ以外の終了値2で終了しました
私のbuild.gradleファイルはここにあります:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "xyz.in.network"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
multiDexEnabled true
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile project(':libs:ViewPagerIndicator')
compile 'com.google.Android.gms:play-services:9.0.0'
compile 'com.Android.support:appcompat-v7:23.4.0'
compile 'com.Android.support:design:23.4.0'
compile 'com.google.Android.gms:play-services-maps:9.0.0'
compile 'com.google.Android.gms:play-services-location:9.0.0'
compile 'com.Android.support:cardview-v7:23.4.0'
compile 'com.getbase:floatingactionbutton:1.10.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.Android.volley:volley:1.0.0'
compile 'com.google.firebase:firebase-messaging:9.0.0'
compile 'com.Android.support:multidex:1.0.1'
}
apply plugin: 'com.google.gms.google-services'
そして私のマニフェストファイルはここにあります
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:name="Android.support.multidex.MultiDexApplication"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity Android:name=".Util.DisconnectedNetwork"
Android:screenOrientation="portrait"
Android:theme="@style/Theme.Transparent"></activity>
<service Android:name=".FCM.FirebaseMessagingHandler">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service Android:name=".FCM.FirebaseRegistrationTokenHandler">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
</application>
ヒープサイズを2048Mに増やした後。 Gradleはこのエラーを出します
エラー:タスク ':app:transformClassesWithDexForDebug'の実行に失敗しました。 com.Android.build.api.transform.TransformException:com.Android.ide.common.process.ProcessException:Java.util.concurrent.ExecutionException:com.Android.dex.DexIndexOverflowException:method ID not in [0、0xffff]: 65536
私はAndroidデベロッパーサイトに記載されているすべての指示に従いますが、それでもこの問題が発生します。この問題を解決するにはどうすればよいですか?
Android default configでmultidex
を有効にする必要があります:
Android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
applicationId "com.example.case"
minSdkVersion 16
targetSdkVersion 23
versionCode 43
versionName "4.0.13"
// Enabling multidex support.
multiDexEnabled true
}
日常業務でアプリケーションを構築する場合、通常はdebug
デフォルトフレーバーを使用します。したがって、アプリケーションに65kを超えるメソッドがある場合は、すべてのフレーバーで有効にする必要があります。
補足として、デバッグビルドでProguardを使用すると、multiDexを有効にする必要がなくなります。
Android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
最後の部分:MultiDexアプリケーションをマニフェストに追加します(または独自のApplication
の親として)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.Android.multidex.myapplication">
<application
...
Android:name="Android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
アプリで同様のエラーが発生したため、Android Studioと呼ばれるメソッドカウント( http://www.methodscount.com/ )にプラグインをインストールしました。各依存関係が使用するメソッド参照の数を示し、コンパイルパスを示しました
compile 'com.google.Android.gms:play-services:9.0.1'
それ自身で69k以上の参照がありました
代わりに、依存関係の1つを表示するように変更しました。
compile 'com.google.Android.gms:play-services:9.0.0'
また、このコンパイルパスの依存関係として69,520メソッド参照を示しています。
コンパイルパスの範囲を使用していない可能性が高く、使用するメソッド参照のチャンクを削除して最大65kを下回るようにするために、より集中したパスを指定できる場合があります。個別化されたサービスのリストは here です。
私の場合、Firebaseをアプリに組み込んだ約1年前にそのgmsサービス行を追加したと想像できますが、Firebase Webサイトで同じ参照を見つけることができません。
質問へのコメントを理解するだけで、依存関係を必要なものだけに分割することについて同様のことが言えます。
あなたはリリースフレーバーに対して有効なmutlidexを持っています、あなたはデバッグフレーバーのためにもこの行を持っているべきです
debug {
multiDexEnabled true
}
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
multiDexEnabled true
}