이것은 Android Studio의 첫 번째 프로젝트이며 내 앱의 코드가 난독 화되지 않았습니다. 이 구성을 build.gradle 파일에서 사용하고 있습니다.
Proguard 실행이 선택된 상태에서 Build> Generate Signed APK ...를 사용하고 있습니다. 그리고 Apk_OneClick.v4.2를 사용하여 테스트했을 때 내 코드는 완전히 읽기 쉽습니다.
제발 도와주세요. :(
이것은 Android Studio의 첫 번째 프로젝트이며 내 앱의 코드가 난독 화되지 않았습니다. 이 구성을 build.gradle 파일에서 사용하고 있습니다.
Proguard 실행이 선택된 상태에서 Build> Generate Signed APK ...를 사용하고 있습니다. 그리고 Apk_OneClick.v4.2를 사용하여 테스트했을 때 내 코드는 완전히 읽기 쉽습니다.
제발 도와주세요. :(
답변:
서명 마법사를 통해 APK의 릴리스 빌드에 실제로 서명하지 않을 것입니다. 다음 명령을 사용하여 명령 줄에서 릴리스 APK를 빌드 할 수 있습니다.
./gradlew assembleRelease
또는 빌드 변형 보기 에서 릴리스 변형을 선택 하고 GUI에서 빌드 할 수 있습니다 .
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에 따라 빌드를 생성하십시오.
오른쪽 패널의 gradle 작업으로 이동하여 모듈 작업에서 검색 assembleRelease/assemble(#your_defined_buildtype)
하십시오.
왼쪽 패널의 빌드 변형으로 이동하고 드롭 다운에서 빌드를 선택합니다.
파일 탐색기에서 프로젝트 루트 디렉토리로 이동하여 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
NB .: 이제 대신
runProguard false
당신은 사용해야 할 것입니다
minifyEnabled false
'proguard-rules.txt'파일의 이름을 'proguard-android.txt'로 바꾸고 gradle 파일에서 'proguard-rules.txt'에 대한 참조를 제거하십시오. 이 getDefaultProguardFile(...)
호출은 프로젝트가 아닌 Google에서 제공하는 다른 기본 proguard 파일을 참조합니다. 따라서 이것을 제거하여 여기에 gradle 파일이 읽습니다.
buildTypes {
release {
runProguard true
proguardFile 'proguard-android.txt'
}
}
여기에있는 다른 답변은 proguard 사용에 대한 훌륭한 참고 자료입니다. 그러나 나는 그것이 마음 조정 자라고 언급 한 문제를 보지 못했습니다. 서명 된 릴리스 .apk를 생성하면 /release
앱 의 폴더에 저장되지만 내 앱에는 /release
폴더 에없는 APK가 있습니다. 따라서 내 proguard 변경 사항이 영향을 미치지 않는 이유를 궁금해하는 잘못된 apk를 디 컴파일하는 데 몇 시간을 보냈습니다. 이것이 누군가를 돕기를 바랍니다!
다음은 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>; }