Проблема Proguard с контрольно-измерительными приборами - PullRequest
0 голосов
/ 17 сентября 2018

Я близок к пределу 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.** { *; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...