Как использовать ProGuard в Android Studio? - программирование
Подтвердить что ты не робот

Как использовать 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

Пожалуйста, помогите мне. :(

4b9b3361

Ответ 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

  1. Перейдите к задаче gradle на правой панели и найдите assembleRelease/assemble(#your_defined_buildtype) разделе задач модуля.

  2. Перейдите к варианту сборки в левой панели и выберите сборку из выпадающего списка

  3. Перейдите в корневой каталог проекта в проводнике, откройте 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>; }