Как использовать ProGuard в Android Studio?

98

Это мой первый проект в Android Studio, и код моих приложений не запутывается. Я использую эту конфигурацию в файле build.gradle: введите описание изображения здесь

Я использую Build> Generate Signed APK ... с установленным Run Proguard. И, когда я тестировал Apk_OneClick.v4.2, мой код совершенно легко читается:

введите описание изображения здесь

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

Фелипе Порхе Ксавье
источник
покажите свои правила proguard, определенные в текстовом файле, для запутывания кода.
pyus13 02
Как проверить, запутано ли приложение?
VVB
@VVB путем обратной инженерии APK-файла, я думаю: D
hotHead

Ответы:

71

Скорее всего, вы на самом деле не подписываете релизную сборку APK с помощью мастера подписи. Вы можете собрать APK выпуска из командной строки с помощью команды:

./gradlew assembleRelease

или вы можете выбрать вариант выпуска в представлении « Варианты сборки» и создать его из графического интерфейса:

Главное окно IDE, показывающее варианты сборки

Скотт Барта
источник
Большой! Я тестировал изменение отладки на runProguard true и отлично работает. Теперь читаю ваш ответ, работает !!!! Великий человек! Спасибо.
Felipe Porge Xavier
К сожалению, я случайно поместил "assemblyDebug" вместо "AssemblyRelease" в своих инструкциях командной строки. Я исправил свой ответ.
Скотт Барта
Каков путь к файлу .apk, который экспортируется через командную строку?
Шажил Афзал
50

Вы можете настроить свой файл 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 falseproductionbuild и других сборок как 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 и запустите

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

Windows gradlew assembleRelease or assemble(#your_defined_buildtype)

Вы можете найти apk в каталоге вашего модуля / сборки.

Подробнее о расположении файлов конфигурации и proguard можно узнать по ссылке.

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

Pyus13
источник
Где я могу использовать myproductionbuild?
Felipe Porge Xavier
да, вы правы :) вы можете увидеть то же самое на вкладке варианта сборки на левой боковой панели.
pyus13 02
Но у apk нет запутывания ... :(
Фелипе Порхе Ксавье
написали ли вы конфигурацию в proguard-rule.txt, посмотрите несколько примеров здесь proguard.sourceforge.net/index.html#manual/examples.html
pyus13 02
У меня Gradle DSL-метод runProguard () не найден.
SleepNot
41

NB .: Теперь вместо

runProguard false

вам нужно будет использовать

minifyEnabled false
ВилюсК
источник
5
думаю, это должно быть установлено в true
anna_manzhula
1

Попробуйте переименовать файл proguard-rules.txt в proguard-android.txt и удалить ссылку на proguard-rules.txt в файле gradle. getDefaultProguardFile(...)Вызов ссылается на другой Proguard файл по умолчанию, один предоставленный Google , а не что в вашем проекте. Так что удалите и это, чтобы здесь файл gradle читался так:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-android.txt'
    }
}
SK9
источник
Не работай на меня. Я поместил свой собственный proguard-android.txt в тот же каталог, что и proguard-rules.txt, но в моем коде ничего не изменилось.
Felipe Porge Xavier
0

Другие ответы здесь - отличные ссылки на использование proguard. Тем не менее, я не видел, чтобы обсуждалась проблема, с которой я столкнулся бы, изгибающей разум. После создания подписанного выпуска .apk он помещается в /releaseпапку вашего приложения, но в моем приложении был apk, которого в /releaseпапке не было. Следовательно, я часами декомпилировал неправильный apk, задаваясь вопросом, почему мои изменения proguard не повлияли. Надеюсь, это кому-то поможет!

МайкЛундквист
источник
0

Вот некоторые из наиболее распространенных правил 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

ОкHttp3

 -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>; }
Бхавик Натани
источник