Android Studio에서 ProGuard를 사용하는 방법은 무엇입니까?


98

이것은 Android Studio의 첫 번째 프로젝트이며 내 앱의 코드가 난독 화되지 않았습니다. 이 구성을 build.gradle 파일에서 사용하고 있습니다. 여기에 이미지 설명 입력

Proguard 실행이 선택된 상태에서 Build> Generate Signed APK ...를 사용하고 있습니다. 그리고 Apk_OneClick.v4.2를 사용하여 테스트했을 때 내 코드는 완전히 읽기 쉽습니다.

여기에 이미지 설명 입력

제발 도와주세요. :(


난독 화 코드에 대해 텍스트 파일에 정의 된 proguard 규칙을 표시합니다.
pyus13

앱이 난독 화되었는지 확인하는 방법은 무엇입니까?
VVB

@VVB by reverse engeneering APK-file I guess : D
hotHead jul.

답변:


71

서명 마법사를 통해 APK의 릴리스 빌드에 실제로 서명하지 않을 것입니다. 다음 명령을 사용하여 명령 줄에서 릴리스 APK를 빌드 할 수 있습니다.

./gradlew assembleRelease

또는 빌드 변형 보기 에서 릴리스 변형을 선택 하고 GUI에서 빌드 할 수 있습니다 .

빌드 변형을 보여주는 IDE 주 창


큰! 디버그를 runProguard true로 변경하여 테스트했으며 완벽하게 작동합니다. 이제 답장을 읽고 작동합니다 !!!! 위대한 인물! 감사합니다.
Felipe Porge Xavier 2014 년

죄송합니다. 명령 줄 지침에 실수로 "assembleRelease"대신 "assembleDebug"를 넣었습니다. 나는 내 대답을 고쳤다.
Scott Barta 2014 년

명령 줄을 통해 내 보낸 .apk 파일의 경로는 무엇입니까?
Shajeel Afzal

50

proguard 구현을 위해 build.gradle 파일을 구성 할 수 있습니다. 모듈 수준 또는 프로젝트 수준 일 수 있습니다.

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

표시된 구성은 디버그 수준을위한 것이지만 buildTypes 내부에 아래와 같이 고유 한 빌드 버전을 작성할 수 있습니다.

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

디버그 minifyEnabled false및 productionbuild 및 기타 빌드를 minifyEnabled true.

모듈 또는 프로젝트 폴더의 루트에 proguard-rules.txt 파일을 복사하십시오.

$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt

원하는대로 파일 이름을 변경할 수 있습니다. 구성 후 사용 가능한 세 가지 옵션 중 하나를 사용하여 buildType에 따라 빌드를 생성하십시오.

  1. 오른쪽 패널의 gradle 작업으로 이동하여 모듈 작업에서 검색 assembleRelease/assemble(#your_defined_buildtype)하십시오.

  2. 왼쪽 패널의 빌드 변형으로 이동하고 드롭 다운에서 빌드를 선택합니다.

  3. 파일 탐색기에서 프로젝트 루트 디렉토리로 이동하여 cmd / terminal을 열고 실행하십시오.

리눅스 ./gradlew assembleRelease or assemble(#your_defined_buildtype)

윈도우 gradlew assembleRelease or assemble(#your_defined_buildtype)

모듈 / 빌드 디렉토리에서 apk를 찾을 수 있습니다.

구성 및 proguard 파일 위치에 대한 자세한 내용은 링크에서 사용할 수 있습니다.

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard


myproductionbuild를 사용하기 위해 어디에서 말할 수 있습니까?
Felipe Porge Xavier

나중에 맞습니다 :) 왼쪽 패널의 빌드 변형 탭에서 동일하게 볼 수 있습니다.
pyus13

그러나 APK는하지 유무 난독 ... :(
펠리페 Porge 자비에르

proguard-rule.txt에 구성을 작성 했습니까? 여기에있는 몇 가지 예를 참조하십시오. proguard.sourceforge.net/index.html#manual/examples.html
pyus13 2014 년

Gradle DSL 메서드 runProguard ()를 찾을 수 없습니다.
SleepNot

41

NB .: 이제 대신

runProguard false

당신은 사용해야 할 것입니다

minifyEnabled false

5
이 true로 설정해야합니다 생각
anna_manzhula

1

'proguard-rules.txt'파일의 이름을 'proguard-android.txt'로 바꾸고 gradle 파일에서 'proguard-rules.txt'에 대한 참조를 제거하십시오. 이 getDefaultProguardFile(...)호출은 프로젝트가 아닌 Google에서 제공하는 다른 기본 proguard 파일을 참조합니다. 따라서 이것을 제거하여 여기에 gradle 파일이 읽습니다.

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

나를 위해 일하지 마십시오. proguard-rules.txt에 의해 동일한 디렉토리에 사용자 정의 proguard-android.txt를 넣었지만 내 코드에서 변경된 사항이 없습니다.
Felipe Porge Xavier

0

여기에있는 다른 답변은 proguard 사용에 대한 훌륭한 참고 자료입니다. 그러나 나는 그것이 마음 조정 자라고 언급 한 문제를 보지 못했습니다. 서명 된 릴리스 .apk를 생성하면 /release앱 의 폴더에 저장되지만 내 앱에는 /release폴더 에없는 APK가 있습니다. 따라서 내 proguard 변경 사항이 영향을 미치지 않는 이유를 궁금해하는 잘못된 apk를 디 컴파일하는 데 몇 시간을 보냈습니다. 이것이 누군가를 돕기를 바랍니다!


0

다음은 Android Sutdio의 proguard-rules.pro 파일에 추가해야하는 가장 일반적인 Proguard 규칙 중 일부입니다 .

버터 칼

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

개조

 -dontwarn retrofit.**
 -keep class retrofit.** { *; }
 -keepattributes Signature
 -keepattributes Exceptions

OkHttp3

 -keepattributes Signature
 -keepattributes *Annotation*
 -keep class okhttp3.** { *; }
 -keep interface okhttp3.** { *; }
 -dontwarn okhttp3.** 
 -keep class sun.misc.Unsafe { *; }
 -dontwarn java.nio.file.*
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 

Gson

 -keep class sun.misc.Unsafe { *; }
 -keep class com.google.gson.stream.** { *; }

코드 난독 화

-keepclassmembers class com.yourname.models** { <fields>; }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.