Proguard não faz obfuscação do código (Android)

12 respostas
T

Pessoal, bom dia.

Estou gerando um APK e quero que o código fique ofuscado. Porém, ele faz tudo: diminue o tamanho, faz os shrinks e tals, mas eu consigo fazer engenharia reversa no classes.dex, pego os .class e consigo ver perfeitamente todo o código lá.
Já peguei o arquivo de exemplo no site da proguard, o arquivo de exemplo no próprio SDK do android, vasculhei a net pegando exemplos e nunca ofusca.
Li também que o Proguard não ofusca Strings, é verdade?

Já tentei utilizar o Stringer para realizar isso. Ele realmente funciona. Todas as Strings ficam ilegíveis, mas quando instalo no celular ele da pau.

OBS: Estou utilizando o Eclipse para gerar a APK!!

Obrigado

12 Respostas

M

Gere pelas rotinas do ant

E adicione no seu project.properties:
proguard.config=proguard.cfg

Pode ver mais sobre isso aqui:
http://developer.android.com/tools/projects/projects-cmdline.html

T

Quando você diz “Gere pelas rotinas do ant”, seria gerar o projeto de novo ou gerar o APK através do ant?
Mas o Eclipse já não usa o Ant para fazer o build?

Esse parte do project.properties eu já tinha efetuado. Segui todos os passos no site da proguard e no próprio site do Android (na parte de ativação do Proguard)

Grato

M

É gerar o APK pelo ant.

Acredito que o Eclipse usa sim, mas não sei se é o mesmo.

M

Pessoal, quero aproveitar a deixa e perguntar um detalhe aqui:
minha máquina não gera automaticamente o proguard.cfg em nenhum projeto Android.
Tentei habilitar manualmente com base nas informações do arquivo txt (descomentando aquelas linhas), mas não deu certo.
Uso Windows XP 32 bits + Eclipse Indigo.

Como faço isso? Obrigado!

M

Voce usou o

./android update project --name NomeProjeto --target <inteiro> --path <path-project>

?

M

E aí Marky, tudo bom?

Irmão, vai me desculpar pelas perguntas noobs, mas para mim é novidade esse comando aí que você passou.
Ou seja, respondendo a sua pergunta, não soube usar o seu comando.

- você está falando de executar esse comando aí pela linha de comandos do celular (com o emulador aberto), é isso?
(se for isso mesmo, digo que faço o básico pelo comando adb -e shell e derivados [localizar o pacote do projeto, a base de dados...] então, por saber os comandos mais básicos, acho que vou conseguir fazer o que você diz)

- que número inteiro é esse que vai como parâmetro no target e como localizo o caminho do projeto?

- em qual pasta eu devo estar para executar esse comando? Suponho que seja o caminho do meu projeto, mas como localizá-lo? (que foi o que perguntei acima)
Exemplo:

# pwd
pwd
/data/data
# ls
ls
com.android. ... 
com.android. ... 
...
...
com.android.providers.downloads
br.marcelo.testabanco
br.marcelo.conversor
...

Obrigado pela atenção!

M

Esse comando é feito na pasta tools do SDK.

Esse inteiro representa a versão que voce está usando como target instalado no seu SDK, faça ./android devices antes que vai listar todos platforms e seu respectivo inteiro.

M
Marky, desculpe, mas não deu certo... estou no Windows e os comandos são diferentes. Mas localizei a minha pasta (que está em outro lugar, diferente da sua) e fiz um adb devices. Mesmo assim não deu, pois o comando não retornou nenhum inteiro. Tá certo o que fiz até agora? Obtive isto:
C:\Android_Instalacao\android-sdk-windows\platform-tools>dir
 O volume na unidade C é SG500_SYS
 O número de série do volume é A4CF-4ACB

 Pasta de C:\Android_Instalacao\android-sdk-windows\platform-tools

07/06/2012  17:13    <DIR>          .
07/06/2012  17:13    <DIR>          ..
07/06/2012  17:13           824.832 aapt.exe
07/06/2012  17:13           162.816 adb.exe
07/06/2012  17:13            96.256 AdbWinApi.dll
07/06/2012  17:13            60.928 AdbWinUsbApi.dll
07/06/2012  17:13           220.672 aidl.exe
07/06/2012  17:13    <DIR>          api
07/06/2012  17:13           132.608 dexdump.exe
07/06/2012  17:13             2.618 dx.bat
07/06/2012  17:13            70.144 fastboot.exe
07/06/2012  17:13    <DIR>          lib
07/06/2012  17:13        19.318.784 llvm-rs-cc.exe
07/06/2012  17:13           377.618 NOTICE.txt
07/06/2012  17:13    <DIR>          renderscript
07/06/2012  17:13               207 source.properties
              11 arquivo(s)     21.267.483 bytes
               5 pasta(s)  2.702.159.872 bytes disponíveis

C:\Android_Instalacao\android-sdk-windows\platform-tools>adb devices
List of devices attached
emulator-5554   device


C:\Android_Instalacao\android-sdk-windows\platform-tools>
Acima está o conteúdo da pasta platform-tools. O conteúdo da pasta tools coloquei abaixo (caso precise dar uma olhada) e é diferente:
C:\Android_Instalacao\android-sdk-windows\tools>dir
 O volume na unidade C é SG500_SYS
 O número de série do volume é A4CF-4ACB

 Pasta de C:\Android_Instalacao\android-sdk-windows\tools

07/06/2012  17:20    <DIR>          .
07/06/2012  17:20    <DIR>          ..
07/06/2012  17:20               323 adb_has_moved.txt
07/06/2012  17:20             3.419 android.bat
07/06/2012  17:20    <DIR>          ant
07/06/2012  17:20             1.444 apkbuilder.bat
07/06/2012  17:20    <DIR>          apps
07/06/2012  17:20             2.304 ddms.bat
07/06/2012  17:20            60.416 dmtracedump.exe
07/06/2012  17:20             1.445 draw9patch.bat
07/06/2012  17:20         2.515.968 emulator-arm.exe
07/06/2012  17:20         2.462.720 emulator-x86.exe
07/06/2012  17:20            53.760 emulator.exe
07/06/2012  17:20            17.976 emulator_NOTICE.txt
07/06/2012  17:20           267.776 etc1tool.exe
07/06/2012  17:20             2.378 hierarchyviewer.bat
07/06/2012  17:20             8.192 hprof-conv.exe
07/06/2012  17:20    <DIR>          Jet
07/06/2012  17:20    <DIR>          lib
07/06/2012  17:20             1.885 lint.bat
07/06/2012  17:20             9.216 mksdcard.exe
07/06/2012  17:20             1.926 monkeyrunner.bat
07/06/2012  17:20           379.587 NOTICE.txt
07/06/2012  17:20    <DIR>          proguard
07/06/2012  17:20               240 source.properties
07/06/2012  17:20           523.264 sqlite3.exe
07/06/2012  17:20    <DIR>          support
07/06/2012  17:20             1.919 traceview.bat
07/06/2012  17:20           172.544 zipalign.exe
              21 arquivo(s)      6.488.702 bytes
               8 pasta(s)  2.700.943.360 bytes disponíveis

C:\Android_Instalacao\android-sdk-windows\tools>
Como resolvo isso? Obrigado pela atenção e compreensão! Abraço!
M

É “android devices” e não “adb devices”

M
E ae Marky, poderia dar uma conferida se fiz certo? Segui o que você disse, veja a ordem e os resultados. Fiz o comando android devices na seguinte pasta...
C:\Android_Instalacao\android-sdk-windows\platform-tools>
...e obtive o resultado:
C:\Android_Instalacao\android-sdk-windows\platform-tools>android devices
Error: Expected verb after global parameters but found 'devices' instead.

       Usage:
       android [global options] action [action options]
       Global options:
  -h --help    : Help on a specific command.
  -v --verbose : Verbose mode, shows errors, warnings and all messages.
  -s --silent  : Silent mode, shows errors only.

                                                                    Valid
                                                                    actions
                                                                    are
                                                                    composed
                                                                    of a verb
                                                                    and an
                                                                    optional
                                                                    direct
                                                                    object:
-    sdk              : Displays the SDK Manager window.
-    avd              : Displays the AVD Manager window.
-   list              : Lists existing targets or virtual devices.
-   list avd          : Lists existing Android Virtual Devices.
-   list target       : Lists existing targets.
-   list sdk          : Lists remote SDK repository.

... ... ... mais linhas
... ... ... mais linhas

- create identity     : Creates an identity file.

C:\Android_Instalacao\android-sdk-windows\platform-tools>
Marky, nesse código acima, o que significa o erro na primeira linha? (logo após executar o comando)
Error: Expected verb after global parameters but found 'devices' instead.
Continuando: Executei o android list target para obter o parâmetro inteiro. Eu queria o número referente à versão 2.3.3 do Android que estou usando (no emulador). Portanto, o número é 1. Tinha também o 2 e o 3.
C:\Android_Instalacao\android-sdk-windows\platform-tools>android list target
Available Android targets:
----------
id: 1 or "android-10"
     Name: Android 2.3.3
     Type: Platform
     API level: 10
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
     ABIs : armeabi
----------
id: 2 or "Google Inc.:Google APIs:10"

.. ... ... mais linhas

     ABIs : armeabi
----------
id: 3 or "KYOCERA Corporation:DTS Add-On:10"

... ... ... mais linhas

     ABIs : armeabi

C:\Android_Instalacao\android-sdk-windows\platform-tools>
Por fim, fiz o comando abaixo...
android update project --name DietaDosPontos --target 1 --path C:\Eclipse_WorkSpace_Dieta\DietaDosPontos
...no local indicado...
C:\Android_Instalacao\android-sdk-windows\platform-tools>
...obtendo as seguintes linhas como resposta:
C:\Android_Instalacao\android-sdk-windows\platform-tools>android update project --name DietaDosPontos --target 1 --path C:\Eclipse_WorkSpace_Dieta\DietaDosPontos
Updated project.properties
Updated local.properties
Added file C:\Eclipse_WorkSpace_Dieta\DietaDosPontos\build.xml
Updated file C:\Eclipse_WorkSpace_Dieta\DietaDosPontos\proguard-project.txt

C:\Android_Instalacao\android-sdk-windows\platform-tools>
Marky, esse processo está certo? E tenho algumas dúvidas ainda: - o meu proguard agora está habilitado, após eu fazer tudo isso? - eu sempre terei que refazer esse processo em cada projeto ou tem como automatizar pelo Eclipse? - sabe me dizer por que o Windows + Eclipse Indigo não habilita o proguard por padrão?

Obrigado, fera!

M

Ahh… era o android list invés de android devices.

Mas então, com isso voce tem o build.xml para poder dar um ant release lá.

Mas ainda é necessario adicionar algumas linhas para o apk ser assinado junto com o release.

Adicione no project.properties

O ant release vai pedir as duas senhas quando estiver gerando.

Voce precisa fazer isso para cada novo projeto.

Não sei por que o Eclipse não faz isso sozinho.

M

E ae Marky, td bem? Ontem e hoje (25-26/07) estive em treinamento e estava ausente. Mas muito obrigado pela força e desculpe a demora em dar um retorno…

Meu instrutor tb não soube dizer porque o Eclipse não faz isso sozinho. Ele disse “talvez o Eclipse até faça, mas não no Windows” (ele só usa MacBook e nele o proguard eh habilitado automaticamente). E tb nem soube dizer como se faz no Windows pq ele já começou a estudar Android direto no Mac…

Agora essas sequências de instruções/comandos vão pegar Marky, preciso da sua ajuda… [falo dos comandos + parâmetros, claro… inglês é o de menos]
Como comentei esses dias, essas configurações e comandos específicos são tudo novidade para mim, nem conhecia esses recursos.

Release do inglês [esse parâmetro do “ant release”] é o lançamento de uma versão de software, no caso a versão do meu aplicativo. Tudo bem.
Mas o q significa a instrução/comando “ant” e o que ela faz?

E em qual local do arquivo eu acrescento essas duas linhas? Qualquer local?

Vc poderia me passar uma sequência de comandos + parâmetros + diretório onde devo dar os comandos [color=“gray”][igual isso que fui fazendo nas minhas respostas, mas você não precisaria colocar as telas com os resultados dos comandos, igual eu fiz - apenas os comandos e uma breve descrição do que cada um faz][/color], para tentarmos acelerar essa tentativa de colocar um ponto final nisso? Ex.:
diretorioA: “abc 123” - [o abc faz isso no seu arquivo/projeto e o 123 serve para tal coisa;
… …

Em tempo: estou usando Windows XP para estudar Android + Eclipse Indigo…

Muito obrigado irmão!!

.

Criado 17 de julho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 12
Participantes 3