Как использовать ProGuard в Android Studio?
Это мой первый проект в Android Studio, и код моих приложений не запутан. Я использую эту конфигурацию в файле build.gradle: ![enter image description here]()
Я использую Build> Generate Signed APK... с проверенным Run Proguard. И, когда я проверил с использованием Apk_OneClick.v4.2, мой код легко читается:
![enter image description here]()
Пожалуйста, помогите мне. :(
Ответы
Ответ 1
Вероятно, вы не подписываете сборку APK с помощью мастера подписи. Вы можете либо построить APK выпуска из командной строки с помощью команды:
./gradlew assembleRelease
или вы можете выбрать вариант выпуска из представления Build Variants и построить его из графического интерфейса пользователя:
![IDE main window showing Build Variants]()
Ответ 2
Вы можете настроить свой файл build.gradle для реализации proguard. Это может быть на уровне модуля или на уровне проекта.
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/терминал и запустите
Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)
Windows gradlew assembleRelease or assemble(#your_defined_buildtype)
Вы можете найти apk в вашем каталоге module/build.
Подробнее о конфигурации и расположении файлов proguard можно узнать по ссылке
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard
Ответ 3
NB: теперь вместо
runProguard false
вам нужно будет использовать
minifyEnabled false
Ответ 4
Попробуйте переименовать файл proguard-rules.txt в 'proguard-android.txt' и удалите ссылку на 'proguard-rules.txt' в вашем файле gradle. Вызов getDefaultProguardFile(...)
ссылается на другой файл proguard по умолчанию, который предоставляется Google, а не на ваш проект. Поэтому удалите это также, так что здесь файл gradle читает:
buildTypes {
release {
runProguard true
proguardFile 'proguard-android.txt'
}
}
Ответ 5
Другие ответы здесь - отличные рекомендации по использованию proguard. Тем не менее, я не видел, чтобы обсуждалась проблема, с которой я столкнулся, это было бредом. После создания подписанного релиза .apk он помещается в папку /release
в вашем приложении, но у моего приложения был apk, которого не было в папке /release
. Поэтому я часами декомпилировал неправильный apk, задаваясь вопросом, почему мои изменения в proguard не оказали никакого влияния. Надеюсь, это поможет кому-то!
Ответ 6
Вот некоторые из наиболее распространенных правил Proguard, которые необходимо добавить в файл proguard-rules.pro в Android Sutdio.
Нож для масла
-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>; }