apktool使用教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.APKTool使用环境配置
APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,最新版本为JDK1.8。
安装后设置环境变量以方便其他程序能够调用JAVA:
以WIN7为例,在桌面上右键点击计算机——>属性——>高级系统设置——>环境变量——>在下边的系统变量里新建一个变量,变量名为JAVA_HOME,值为JAVA的安装路径,比如我的是C:\Program Files (x86)\Java\jdk1.7.0_67 然后添加
CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar ;
PATH %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
2.APKTool的使用
apktool文件夹放在D盘根目录,应用改名为f.apk放在此文件夹下
win+R然后输入cmd
输入D:然后回车。(D是说apktool所在的盘)
输入cd apktool 然后回车(这个命令式说打开apktool这个文件夹)
输入apktool if f.apk 然后回车(这个命令式说在CMD模式安装f.apk)输入apktool d f.apk 然后回车(这个命令是说反编译f.apk d就是反编译的命令)
然后apktool文件夹就会出现一个f的文件夹(接下去还要用到cmd,先不要关掉。)
f文件夹里面就是反编译出来的文件了,这样就可以用修改代码了(将xml修改为txt即可)。
修改文件名字: value/string/app_name
修改完成后,就要回编译,在命令提示符中继续
输入apktool b f (这个命令就是说回编译f文件夹,b是回编译,f是指F 文件夹)
成功后,f文件夹中会出现一个dist的文件夹,里面有一个f.apk
(有就是成功了,没有就是失败了)
用APKSign给编译出来的文件签名即可安装。
3.常见问题
3.1关于安装和管理framework文件
以下大部分其实是翻译自/p/android-apktool/wiki/FrameworkFiles
一般来说,你在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,如HTC,三星等,他们定制了framework文件并且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。
举一个例子,比如你想反编译HTCHero这款手机中的HtcContacts.apk,当你尝试反编译的时候,你会得到以下错误信息。
$ apktool d HtcContacts.apk
I: Loading resource table...
I: Decoding resources...
I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
...
W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
这就是在通知你必须先安装HTC定制的framework文件,事实上在修改一些三星的系统应用时也是如此。
以三星的设备来举例,你需要复制两个framework文件来进行安装,framework-res.apk和tzframework-res.apk,一般来说,这两个文件在手机中的位置应该是system\framework\
使用以下代码进行安装
apktool if C:\framework-res.apk
apktool if C:\tzframework-res.apk
这里假设2个文件都放在C盘根目录
3.2其他错误
其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改res\values\public.xml文件而造成的,这里我给大家说下修改的原则:
第一,public.xml文件中的资源不能重复定义。
第二,public.xml文件中的任意两个资源的ID不能一样
第三,public.xml文件中定义的资源必须能找到该文件(如果你删除了一些文件,必须要对应的删除public.xml中的该行)
第四,public.xml文件中尽可能全面(如果你添加了某资源,最好确保在public.xml中也添加)
第五,public.xml文件中的资源的ID尽可能连续(当你为添加的文件添加声明时,赋予的ID尽可能是连续的)
3.3 APK文件结构说明
AndroidManifest.xml
该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml 做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具解开,具体命令为:java -jar AXMLPrinter2.jar AndroidManifest.xml
META-INF目录
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码,或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。