"No tests were found" Proguard测试后 APK



我在测试APK上启用Proguard后遇到了一个奇怪的问题。Proguard在测试和测试的应用程序上都是启用的。我使用Android Studio 1.2.11和Gradle 1.2.3

这是我的build.gradle:

buildTypes {
    // Development configuration.
    debug {
        debuggable true
        jniDebuggable true
        signingConfig signingConfigs.debug
        // Configure ProGuard
        minifyEnabled true
        // Default configuration
        proguardFile 'proguard/proguard.cfg'
        // Add all of our component-specific configurations (excluding the Android generic, as we want it to be last)
        FileTree tree =  fileTree(dir: 'proguard', include: '*.txt', exclude: 'Android.txt')
        tree.each {File file ->
            proguardFile file.getCanonicalPath()
        }
        // Android fallbacks
        proguardFile 'proguard/Android.txt'
        // Debug configuration
        proguardFile 'proguard/proguard-debug.cfg'
        // Test configuration
        testProguardFile 'proguard/proguard-test.cfg'
    }
}

这里是proguard.cfg:

# Defaults from ProGuard
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Turn off optimization (as it can cause plenty of headaches)
-dontoptimize
-dontpreverify

proguard-debug.cfg(非常简单):

# Turn off obfuscation
-dontobfuscate

最后proguard-test.cfg(也很简单):

# Turn off obfuscation
-dontobfuscate
# Unit tests
-dontwarn sun.reflect.**
-dontwarn org.junit.**
-dontwarn org.mockito.**
-dontwarn org.apache.tools.ant.**

其他Proguard配置是针对我们使用的各种插件的,真的不应该有什么区别。如果你感兴趣,我可以把它们贴出来。

测试和测试的应用程序apk的构建工作良好。但是当测试APK安装并运行时,我得到"没有找到测试"。我已经验证,如果我在非proguard buildType上运行测试,测试运行良好。

此外,我检查了Proguard输出中的seeds.txtdump.txt,并验证了测试代码确实存在于测试APK中。
此外,没有usage.txt(列出从APK中剥离的代码的文件),这意味着我的测试代码没有被Proguard删除。也没有mapping.txt文件,因为我在proguard-test.cfg中设置了-dontobfuscate

有人能看出我在这里做错了什么吗?

提前感谢!

编辑:所以,我从logcat注意到错误是由于某些ClassNotFoundExceptions。例如:

java.lang.ClassNotFoundException: Didn't find class "com.newrelic.agent.android.instrumentation.okhttp2.ResponseBuilderExtension" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/wp.wpbeta.test-2/base.apk", zip file "/data/app/wp.wpbeta-2/base.apk"],nativeLibraryDirectories=[/data/app/wp.wpbeta-2/lib/arm, /vendor/lib, /system/lib]]

这是非常奇怪的,因为这些类应该由我们的Proguard配置保存。事实上,如果我检查dump.txt,我看到它是存在的:

+ Program class: com/newrelic/agent/android/instrumentation/okhttp2/ResponseBuilderExtension
  Superclass:    com/squareup/okhttp/Response$Builder
  Major version: 0x32
  Minor version: 0x0
    = target 1.6
  Access flags:  0x21
    = public class com.newrelic.agent.android.instrumentation.okhttp2.ResponseBuilderExtension extends com.squareup.okhttp.Response$Builder

Proguard和NewRelic在没有特殊的NR例外情况下并不总是玩得很好。确保这些都在你的相关proguard配置中。

-keep class com.newrelic.** { *; }
-dontwarn com.newrelic.**
-keepattributes Exceptions, Signature, InnerClasses

相关内容

  • 没有找到相关文章

最新更新