安装了proguard的Android单元测试

时间:2014-10-21 08:26:49

标签: android unit-testing proguard

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

4 个答案:

答案 0 :(得分:36)

这就是我所做的。

添加自定义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.**

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

<强> /project/app/build.gradle

android {
    debug {
        minifyEnabled true
        testProguardFile 'proguard-test-rules.pro'
    }
}

答案 1 :(得分:5)

上述答案都没有对我有用。我有两个问题:我还需要使用默认的proguard文件进行测试,而我的默认proguard文件是错误的。

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

    android {
        debug {
            minifyEnabled true
            testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project-test.pro'
        }
    }
    
  2. 当您通过Android studio更新SDK工具时,默认的proguard文件(以及所有tools/proguard文件夹)显然是not replaced by default。我的机器使用的是过时的配置文件,这导致了奇怪的程序问题。要更新proguard的默认配置,请将〜/ Library / Android / Sdk / tools / proguard / proguard-android.txt替换为this

答案 2 :(得分:3)

Instrumentation测试(和其他?)不使用与调试/发布apk相同的proguard文件。您可以尝试在调试和释放块中设置testProguardFile选项。这个特定于测试的proguard文件可以非常宽松,因为它没有用于调试/发布apk。

答案 3 :(得分:1)

我已经通过增加一个&#34; dev&#34;来解决我的构建中的这个问题。 buildType我在其中启用了proguard,但是将其配置为将所有代码保存在我自己的包中,以及一些恰好仅在测试中使用的特定库类。我还在dev buildType中禁用了混淆,以便可以从IDE调试它。

对于调试和发布版本,我使用我的&#34; real&#34; proguard设置包括模糊处理和优化。