安装了proguard的Android单元测试

Den*_*989 24 android unit-testing proguard

我有一个问题,Proguard剥离我的调试APK的方法(我需要在调试时运行proguard因为方法dex文件限制),即使它们在Test apk中使用.例如,我在单元测试中使用GSON addProeprty方法,但不在App apk中使用.这种方法被剥离并导致测试失败.但我不想将proguard配置为仅保留所有GSOn,因为dex文件限制,但也不希望单独列出所有方法.有没有办法告诉rpguard将单元测试视为源代码入口点?

the*_*osh 39

这就是我做的.

添加自定义proguard规则文件.

/project/app/proguard-test-rules.pro

# Proguard rules that are applied to your test apk/code.
-ignorewarnings

-keepattributes *Annotation*

-dontnote junit.framework.**
-dontnote junit.runner.**

-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**
-dontwarn org.hamcrest.**
-dontwarn com.squareup.javawriter.JavaWriter
# Uncomment this if you use Mockito
#-dontwarn org.mockito.**
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到您的app的build.gradle中.在测试时使用proguard文件.

/project/app/build.gradle

android {
    debug {
        minifyEnabled true
        testProguardFile 'proguard-test-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 先生,太棒了! (4认同)
  • 我第一次尝试这个解决方案时错过了testProguardFile中的"测试",谢谢! (2认同)

GLe*_*Lee 5

上述答案都没有为我做到这一点.我有两个问题:我还需要使用默认的proguard文件进行测试,我的默认proguard文件是错误的.

  1. 要使用默认的proguard文件,除了您自己的:

    android {
        debug {
            minifyEnabled true
            testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project-test.pro'
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当您通过Android studio更新SDK工具时,默认的proguard文件(以及所有tools/proguard文件夹)显然不会被默认替换.我的机器使用的是过时的配置文件,这导致了奇怪的程序问题.要更新的ProGuard的默认配置,以取代〜/库/安卓/ SDK /工具/ proguard的/ proguard的-android.txt .


Kar*_*ten 1

我在构建中解决了这个问题,方法是添加一个额外的“dev” buildType,在其中启用 proguard,但将其配置为将所有代码保留在我自己的包中,以及一些仅在测试中使用的特定库类。我还在开发中禁用了混淆buildType,以便可以从 IDE 进行调试。

对于调试和发布版本,我使用“真正的”混淆器设置,包括混淆和优化。