android - 测试时的 64k 限制 - Android

标签 android gradle dex

我正在尝试在我的 android 应用程序中的特定模块上运行一些测试,但由于某种原因,我不断收到这些构建错误消息:

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 ':javadgd:transformClassesWithDexForDebugAndroidTest'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.android.dx.command.Main with arguments {--dex --num-threads=4 --output C:\Projects\DGDEditor\javadgd\build\intermediates\transforms\dex\androidTest\debug\folders\1000\1f\main C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_03333ab422775c158385448eafde7255a8524b93.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\javax.inject-1_721956a06ac86a777d8de583b4c13faebe0d5c5c.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_94d5d0d0b278f09742c1e1dd1e53e80c88aeaba2.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_2fd8a6413454d324a2bc2c41cedf751944c4a85a.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\jsr305-2.0.1_d0dc22afb31a509a829f5e56cd36e012ebe188e5.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_feb1c246f0d10c407b60ae0ecd1d6ea8d8beca61.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\debug_f41558349a77243324d91f8782be0d487cd7d6ed.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\pkix-1.51.0.0_b76041394e3ad7737254c45a49f806aadb0e59da.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\hamcrest-core-1.3_92e7cef8754982c623a8492d3b3952651a36c08f.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\parceler-1.1.8_c0288db4cd1aae135e8b25494edc84eb400f3614.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_6375c37ed5b22eb7cf9cd3a95bff1c6408d121ab.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_bfa059c3d3a726ece320b7ef44fc899d58e51e52.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_c7168d8cf335e64692d4939d085bc7489d9e37ee.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_f1704eb11b8725da59212cbcea409be026a3ffcd.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_67453a78ef3c9cab581c393c472c3c3d612dcc16.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\javax.annotation-api-1.2_99de26727b595d3c7e23682b1e351f77584621a6.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_19aa33b9e42e4289994b07b2a0039e60888115cc.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_b8055fc216a8eb86450b50466066c1960737277b.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\parceler-api-1.1.8_63d56b028e1b1695ca7293e1f2a92c9d9a0991f3.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\junit-4.12_70f50e338c3877b7b2e790ad100069bbc42c9c8f.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_76cd03c23e8d9d3dc8f3c881ebccac6befa92db3.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_f4edc33f0197e9449d5db5d862506bf37fe1c439.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_25f2307ba0685e5e9569cd17ea92c99bb4649923.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\hamcrest-library-1.3_cc5997a988d1cb5dc61f56c2702d0209d499e271.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\prov-1.51.0.0_3793358556a1c80f36dba381de93ced0fc398087.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_c06d6884053b63859253ba8751a5baef40098a74.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\support-annotations-25.1.0_8b16b00a90b3b73a336a7720f92a8e291227f223.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\core-1.51.0.0_f14b10294d4c741e145544e7806a68f73f58fe16.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\hamcrest-integration-1.3_77e530f0dc04d8547a01b2579bac749e0613dfdd.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\classes_4dc0d5d6487e5aaa62d200676a7d8d359cfdc7f6.jar C:\Projects\DGDEditor\javadgd\build\intermediates\pre-dexed\androidTest\debug\javawriter-2.1.1_cf45787cd93f38660e910b988d882dd18609ad89.jar}

我读到了 android 中的 64k 限制,但我认为这对我来说没有意义。我的应用程序中没有 64k 方法引用,也没有依赖于具有 64k 方法引用的库(我认为)。

这是我的模块级 build.gradle:
    apply plugin: 'com.android.library'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"

        defaultConfig {
            minSdkVersion 19
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.1.0'
        compile 'com.tom_roush:pdfbox-android:1.8.9.1'
        compile 'org.parceler:parceler:1.1.8'
        testCompile 'junit:junit:4.12'
        testCompile 'org.mockito:mockito-core:2.8.9'
    }

项目级 build.gradle 文件:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {

    repositories {
        maven { url "http://dl.bintray.com/shivasurya/materialsteppers" }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        maven { url "https://jitpack.io" }
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

我正在尝试在 androidTest 中运行仪器测试目录,由于需要 Context的目标应用程序。

有人知道为什么我会收到此错误吗?

最佳答案

是因为runt测试需要用到其他依赖,比如JUnit , Mockito等。这些仅在您运行测试时使用,并且方法计数与您的项目方法计数一起添加。

在你的毕业典礼上添加这个

default config {
  ....
  multiDexEnabled true
}

如果 minSdkVersion < 20 你需要支持
dependencies {
   ....
   compile 'com.android.support:multidex:1.0.1'
}

创建应用程序类
public class MyApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
        ....
    }
}

在您的 list 中,您需要声明它
<application
    android:name=".MyApplication" >
    ...
</application>

关于android - 测试时的 64k 限制 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485277/

相关文章:

java - HttpURLConnection 第一次尝试时不返回任何内容。后续调用返回值就好了

spring - 如何在 intellij idea 中更快地调试 Spring Boot gradle 项目?

android - 在不同的模块中扩展一个类,在 Android Studio 中构建但无法解析符号

android - Android Studio 3.1 中的 android.enableD8.desugaring 与 android.enableD8 的区别

android - android中Edittext的振动

php session 在 Android 应用程序中被破坏

android - 是否可以同时存在同一个库的两个不同版本?

android - Android Studio 3.0 Beta4 上的 Dex 错误

android - 安装应用程序时出错 (INSTALL_FAILED_DEXOPT)

java - Webview AppCache 不加载源非 html 内容