无法使用minifyEnabled

问题描述

当前,我的UI测试在将minifyEnabled设置为false的情况下可以很好地运行以进行调试。但是我希望能够使用minifyEnabled运行我们的UI测试,但出现错误

java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/LazyKt;
at com.myapp.android.helpers.BaseUITest.<init>(BaseUITest.kt:89)
at com.myapp.android.helpers.BaseLoggedInUITest.<init>(BaseUITest.kt:58)
at com.myapp.android.BookingTest.<init>(BookingTest.kt:25)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runchildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runchild(Suite.java:128)
at org.junit.runners.Suite.runchild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runchildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:392)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)
Caused by: java.lang.classNotFoundException: Didn't find class "kotlin.LazyKt" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar",zip file "/system/framework/android.test.mock.jar",zip file "/data/app/com.myapp.android.test-9ynAvfUfqJ1OtJ0zKiGLQw==/base.apk",zip file "/data/app/com.myapp.android-jo1Vp8gfqma6NGH5xtf4nw==/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.android.test-9ynAvfUfqJ1OtJ0zKiGLQw==/lib/x86,/data/app/com.myapp.android-jo1Vp8gfqma6NGH5xtf4nw==/lib/x86,/data/app/com.myapp.android.test-9ynAvfUfqJ1OtJ0zKiGLQw==/base.apk!/lib/x86,/data/app/com.myapp.android-jo1Vp8gfqma6NGH5xtf4nw==/base.apk!/lib/x86,/system/lib,/system/product/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)

令人讨厌的行只是使用Koin进行依赖项注入的BaseUiTest类的第一行:

private val localPrefs: LocalPrefs by inject()

build.gradle文件如下所示:

buildTypes {
  debug {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
    testProguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-test.pro'
  }
}

对于proguard-test.pro文件,我已经尝试了所有可以想到的方法包括

-include proguard-rules.pro
-dontobfuscate
-dontwarn
-keepattributes SourceFile,LineNumberTable

我不明白为什么它无法解析Kotlin类LazyKt

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)