Como usar o ProGuard no Android Studio?


98

Este é meu primeiro projeto no Android Studio, e o código dos meus aplicativos não está ofuscado. Estou usando esta configuração no arquivo build.gradle: insira a descrição da imagem aqui

Estou usando Build> Generate Signed APK ... com Run Proguard marcado. E, quando testei usando o Apk_OneClick.v4.2, meu código ficou completamente fácil de ler:

insira a descrição da imagem aqui

Por favor me ajude. :(


mostre suas regras de programa definidas no arquivo de texto para código de ofuscação.
— pyus13

Como verificar se o aplicativo está ofuscado ou não?
— VVB

@VVB pelo arquivo APK de engenharia reversa, eu acho: D
— hotHead

Respostas:


71

Provavelmente, você não está realmente assinando a versão de lançamento do APK por meio do assistente de assinatura. Você pode criar o APK de lançamento a partir da linha de comando com o comando:

./gradlew assembleRelease

ou você pode escolher a variante de lançamento na visualização Build Variants e criá-la a partir da GUI:

Janela principal do IDE mostrando variantes de compilação


Ótimo! Eu testei alterando o debug para runProguard true e funciona perfeitamente. Agora li sua resposta e funciona !!!! Grande homem! Obrigado.
— Felipe Porge Xavier

Opa, eu acidentalmente coloquei "assembleDebug" em vez de "assembleRelease" nas minhas instruções de linha de comando. Eu fixei minha resposta.
— Scott Barta

Qual é o caminho do arquivo .apk que é exportado via linha de comando?
— Shajeel Afzal

50

Você pode configurar seu arquivo build.gradle para implementação do Proguard. Pode ser no nível do módulo ou no nível do projeto.

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

A configuração mostrada é para o nível de depuração, mas você pode escrever seus próprios tipos de compilação, como mostrado abaixo dentro de buildTypes:

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

É melhor ter seu debug com um minifyEnabled falsebuild de produção e outros builds como minifyEnabled true.

Copie seu arquivo proguard-rules.txt na raiz de seu módulo ou pasta de projeto como

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

Você pode alterar o nome do arquivo como desejar. Após a configuração, use uma das três opções disponíveis para gerar sua construção de acordo com o buildType

  1. Vá para a tarefa gradle no painel direito e pesquise as assembleRelease/assemble(#your_defined_buildtype)tarefas do módulo

  2. Vá para Build variant no painel esquerdo e selecione a build no menu suspenso

  3. Vá para o diretório raiz do projeto no File Explorer e abra cmd / terminal e execute

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

janelas gradlew assembleRelease or assemble(#your_defined_buildtype)

Você pode encontrar o apk em seu diretório de módulo / compilação.

Mais sobre a configuração e localização dos arquivos proguard está disponível no link

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


Onde posso dizer para usar o myproductionbuild?
— Felipe Porge Xavier

sim, você está correto :) você pode ver o mesmo na guia Variante de construção no painel do lado esquerdo.
— pyus13

Mas o apk não tem ofuscação ... :(
— Felipe Porge Xavier

você escreveu a configuração em proguard-rule.txt veja alguns exemplos aqui proguard.sourceforge.net/index.html#manual/examples.html
— pyus13

Estou tendo o método runProguard () do Gradle DSL não encontrado.
— SleepNot

41

NB: Agora em vez de

runProguard false

você precisará usar

minifyEnabled false

5
acho que deveria ser definido como verdadeiro
— anna_manzhula

1

Tente renomear seu arquivo 'proguard-rules.txt' para 'proguard-android.txt' e remova a referência a 'proguard-rules.txt' em seu arquivo gradle. A getDefaultProguardFile(...)chamada faz referência a um arquivo Proguard padrão diferente, fornecido pelo Google e não o do seu projeto. Portanto, remova isso também, para que aqui o arquivo gradle leia:

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

Não trabalhe para mim. Coloquei meu proguard-android.txt personalizado no mesmo diretório de proguard-rules.txt, mas nada mudou em meu código.
— Felipe Porge Xavier

0

As outras respostas aqui são ótimas referências sobre o uso do Proguard. No entanto, não vi um problema discutido que eu encontrei que fosse um dobrador de mente. Depois de gerar um .apk de liberação assinado, ele é colocado na /releasepasta do seu aplicativo, mas meu aplicativo tinha um apk que não estava na /releasepasta. Conseqüentemente, passei horas descompilando o apk errado me perguntando por que minhas alterações no programa não estavam tendo efeito. Espero que isso ajude alguém!


0

Aqui estão algumas das regras mais comuns do Proguard que você precisa adicionar no arquivo proguard-rules.pro no Android Sutdio.

Faca de manteiga

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

Retrofit

 -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.** { *; }

Ofuscação de código

-keepclassmembers class com.yourname.models** { <fields>; }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.