|
第一步:小星星适配MIUI6和MIUI7以及所有基于星星一号的包时很让人讨厌的就是要反编译开启虚拟按键的问题,因为MIUI6和MIUI7采用了小米应用框架,因此导致很多系统应用不能正常编译。
今天咱来看看小米到底是怎么阻止我们的反编译工作的。
准备下面的材料,二楼开始。Windows系统的台式机或笔记本一台;下面链接中apktool的MIUI特别版;JDK最新版。走起!
apktool for MIUI:
- 链接: https://pan.baidu.com/s/1jIyU9Em 密码: ptmq
复制代码
JDK8官方下载:
- http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
复制代码
第二步:
第三步:
现在我们开始编译工作。打开一键apktool,按2并回车,然后输入你要编译的apk(需要拷贝到apktool所在文件夹)的序号,按回车,这时会开始解包apk。我要反编译framework-res.apk开启虚拟按键,之前用了很多apktool版本都是竹篮打水一场空,只有这次找到了这个MIUI专用apktool,问题才迎刃而解。如果没有错误提示(通常是一大片英文),而是一条一条有序的提示,那么恭喜你,解包成功,你可以继续下面的操作了,例如开启虚拟按键,修改按键高度,美化状态栏,等等。
第四步:
完成工作后,最让人头疼的事来了,要回编译,很多星友都在这里栽了跟头。其实如果反编译正常的话,回编译只要简单排错就可以了,但是很多星友甚至在什么都没修改的情况下回编译也报错,这是怎么回事呢?别急,如果是用MIUI专用apktool还回编译失败,一般在错误提示中都有下面的字符:
或者是其他的values-mccxxxx-mncxxxx,但是归纳起来其实就是一名话“此目录无效”。简单来说,就是这些目录不能被回编译程序识别。按照提示的路径查找到这个文件夹,是不是我将这些目录删除就可以了呢?其实不止这么简单,删除它你只对了一半,因为这些文件夹里面还包括了一些资源信息。打开文件夹,里面的这些文件你是否感觉到有几分相识?它们不就是values下的那些个资源文件么?所以我们接下来要做的事情就是把这几个无效目录内的资源文件合并到values目录下。相信你一定在我的apktool包里发现了UltraEdit,现在它就要派上用场啦。用它无效目录下的一个资源文件和values目录下的同名文件,在values目录文件中查找无效目录下的资源文件的名字(如bool name),如果没有,则复制那一行并粘贴到values目录中的同名文件里。如果有,则删除无效目录里的文件即可。以此类推,直到删除完报错的文件夹为止。特别提醒,如果无效目录里的文件中的一项和values目录里的同名文件中的一项冲突,如无效目录里的一项为false,values目录里的一项为true,则以values目录里的项目为准,保留true数值。
【补充一下,UltraEdit和其他编辑软件产生的.bak备份文件一定要全部清理掉,不然无法回编译】
第五步:
这样修改完之后,打开一键apktool,按3并回车,输入你编译的那个apk文件夹的序号并回车,已经可以正常回编译了吧?完成之后,在apktool目录下的回编apk生成目录中找到回编译完成的apk,这时的apk还没有签名,你可以将编译之前的原apk改后缀名为zip(不显示后缀名的自己搜索解决),然后解压出META-INF,再把编译完成的apk复制一份副本,改副本后缀名为zip,将其中内容全部解压到一个文件夹,把原apk中解压出来的META-INF文件夹拷贝进去,然后以仅存储方式压缩成zip文件,再改回后缀名为apk。这样做的好处是签名一致,方便替换操作。坏处是有可能提示“无法解析”,自然无法使用,而framework-res.apk又是整个系统的核心。所以,使用上述方法做出原签名的apk之后,建议先在手机上尝试打开(不要安装),如果显示正常,则可以替换进系统了。如果真的提示“无法解析”,那么只能通过APKSign等第三方apk签名应用将没有签名的apk正本签名,然后再替换进系统。这就是之前为什么要复制一个编译完成的apk的副本的原因。如果有疑问,可以在下面回帖问我。本教程一定程度上基于“MIUI6电脑端反编译环境搭建及回编译错误处理_红米Note_MIUI论坛”的工作。
【感谢@hsh宏爷 提供正确方法指导,系统应用不能使用APKSign签名,而应该把原apk和编译好的apk的后缀名分别改为zip,然后从编译完成的apk中提取resources.arsc,然后替换进原apk,最后把放入新resources.arsc的原apk改回后缀名为apk,替换进系统。】
第六步:
apktool_for_MIUI(11月更新版)下载地址:
- 链接: https://pan.baidu.com/s/1jIyU9Em 密码: ptmq
复制代码
删除了UltraEdit,可自行下载或用Notepad++代替(反正我用Notepad++)
更新apktool2.jar,可用来反编译MiuiSystemUI.apk等,需时只要把apktool2.jar改名成apktool.jar就可以了——原apktool.jar据我测试能反编译framework框架,但是UI不行。apktool2.jar能反编译UI,但是framework框架不行——也就是说,包里的apktool2.jar是公版apktool_2.2.1,apktool.jar是MIUI版apktool。
原文地址:
- https://tieba.baidu.com/p/4733549503?red_tag=2960883214
复制代码
|
|