将Dalvik反编译为Java,为什么会有如此多的不一致之处?

我在应用程序的dex文件上使用了dex2jar和JD-gui,尽管在代码的某些部分,它没有意义,并且在反编译方面存在错误.

尽管当我在dex文件上使用backsmali时,代码是正确的,但我更愿意阅读Java代码而不是Smali来理解大型应用程序的工作原理.

首先,为什么Java代码中会有如此多的不一致之处? dex2jar或JD-gui是否有问题?还有其他选择吗?

解决方法:

即使从.class文件到.java文件,反编译通常也不会那么完美.

一方面是由于一个简单的事实,即编译并不代表.class文件中源文件中的所有信息.空白和注释是.class文件中未表示的最明显的信息示例.局部变量名称也经常被忽略,根据您的编译标志,甚至参数名称也可能丢失.

另一方面,反编译器的市场似乎非常有限,缺乏竞争会导致反编译器无法正常运行.例如,Java编译器的每个新发行版都可能产生新代码,需要对反编译器进行等效更新才能检测到新模式并从中产生合适的Java源代码.缺少这样的更新,反编译器必然会失败并打印字节码反汇编,或者生成看起来很奇怪的构造,它们执行相同的操作,但永远不会被人类编写.

并且当您添加另一级别的编译(Java字节代码-> Dalvik字节代码)时,它只会变得更糟.

除非您能给出哪种不一致的具体示例,否则很难给出更好的答案.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...