Too many classes in --main-dex-list, main dex capacity exceeded.

项目依赖新的SDK遇到的gradle版本问题

项目配置

我的项目中 使用的开发工具:Android Studio V2.3.3,项目中集成过AR功能 ,所以需要配置JNI环境,正是因为这个而导致出现问题。

错误如下

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:548)
at com.android.dx.command.dexer.Main.runMultiDex(Main.java:368)
at com.android.dx.command.dexer.Main.runDx(Main.java:289)
at com.android.dx.command.dexer.Main.main(Main.java:247)
at com.android.dx.command.Main.main(Main.java:94)

FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ‘:app:transformClassesWithDexForArmDebug’.

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘D:\jdk18\bin\java.exe’’ finished with non-zero exit value 2

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

解决思路

  1. 检查项目是否 进行了分包处理
  2. 重复包处理
  3. 是否也使用了JNI环境 classpath ‘com.android.tools.build:gradle-experimental:0.X.0’

如果 以上 1、2 都不是 那么你就得查查是否和我一样配置了JNI ,如果 是 往下看。

检查 工程下 build.gradle

buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle-experimental:0.4.0’
// classpath ‘com.android.tools.build:gradle:2.3.0’
classpath ‘com.novoda:bintray-release:0.3.4’
classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3’
}
}
看到这里 你会发现 这是 JNI配置 , 没错 网上一大堆的JNI配置 但是都是像上面一样 0.4.0版本或者0.2.0版本的配置方法
继续看0.4.0版本 application build.gradle 配置
apply plugin: ‘com.android.model.application’

model {
android {
compileSdkVersion = 23
buildToolsVersion = “23.0.2”

    defaultConfig.with {
        applicationId = "com.zyp.ndktest"
        minSdkVersion.apiLevel  = 19  // Unable to load class com.android.build.gradle.managed.ProductFlavor_Impl
        targetSdkVersion.apiLevel = 23
        versionCode = 1
        versionName = "1.0"
    }

}
android.buildTypes {
    release {
        minifyEnabled = false
        proguardFiles += file('proguard-rules.pro')
    }
}


compileOptions.with {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}
android.ndk {
    moduleName = "NdkSample"
    cppFlags += "-std=c++11"
    cppFlags += "-fexceptions"
    cppFlags += "-I${file("src/main/jni//include")}".toString()
    ldLibs += ["android", "log"]
    stl = "gnustl_shared"
}

android.productFlavors {
    create("arm7") {
        ndk.abiFilters.add("armeabi-v7a")
    }
    create("arm8") {
        ndk.abiFilters.add("arm64-v8a")
    }

}

}

dependencies {
compile fileTree(dir: ‘libs’, include: [’*.jar’])
compile ‘com.android.support:appcompat-v7:23.1.0’
}

以上的配置 JNI application gradle 的配置 熟悉对吧 (这里推荐一篇文章 https://www.cnblogs.com/zhuyp1015/p/4976116.html JNI 0.4.0 配置 很详细 感谢博主)

提升 build:gradle-experimental 版本

当你项目中 使用的build:gradle-experimental:0.4.0版本时,想要提升到0.6.0/0.7.0/0.8.0/0.9.0 或其他有可能会遇到问题。

错误信息如下:

Error:Gradle DSL method not found: ‘library()’

这个是什么导致的呢?
你得看看你的项目中有没有这段配置
android.sources {
main {
jni {
dependencies {
library file(“src/main/jniLibs/armeabi-v7a/aaaa.so”) abi “armeabi-v7a”
}
}
}
}

如果有以上这种配置 往下看教你解决方法。

解决方法

原因:build:gradle-experimental:0.4.0 提升到0.6.0/0.7.0/0.8.0/0.9.0 版本 有一个配置需要调整。(你到网上一搜发现 大多都是0.4.0或者0.2.0的配置方法 ,dependencies library 这段配置 不好找)
处理方式(1个SO):
android.sources {
main {
jni {
dependencies {
library ‘aaaa’ linkage ‘shared’
}
}
}
}
repositories {
libs(PrebuiltLibraries) {
aaaa{
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file(“src/main/jniLibs/armeabi-v7a/aaaa.so”)
}
}
}
}
注意: aaaa.so aaaa 这是对应的
处理方式(多个SO):
repositories {
libs(PrebuiltLibraries) {
aaaa{
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file(“src/main/jniLibs/armeabi-v7a/aaaa.so”)
}
}
bbbb{
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file(“src/main/jniLibs/armeabi-v7a/bbbb.so”)
}
}
}
}
android.sources {
main {
jni {
dependencies {
library ‘aaaa’ linkage ‘shared’
library ‘bbbb’ linkage ‘shared’
}
}
}
}
注意: 多个SO 这个不同 (library ‘bbbb’) 这个地方是相同的( linkage ‘shared’ )

结束

至此 问题解决,有任何不对的地方欢迎大家一起探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值