当前位置: 首页 > 知识库问答 >
问题:

Android应用程序的测试版本和升级版本-NoSuchMethodError

刘高驰
2023-03-14

我正在试着在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'
}

是否有机会为预发布版本运行测试?我从五月份就找到了这个话题,看起来这是不可能的。对我来说,这看起来只是错误的Proguard配置(缺少方法),但这行代码保留了android类。测试。**{*;} 应修复此问题。我错过什么了吗?

共有1个答案

薛焱
2023-03-14

先生,我想帮忙。

而不是那样

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

将此添加到其中

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

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

 类似资料:
  • 0.2.X

  • 从 0.8.x, 0.9.x, 0.10.0.x, 0.10.1.x, 0.10.2.x, 0.11.0.x 升级到1.0.0 Kafka 1.0.0 介绍了通信协议方面的改变。 遵循下面的滚动升级计划,可以保证您在升级过程中不用停机。 在升级之前,请先查看1.0.0版本中显著的变化。 滚动升级计划: 更新所有代理上的server.properties 并添加以下属性: CURRENT_KAFKA

  • 无非就3个原因吧 为了fix bug 为了新特性 为了爱,就是要追新 从1.a.38开始的版本,升级到最新版的成本都不大. 做到100%兼容是不现实的,但可以肯定的是, 遇到的问题的均有解决的办法. 有些兼容性问题,属于"错误"得到修正,老版本能这样写是"bug", ^_^ 这是一个汇总帖子,随时更新, 也会按版本的增长继续增长.... 请先浏览当前版本到最新版的发行注记,然后再看本列表 IE下a

  • MinDoc 根据发布系统功能不同可分为两步进行升级。有些用户可能会自定义了模板,覆盖时请注意备份。尤其是要注意备份配置文件和数据库。 版本查看 通过命令行执行如下命令: ./mindoc version 会看到如下的版本信息: #当前安装的版本版本号 MinDoc current version => v1.0 #最新版本版本号 MinDoc last version => v1.0 一、覆

  • 我正在为我们的应用程序创建升级路径,在此过程中出现了几个问题。我想,我的配置经常在这种情况下使用,所以也许有人以前经历过。 简短的应用程序描述: JSF Web应用程序 ICE作为JSF框架(实际版本1.8.3最新是3.1) 接缝作为EJB/View之间的连接(实际是2.1.1,最新是2.2.2或3) 在JBoss 4.2.2中部署。GA(最新是7.1) 通过Hibernate/Seam Enti

  • 问题内容: 在C ++中,我通常会设置2个构建- 分别调试和发布,分别具有和预先定义。然后,我将使用这些定义来确定常量值,例如启用/禁用日志记录,服务器URL等。 现在,在Java / Android中,在构建发行版之前我会注释掉一些东西。我知道这不是一个好方法。我可能会忘记一些东西。 确保在构建发行版本(签名)或调试版本(未签名)时什么都不会忘记的常见做法是什么? 问题答案: (默认情况下)没有