2010-12-13 5 views
1

Je viens d'utiliser le nouvel outil ProGuard en éclipse pour obscurcir mon application. Je l'ai décompilé en utilisant dex2Jar et JD-GUI pour inspecter ce qui s'est passé. J'ai remarqué que tout de la classe R a été converti en un nombre aléatoire comme suit.Android Strings se transformer en nombre aléatoire après proguard Obfuscation

new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt); 

2130903058 était un fichier de disposition. Les chaînes de tableaux reçoivent le même traitement.

Il n'y a pas de classe R dans le code décompilé, où est-il parti? Où sont les références aux chaînes d'origine?

Répondre

5

Toutes les références sont des entiers. Si vous regardez R.string, vous remarquerez que tous les membres sont int s. C'est parce qu'ils sont pointeurs aux chaînes réelles. Par exemple, android.R.string.cancel est toujours 17039360, ce qui pointe vers la chaîne Cancel. Ce que fait ProGuard, c'est qu'il remplace ces références par les nombres réels qu'elles représentent, donc si vous utilisez android.R.string.cancel, il le remplacera par 17039360.

Editer: Il n'y a pas de classe R car elle n'est plus nécessaire (toutes les références ont été remplacées).