android 비활성화 proguard gradle 디버그 빌드는 있지만 테스트는 수행하지 않습니다.




안드로이드 빌드 과정 (3)

Proguard를 사용하여 디버그 빌드를 활성화했습니다.

android {
    buildTypes {
        debug {
            runProguard true
            proguardFile 'proguard-debug.txt'
        }
        release {
            runProguard true
            proguardFile 'proguard-project.txt'
            zipAlign true
        }
    }
}

내가 이것을 할 때 겪고있는 문제는 gralle 빌드가 proguardDebugTest 작업 도중 테스트에 proguard하기를 원한다는 것입니다. 이 특정 작업에 액세스하기 위해 수정할 수없는 것 같습니다. 디버그 apk를 테스트 할 수 있지만 테스트 apk를 테스트 할 수있는 방법이 있습니까?


Answer #1

ProGuard를 다시 사용할 수 없게하는 테스트 응용 프로그램에 특정한 debug 에서 "파생 된"새 빌드 유형 소개

android {
    buildTypes {
        debugTest.initWith(debug)
        debugTest {
            minifyEnabled false
        }
    }
}

testBuildType 속성에 이름을 지정하여 테스트 응용 프로그램의 해당 빌드 유형을 사용합니다

android {
    testBuildType 'debugTest'
}

Answer #2

runProguard는 오래되었습니다. minifyEnabled로 바뀌 었습니다.

minifyEnabled (및 새로운 버전의 gradle에서 변경)를 사용하면 proguard config가 디버그 apk에서는 작동하지만 instrumentation 테스트에서는 작동하지 않는 문제가 발생할 수 있습니다. 인스 트루먼 테이션 테스트 용으로 생성 된 apk는 고유 한 프로 가드 파일을 사용하므로 기존 프로 가드 파일을 변경해도 아무런 효과가 없습니다.

이 경우 계측 테스트에 사용할 프로 가드 파일을 지정해야합니다. 그것은 당신의 디버그와 릴리즈 빌드에 전혀 영향을 미치지 않기 때문에 꽤 관대 할 수 있습니다.

    // inside android block
    debug {
        shrinkResources true  // removes unused graphics etc
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        testProguardFile('test-proguard-rules.pro')
    }

Answer #3

놓다

gradle.projectsEvaluated {
    proguardDebugTest.enabled = false
}

빌드 스크립트에서.

여기에서 알아야 할 두 가지가 있습니다.

  • 작업을 활성화 / 비활성화 하는 일반 Gradle 기능 .
  • Android Gradle 플러그인은 afterEvaluate 에서 작업의 지연된 생성을 지연하므로 afterEvaluate 작업을 비활성화 할 것을 지연해야합니다.

편집하다:

하나의 작은 메모 : 그것은 작업을 사용하지 못하게하지만 빌드에는 실패합니다. 이것은 : preDexDebugTest 태스크가 proguard on으로 실행되지 않기 때문입니다. 지금까지 찾은 최고의 해결책은 특정 proguard 구성을 디버그하는 것입니다. 자세한 내용은 here . 별도의 proguard 구성 파일을 만들고 다음과 같이 정규 proguard 파일을 포함시킵니다.

-include proguard.cfg

테스트 구성을 추가하십시오. 나를 위해 :

-dontwarn org.mockito.**
-dontwarn sun.reflect.**
-dontwarn android.test.**




instrumentation