私はSugarORMライブラリを使ってアプリをビルドしていますが、API 17のプロジェクトをビルドしようとすると(他の人をチェックしませんでした)、ビルドエラーが発生します。
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.Android.com/tools/building/multidex.html
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: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/Java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
しかし、私がAndroid v5.0以上用にこのプロジェクトをビルドするとき、それはうまく機能します。 SugarORMのgradle依存関係を削除すれば、v4.2.2とv5.0の両方のデバイスでうまく動作します。
方法が多すぎます。 dexの場合は65536のメソッドしか存在できません。
お勧めのとおり、 マルチインデックスサポート を使用できます。
これらの行をbuild.gradle
に追加するだけです。
Android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
あなたのManifest
にも、multidex support libraryからMultiDexApplication
クラスを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">
<!--If you are using your own custom Application class then extend -->
<!--MultiDexApplication and change above line as-->
Android:name=".YourCustomApplicationClass">
...
</application>
</manifest>
attachBaseContextメソッドをオーバーライドします。
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
MultiDex.install(this);
}
独自のApplication
クラスを使用している場合は、親クラスをApplication
からMultiDexApplication
に変更します。
別の解決策は、ProGuardを使用して未使用のコードを削除することです。 - ProGuardを実行するように ProGuard 設定を構成し、リリースビルドで縮小を有効にします。
Android/app/build.gradleに
Android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.dkm.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
multiDexEnabled true
わたしにはできる
私のbuild.gradle
ファイルで私のプロジェクトの自動更新コンパイルバージョンをコーディングしている間、私はこのエラーメッセージを得ました:
Android {
...
buildToolsVersion "23.0.2"
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.4.0'
compile 'com.Android.support:design:23.4.0' }
バージョンを修正して解決してください。
Android {
...
buildToolsVersion "23.0.2"
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.0.1'
compile 'com.Android.support:design:23.0.1'
}
これは私のために働いたものです:
これは、未使用のメソッドが多すぎるために発生します。これらのメソッドのほとんどはあなたのbuild.gradleに含まれているライブラリから来ています。
リソースを縮小および縮小して、問題を解決すると同時にコードをクリーンアップします。
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
shrinkResources true
}
}
このエラーは、afewのみを使用している場合にすべてのGoogle PlayサービスAPIをロードしたときにも発生する可能性があります。
Googleによると、「6.5よりも前のバージョンのGoogle Playサービスでは、APIのパッケージ全体をアプリにコンパイルする必要がありました。 65,536の制限の下でフレームワークAPI、ライブラリメソッド、および独自のコード)。
バージョン6.5からは、代わりにGoogle PlayサービスAPIを選択してアプリケーションにコンパイルすることができます。」
たとえば、アプリケーションにplay-services-maps、play-services-locationが必要な場合は、build.gradleファイルに次のように2つのAPIをアプリケーションレベルで追加するだけで済みます。
compile 'com.google.Android.gms:play-services-maps:10.2.1'
compile 'com.google.Android.gms:play-services-location:10.2.1'
の代わりに:
compile 'com.google.Android.gms:play-services:10.2.1'
完全なドキュメンテーションとグーグルプレイサービスapisのリストのためにここをクリック ここをクリック
私は同じ問題に直面しています、そしてマルチインデックスサポートのために、あなたはあなたのアプリケーションのminSdkVersionを覚えておかなければなりません。 minSdkVersion 21以上を使用している場合は、multiDexEnabled trueのように書くだけです。
defaultConfig {
applicationId *******************
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
それは私のために動作し、あなたが21以下のminSdkVersion(下記lolipop)を使用しているなら、あなたは2つの追加の簡単なことをしなければならない
1。最初にこの依存関係を追加する
'com.Android.support:multidex:1.0.1'をコンパイルしてください。
あなたのbuild.gradleに。
2。最後と2番目のマニフェストのアプリケーションに次の行を追加します。
Android:name = "Android.support.multidex.MultiDexApplication"
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:name="Android.support.multidex.MultiDexApplication"
Android:theme="@style/AppTheme" >
<activity Android:name=".MainActivity" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
ビンゴそれからそれはまたより低い版で働く。. :)ハッピーコーディング
アプリの参照が65,536を超えると、アプリがAndroidビルドアーキテクチャの制限に達したことを示すビルドエラーが発生します。
Android 5.0より前のマルチデックスサポート
Android 5.0(APIレベル21)より前のバージョンのプラットフォームは、アプリコードの実行にDalvikランタイムを使用します。デフォルトでは、DalvikはアプリをAPKごとに単一のclasses.dexバイトコードファイルに制限します。この制限を回避するために、マルチデックスサポートライブラリをプロジェクトに追加することができます。
dependencies {
implementation 'com.Android.support:multidex:1.0.3'
}
Android 5.0以降でのマルチデックスサポート
Android 5.0(APIレベル21)以降では、ARTと呼ばれるランタイムを使用します。これは、APKファイルから複数のDEXファイルをロードすることをネイティブにサポートします。したがって、minSdkVersionが21以上の場合は、マルチライブラリサポートライブラリは必要ありません。
64K制限を回避する
アプリ内でマルチデックスを設定します
MinSdkVersionが21以上に設定されている場合は、モジュールレベルのbuild.gradleファイルでmultiDexEnabledをtrueに設定するだけです。
Android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 28
multiDexEnabled true
}
...
}
minSdkVersionが20以下に設定されている場合は、マルチデックスサポートライブラリを使用する必要があります。
Android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.3'
}
次のようにApplicationクラスをオーバーライドし、それをextendMultiDexApplicationに変更します(可能な場合)。
public class MyApplication extends MultiDexApplication { ... }
マニフェストファイルに追加する
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.myapp">
<application
Android:name="MyApplication" >
...
</application>
</manifest>
Android 5.0より前のマルチデックスサポート
Android 5.0(APIレベル21)より前のバージョンのプラットフォームでは、アプリコードの実行にDalvikランタイムが使用されます。デフォルトでは、DalvikはアプリをAPKごとに単一のclasses.dexバイトコードファイルに制限します。この制限を回避するには、 アプリをマルチデックス用に設定する を読んでください。
Android 5.0以上のマルチデックスサポート
Android 5.0(APIレベル21)以降では、ARTと呼ばれるランタイムを使用します。これは、APKファイルから複数のDEXファイルをロードすることをネイティブにサポートします。 ARTはclassesN.dexファイルをスキャンし、それらをAndroidデバイスで実行するための単一の.oatファイルにコンパイルするアプリのインストール時にプリコンパイルを実行します。したがって、minSdkVersionが21以上の場合、マルチインデックスサポートライブラリは必要ありません。あなたがする必要があるのはあなたのモジュールレベルのbuild.gradleでmultiDexEnabledをtrueに設定することだけです
詳細はこちら - https://developer.Android.com/studio/build/multidex
これも試すことができます:
Android{
.
.
// to avoid DexIndexOverflowException
dexOptions {
jumboMode true
}
}
誰かに役立つことを願っています。ありがとう
フラッターユーザーの場合、これはアプリレベルのbuild.gradleを使用して解決できます。
Android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.dkm.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
うまくいきました。
私の場合はGradleをアップグレードしています。 Android Webサイト で更新を確認してから、build.gradle(プロジェクト)に追加してください。
dependencies {
classpath 'com.Android.tools.build:gradle:2.2.0-alpha4'
....
}
それからプロジェクトをgradleファイルと同期させます、そして、それは時々Java.exeのために時々起こるかもしれません(私の場合)ちょうどウィンドウズのタスクマネージャからkill Java.exeを強制しそれからプログラムを再実行する
補足説明として、multidexのサポートを追加する前に、不要な依存関係を追加していないことを確認してください。
次の依存関係を追加する必要があることを明確に述べています。
implementation 'com.facebook.Android:facebook-Android-sdk:[4,5)'
これは実際にはentireFacebookSDKです。したがって、たとえばアナリティクスだけが必要な場合は、次のものに置き換える必要があります。
implementation 'com.facebook.Android:facebook-core:5.+'