Я близок к пределу dex из-за использования Kotlin, Google libs и т. Д. (Базовые проблемы Android). Поэтому я включил Proguard, и теперь я не могу заставить его работать для контрольно-измерительных приборов.
Вот трассировка стека:
E/TestExecutor: Fatal exception when running tests
java.lang.RuntimeException: failure in processEncodedAnnotation
at java.lang.Class.getDeclaredAnnotations(Native Method)
at java.lang.Class.getAnnotations(Class.java:297)
at org.junit.runner.Description.createSuiteDescription(Description.java:124)
at org.junit.internal.runners.ErrorReportingRunner.getDescription(ErrorReportingRunner.java:28)
at org.junit.runners.Suite.describeChild(Suite.java:123)
at org.junit.runners.Suite.describeChild(Suite.java:27)
at org.junit.runners.ParentRunner.shouldRun(ParentRunner.java:434)
at org.junit.runners.ParentRunner.filter(ParentRunner.java:382)
at org.junit.runner.manipulation.Filter.apply(Filter.java:97)
at android.support.test.internal.runner.TestRequestBuilder$LenientFilterRequest.getRunner(TestRequestBuilder.java:387)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:384)
at com.isupatches.test.CustomTestRunner.onStart(CustomTestRunner.kt:14)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Я понимаю, что это проблема обработки аннотаций при создании описания пакета и запуске пользовательского тестового прогона, но я понятия не имею, почему и трассировка стека не слишком полезна.
Я использую JUnit5 для модульных тестов, но не для инструментальных тестов. Я также использую Dagger2 и Kotlin.
Я убрал и восстановил, и теперь я спрашиваю, упускаю ли я что-то очевидное.
defaultConfig {
applicationId "com.isupatches.test"
minSdkVersion rootProject.ext.min_sdk_version
targetSdkVersion rootProject.ext.max_sdk_version
versionCode rootProject.ext.version_code
versionName rootProject.ext.version_name
testInstrumentationRunner "com.isupatches.test.CustomTestRunner"
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath false // Necessary to make kapt work
}
}
}
Вот мой пользовательский тестовый прогон, где super.onStart () - это строка в трассировке стека:
class CustomTestRunner : AndroidJUnitRunner() {
override fun onStart() {
SystemAnimations.disableAll(InstrumentationRegistry.getTargetContext())
super.onStart()
}
override fun finish(resultCode: Int, results: Bundle) {
SystemAnimations.restoreAll(InstrumentationRegistry.getTargetContext())
super.finish(resultCode, results)
}
}
И мои настройки Proguard:
buildTypes {
debug {
testCoverageEnabled true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
testProguardFile file("proguard-test-rules.pro")
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Правила Proguard:
-dontoptimize
-dontpreverify
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-keepattributes *Annotation*, LineNumberTable, SourceFile
-keep class com.isupatches.test.** { *; }
-dontwarn com.isupatches.test.**
-keep class kotlin.Metadata
-keep class kotlin.reflect.** { *; }
-dontwarn kotlin.reflect.**
-keep class kotlin.jvm.internal.** { *; }
-dontwarn kotlin.jvm.internal.**
-keep class com.google.errorprone.annotations.** { *; }
-dontwarn com.google.errorprone.annotations.*
-keep class com.google.devtools.build.android.desugar.runtime.ThrowableExtension {
public <methods>;
}
-dontwarn com.google.devtools.build.android.desugar.runtime.ThrowableExtension
-keep class com.metova.cappuccino.animations.SystemAnimations {
public <methods>;
}
Правила проверки теста:
-include proguard-rules.pro
-dontobfuscate
-dontnote **
-keep class org.xmlpull.v1.** { *; }
-dontwarn org.xmlpull.v1.*
-keep class sun.misc.** { *; }
-dontwarn sun.misc.*
-keep class org.mockito.internal.creation.bytebuddy.** { *; }
-dontwarn org.mockito.internal.creation.bytebuddy.*
-keep class java.lang.instrument.** { *;}
-dontwarn java.lang.instrument.*
-keep class net.bytebuddy.jar.asm.tree.** { *; }
-dontwarn net.bytebuddy.jar.asm.tree.*
-keep class libcore.io.** { *; }
-dontwarn libcore.io.*
-keep class org.ccil.cowan.tagsoup.Parser
-dontwarn org.ccil.cowan.tagsoup.Parser
-keep class com.google.android.apps.common.testing.testrunner.web.** { *; }
-dontwarn com.google.android.apps.common.testing.testrunner.web.*
-keep class edu.umd.cs.findbugs.annotations.** { *; }
-dontwarn edu.umd.cs.findbugs.annotations.*
-keep class org.newsclub.net.unix.** { *; }
-dontwarn org.newsclub.net.unix.*
-keep class java.lanag.management.** { *; }
-dontwarn java.lang.management.*
-keep class net.bytebuddy.jar.asm.commons.** { *; }
-dontwarn net.bytebuddy.jar.asm.commons.*
-keep class com.metova.cappuccino.** { *; }
-dontwarn com.metova.cappuccino.*
-keep class org.junit.** { *; }
-keep class org.junit.runners.** { *; }
-dontwarn org.junit.**
-keep class android.support.test.runner.** { *; }
-keep class android.support.test.internal.runner.** { *; }