今天跟大家唠唠我最近折腾的Apktool,这玩意儿,说白了就是个反编译APK的工具,能把安卓安装包里的东西扒拉出来,方便你修改、汉化啥的。我这几天就玩了玩,感觉还挺有意思的,跟大家分享下我的实践过程。
我啥也不懂,就知道Apktool能反编译APK。我就直接在网上搜,找了个看着靠谱的Apktool下载下来。结果装好之后,命令行一敲,报错!我靠,啥情况?仔细一看,原来是Java环境没配得,乖乖回去配Java环境,下JDK,配置环境变量,折腾了好一会儿才搞定。
环境搞定之后,再次尝试反编译。这回没报错了,但是出来一堆英文,看得我头都大了。各种参数、选项,完全不知道是干嘛的。我就找了几个教程,一步一步跟着学。先把APK文件放到一个好找的目录下,然后在命令行里输入apktool d *
,这里的"*"就是你的APK文件名。回车!等了一会儿,就看到一个文件夹生成了,里面就是反编译出来的东西。
反编译出来之后,我打开文件夹,里面各种资源文件、XML文件,还有个smali文件夹,里面是Dalvik字节码。我这回的目标是改个图片,所以在资源文件夹里找找,终于找到了我想替换的图片。我用PS做了个新图片,替换了原来的。然后就是重新打包了,在命令行里输入apktool b xxx
,这里的"xxx"是刚才反编译出来的文件夹名。回车!又等了一会儿,就生成了一个新的APK文件,在"xxx/dist"目录下。
但是!问题又来了,这个新生成的APK文件不能直接安装,会提示签名错误。原来,重新打包的APK需要重新签名才能安装。我又去网上找签名工具,找到一个叫“jarsigner”的,是JDK自带的。用这个工具给APK签名,具体的命令是jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your_* * alias_name
。这里的“your_*”是你的密钥库文件,“*”是你要签名的APK文件,“alias_name”是密钥库的别名。如果没有密钥库,可以用keytool工具生成一个。
签名之后,终于可以安装了!我把新的APK文件传到手机上,安装,打开!哈哈,成功了!我替换的图片显示出来了。这回实践真是折腾了我好几天,各种问题层出不穷,但是成功了,还是挺有成就感的。
用Apktool反编译、修改APK的步骤大概是:
- 准备好Java环境。
- 下载并安装Apktool。
- 反编译APK文件。
- 修改资源文件或者代码。
- 重新打包APK文件。
- 给APK文件签名。
- 安装并测试。
这只是个简单的例子,Apktool的功能远不止这些。比如还可以修改字符串、汉化应用、修改Smali代码等等。以后有时间再继续研究研究。
提醒一下大家,修改APK有风险,搞不好会把应用搞崩溃,或者侵犯别人的版权。玩玩可以,别乱搞!