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

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

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

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

É gerar o APK pelo ant.

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

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!

Voce usou o

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

?

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:

[code]# pwd
pwd
/data/data

ls

ls
com.android. …
com.android. …


com.android.providers.downloads
br.marcelo.testabanco
br.marcelo.conversor
…[/code]

Obrigado pela atenção!

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.

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:

[code]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 .
07/06/2012 17:13 …
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 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 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 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>[/code]
Acima está o conteúdo da pasta platform-tools. O conteúdo da pasta tools coloquei abaixo (caso precise dar uma olhada) e é diferente:

[code]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 .
07/06/2012 17:20 …
07/06/2012 17:20 323 adb_has_moved.txt
07/06/2012 17:20 3.419 android.bat
07/06/2012 17:20 ant
07/06/2012 17:20 1.444 apkbuilder.bat
07/06/2012 17:20 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 Jet
07/06/2012 17:20 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 proguard
07/06/2012 17:20 240 source.properties
07/06/2012 17:20 523.264 sqlite3.exe
07/06/2012 17:20 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>[/code]
Como resolvo isso? Obrigado pela atenção e compreensão! Abraço!

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

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…

…e obtive o resultado:

[code]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>[/code]
Marky, nesse código acima, o que significa o erro na primeira linha? (logo após executar o comando)

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.

[code]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>[/code]
Por fim, fiz o comando abaixo…

…no local indicado…

…obtendo as seguintes linhas como resposta:

[code]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>[/code]
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!

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.

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!!

.