Як користуватися ProGuard в Android Studio?


98

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

Я використовую збірку> Створити підписаний APK ... при встановленій прапорці Run Proguard. І коли я протестував за допомогою Apk_OneClick.v4.2, мій код читається абсолютно легко:

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

Будь ласка, допоможи мені. :(


покажіть свої правила захисту, визначені в текстовому файлі для прихованого коду.
pyus13

Як перевірити, чи додаток затуманено чи ні?
VVB

@VVB методом зворотного генерування APK-файлів, мабуть: D
hotHead

Відповіді:


71

Напевно, ви насправді не підписуєте версію версії APK за допомогою майстра підписання. Ви можете створити версію APK з командного рядка за допомогою команди:

./gradlew assembleRelease

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

Головне вікно IDE, що показує варіанти складання


Чудово! Я перевірив зміну налагодження на runProguard true і працює чудово. Тепер я читаю вашу відповідь, і працює !!!! Чудова людина! Дякую.
Феліпе Порге Ксав'є

На жаль, я випадково поставив "assembleDebug" замість "assembleRelease" в моїх інструкціях командного рядка. Я зафіксував свою відповідь.
Скотт Барта

Який шлях файлу .apk, який експортується за допомогою командного рядка?
Shajeel Afzal

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 falseі як виробництво та інші версії як minifyEnabled true.

Скопіюйте файл proguard-rules.txt у корінь модуля чи папки проекту, як-от

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

Ви можете змінити ім'я файлу, як вам захочеться. Після конфігурації використовуйте один із трьох доступних варіантів для створення вашої збірки відповідно до типу build

  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 у своєму каталозі модулів / збірок.

Більш детально про конфігурацію та розташування файлів-захисників можна ознайомитись за посиланням

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


Де я можу сказати, щоб використовувати myproductionbuild?
Феліпе Порге Ксав’є

так, ви маєте рацію :) ви можете побачити те саме на вкладці "Варіант складання" на лівій бічній панелі.
pyus13

Але в apk немає обтурання ... :(
Феліпе Порге Ксав'є

Ви написали конфігурацію в proguard-rule.txt, дивіться приклади сюди proguard.sourceforge.net/index.html#manual/examples.html
pyus13

У мене метод Gradle DSL runProguard () не знайдено.
SleepNot


1

Спробуйте перейменувати файл "proguard-rules.txt" на "proguard-android.txt" і видаліть посилання на "proguard-rules.txt" у вашому файлі gradle. У getDefaultProguardFile(...)виклику посилається на інший файл-захисник за замовчуванням, той, який надає Google, а не той у вашому проекті. Тож видаліть і це, щоб тут файл gradle читав:

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

Не працюй для мене. Я помістив свій власний proguard-android.txt у той самий каталог proguard-rules.txt, але в моєму коді нічого не змінилося.
Феліпе Порге Ксав’є

0

Інші відповіді тут - чудові посилання на використання proguard. Однак я не бачив обговорюваного питання про те, щоб я натрапив на те, що це був розум. Після того як ви генеруєте підписаний реліз .apk, він поміщається у /releaseпапку у вашому додатку, але у мого додатка був apk, який не був у /releaseпапці. Отже, я витратив години, розкладаючи неправильний АПК, цікавлячись, чому зміни на моїх захисниках не впливають. Сподіваюся, це комусь допоможе!


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

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 

Гсон

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

Обфузація коду

-keepclassmembers class com.yourname.models** { <fields>; }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.