有一个由Proguard混淆的APK。我用APK工具反编译它。它为每个类创建了* .smali文件。我可以看到类的真实名称甚至代码流:
.locals 2
new-instance v0, Lcom/acme/model/Receipt;
invoke-direct {v0}, Lcom/acme/model/Receipt;-><init>()V
iget-object v1, p1, Lcom/acme/bus/Receipt;->a:Ljava/lang/String;
invoke-virtual {v0, v1}, Lcom/acme/model/Receipt;->setText(Ljava/lang/String;)V
iget v1, p1, Lcom/acme/bus/event/device/Receipt;->b:I
invoke-virtual {v0, v1}, Lcom/acme/Receipt;->setType(I)V
return-object v0
我可以查看此方法的作用。我期望所有的包,类,属性,方法都会被改变,源代码对于第一眼看上去没有任何意义。什么可以在Android上进行模糊处理?
答案 0 :(得分:1)
据我所知,当项目启用proguard时,proguard会默认模糊android项目。
这种appliation的可能堆栈跟踪看起来有点像这样:
Caused by: java.lang.NullPointerException
at net.simplyadvanced.ltediscovery.be.u(Unknown Source)
at net.simplyadvanced.ltediscovery.at.v(Unknown Source)
at net.simplyadvanced.ltediscovery.at.d(Unknown Source)
at net.simplyadvanced.ltediscovery.av.onReceive(Unknown Source)
- &GT;没有关于类和方法名称的信息
所以我假设,构建apk的开发人员由于某种原因禁用了类重命名。另请参阅Using Proguard with Android without obfuscation
堆栈跟踪的来源:http://simplyadvanced.net/blog/android-how-to-decode-proguards-obfuscated-code-from-stack-trace/
答案 1 :(得分:0)
据我所知,它会将您的所有类和方法重命名为例如A,AA,AAA,B,BB,等。这样就不那么容易阅读和理解了。就是那么多并删除所有未被引用或使用的类和垃圾也被删除,并且APK被压缩到一个明显的小尺寸。