android - Android 应用程序的测试版本和 proguarded 版本 - NoSuchMethodError

标签 android proguard android-gradle-plugin android-testing android-espresso

我正在尝试在启用 Proguard 的情况下测试 Android 应用的发布版本。我已经为发布规则文件中包含的测试依赖项创建了额外的 Proguard 规则文件。

-keep class android.test.** { *; }
-dontwarn android.test.**

# Reuse the release ProGuard mapping
-applymapping proguard.map
-dontshrink
-dontoptimize

一切都编译正常,但在运行时失败。

java.lang.NoSuchMethodError: android.test.AndroidTestRunner.addTestListener
    at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.start(ProGuard:135)
    at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner$BridgeTestRunner.start(ProGuard:249)
    at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:389)
    at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(ProGuard:114)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4702)
    at android.app.ActivityThread.access$1600(ActivityThread.java:172)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5586)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
    at dalvik.system.NativeStart.main(Native Method)

我正在使用 Espresso 进行测试,仪器运行器在 build.gradle

中定义
defaultConfig {
    testApplicationId 'package.name.test'
    testInstrumentationRunner 'com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner'
}

是否有机会为 protected 发布版本运行测试?我找到了 topic从五月回来,看起来这是不可能的。对我来说,它看起来只是错误的 Proguard 配置(缺少方法),但是行 -keep class android.test.** { *; } 应该可以解决这个问题。我错过了什么吗?

最佳答案

我想帮助先生。

而不是那个

-keep class android.test.** { *; } 
-dontwarn android.test.**

加入这个

-keep class android.test.** { *; }
-keep class junit.** { *; }
-dontwarn android.test.**
-dontwarn junit.**

实际上这是一个很难的“猜密码”希望它能有所帮助

关于android - Android 应用程序的测试版本和 proguarded 版本 - NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533211/

相关文章:

Android ProGuard : Most Aggressive Optimizations

android - 使用 Intent 时在库模块中使用应用程序模块依赖

Android Studio 找不到 Volley

android - 无法在 Android 上调试 Adob​​e AIR 移动应用程序

java - 如何让应用程序主线程进入休眠状态,以显示进度对话框的变化?

java - Android 应用程序在 Play 商店发布后崩溃?

android - 带有 proguard 问题的发布版本 - GSON

android - 在Android Studio中构建项目时,Gradle提供NullPointerException

android - 缺少 NativeExpressAdView XML 属性 adSize

java - 解析 JSON 以从数组中获取 'name'