一个.dex文件中方法引用的数量不能超过64k API 17。

235

我正在使用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的两个设备都可以正常工作。


2
请查看此链接:http://developer.android.com/tools/building/multidex.html。 - Raghunandan
尝试使用Proguard,此链接https://android-arsenal.com/details/1/337指定了在Proguard中使用SugarORM。 - Shaan_B
32
刚升级到API 23,就遇到了这个问题。使用Android开发简直难以提高工作效率,每个SDK都会导致问题出现。每次更新AS也会出问题,错误信息无法使用,AS功能不正常。糟糕透了! - RunLoop
1
@RunLoop 不要失去希望……我发现安卓是迄今为止开发最好的平台……更加灵活和强大……当你开始编码时,一切都会好起来的……每一个错误信息都很有用。但需要理解这些信息。 - Sandeep Rana
2
@Balaj Khan “其中一个或多个答案是值得额外奖励的典范和值得的。回答直截了当且准确。” 我建议选择排名第一的(并被接受的)答案! - Jon Goodwin
显示剩余2条评论
16个回答

4

4

顺便提一句,在添加支持multidex之前,确保您没有添加不必要的依赖项。

例如,在官方Facebook分析指南中:

他们明确表示您应该添加以下依赖项:

最初的回答

implementation 'com.facebook.android:facebook-android-sdk:[4,5)'

这实际上是整个FacebookSDK - 因此,如果您只需要例如分析功能,则需要将其替换为:

这实际上是 整个 FacebookSDK - 因此,如果您仅需要例如分析功能,则需要将其替换为:

implementation 'com.facebook.android:facebook-core:5.+'

Facebook部分SDK选项

最初的回答:无需翻译

完全同意。例如在我的情况下,我只需要“使用Facebook登录”按钮,而一直在使用整个Facebook SDK。我已经将其替换为facebook-corefacebook-login,错误已经消失了。 - cleybertandre

3
对我而言,升级Gradle是有效的。在Android网站上查找更新,然后将其添加到您的build.gradle(Project)中,就像这样。
 dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-alpha4'   
          ....
    }

然后与Gradle文件同步项目,有时可能是由于java.exe(在我的情况下)导致的,只需从Windows任务管理器中强制结束java.exe,然后重新运行程序即可。


3
也可以尝试这个:

android{
    .
    .
    // to avoid DexIndexOverflowException
    dexOptions {
       jumboMode true
    }
}

希望能对某人有所帮助。谢谢。

1

按照以下方式操作,它可以正常工作:

defaultConfig {
    applicationId "com.example.maps"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

2
请解释你的答案。在SO上,仅有代码的答案是不被鼓励的。谢谢。 - Gennadii Saprykin

-1

你可以在Android Studio中启用“即时运行”以获得多dex支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接