Android 字符串在 proguard 混淆后变成随机数
我刚刚在 eclipse 中使用了新的 ProGuard 工具来混淆我的应用程序。我使用 dex2Jar 和 JD-GUI 检查发生了什么。
我注意到 R 类中的所有内容都已转换为随机数,如下所示。
new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);
2130903058 是一个布局文件。字符串和数组得到相同的处理。
反编译后的代码中没有R类,它去哪儿了?对原始字符串的引用在哪里?
I just used the new ProGuard tool in eclipse to obfuscation my application. The I decompiled it using dex2Jar and JD-GUI to inspect what happened.
I noticed that everything from the R class has been converted to a random number like the following.
new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);
2130903058 was a layout file. Strings an arrays get the same treatment.
There is no R class in the decompiled code, where has it gone? Where are the references to the original strings?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
所有引用均为整数。如果您查看
R.string
,你会注意到所有成员都是int
。这是因为它们是指向实际字符串的指针。例如,android.R.string.cancel
始终为17039360
,它指向字符串Cancel
。 ProGuard 的作用是将这些引用替换为它们代表的实际数字,因此如果您使用android.R.string.cancel
,它会将其替换为17039360
。编辑:没有 R 类,因为不再需要它(对它的所有引用都已被替换)。
All references are integers. If you look at
R.string
, you'll notice all the members areint
s. This is because they are pointers to the actual strings. For example,android.R.string.cancel
is always17039360
, which points to the stringCancel
. What ProGuard does is it replaces these references with the actual numbers they represent, so if you useandroid.R.string.cancel
, it will replace it with17039360
.Edit: There is no R class because it is not needed anymore (all references to it have been replaced).