apktool反编译工具使用详解

 APKToolGOOGLE提供的APK编译工具,须要JAVA运行环境,推荐使用JDK1.6或者JDK1.7 php

若是你想对APK文件进行修改,那么就不可避免的要使用到APKTool论坛里有不少关于ROM美化的帖子都须要本身动手修改APK文件,好比修改framework-res.apksystemUI.apk等等。android

相信各位有很多人看了后都想亲自来修改一番,可是结果倒是遇到了各式各样的错误却没法进行改正,甚至都不知道本身错在哪里。web

一.APKTOOL使用环境配置ide

1.安装JAVA设置环境变量。工具

下载安装都很简单,关键是安装完后还须要亲自设置环境变量以方便其余程序可以条用JAVAui

WIN7为例,在桌面上右键点击计算机——>属性——>高级系统设置——>环境变量——>在下边的系统变量里新建一个变量,变量名为JAVA_HOME,值为JAVA的安装路径,好比个人是H:\ProgramFiles\Java\jdk1.6.0_26google

二.APKTool的安装url

1.其实这个谈不上安装,不过若是你愿意的话能够把下载到的APKTOOL中的三个文件(aapt.exeapktool.batapktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.spa

2.可能有些人下载的APKTOOL里有个安装的bat文件,而且有另外两个方便使用的bat文件,在这里我不推荐你们使用这些bat文件,虽然使用起来很方便(其实我并不以为方便),可是若是出现错误不方便查看。翻译

三.APKTool的使用

1.decode

该命令用于进行反编译apk文件,通常用法为

apktool d <file.apk> <dir>

<file.apk>表明了要反编译的apk文件的路径,最好写绝对路径,好比C:\MusicPlayer.apk

<dir>表明了反编译后的文件的存储位置,好比C:\MusicPlayer

若是你给定的<dir>已经存在,那么输入完该命令后会提示你,而且没法执行,须要你从新修改命令加入-f指令

apktool d –f <file.apk> <dir>

这样就会强行覆盖已经存在的文件

2.build

该命令用于编译修改好的文件,通常用法为

apktool b <dir>

这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer,输入这行命令后,若是一切正常,你会发现C:\MusicPlayer内多了2文件夹builddist,其中分别存储着编译过程当中逐个编译的文件以及最终打包的apk文件。

3.install-framework

该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体状况请看常见问题



四.常见问题

1.关于安装和管理framework文件

如下大部分实际上是翻译自http://code.google.com/p/android-apktool/wiki/FrameworkFiles

通常来讲,你在使用apktool进行反编译前不须要作其余的事情,然而因为有的厂商,如HTC三星等,他们定制了framework文件而且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件而且安装到apktool中。

举一个例子,好比你想反编译HTCHero这款手机中的HtcContacts.apk,当你尝试反编译的时候,你会获得如下错误信息。


 

  1. $ apktool d HtcContacts.apk 
  2. I: Loading resource table...
  3. I: Decoding resources...
  4. I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
  5. W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
  6. ...
  7. W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
  8. 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.apktzframework-res.apk,通常来讲,这两个文件在手机中的位置应该是system\framework\

使用如下代码进行安装

apktool if C:\framework-res.apk

apktool if C:\tzframework-res.apk

这里假设2个文件都放在C盘根目录


2.直接用build编译后在dist中找到的apk文件没法使用

其实这个问题我也不是特别理解,目前知道的就是,APK文件虽然本质是个zip文件,可是事实上zip包中的文件是按照两种方式压缩的,即XML文件进行deflate压缩,其余文件不进行压缩(使用store存储),而直接编译获得的APK文件对任何的文件都进行了deflate压缩,所以你会发现编译获得的文件比原文件小好多。

一样的,当你使用build文件夹中的文件替换原apk文件中的资源时,请务必确认是使用store存储仍是deflate压缩

3.其余错误

其实在编译过程当中会遇到不少其余的问题,大多数是因为删除、修改、添加了资源后,没有对应的修改res\values\public.xml文件而形成的,这里我给你们说下修改的原则:

第一,public.xml文件中的资源不能重复定义。

第二,public.xml文件中的任意两个资源的ID不能同样

第三,public.xml文件中定义的资源必须能找到该文件(若是你删除了一些文件,必需要对应的删除public.xml中的该行)

第四,public.xml文件中尽量全面(若是你添加了某资源,最好确保在public.xml中也添加)

第五,public.xml文件中的资源的ID尽量连续(当你为添加的文件添加声明时,赋予的ID尽量是连续的)

相关文章
相关标签/搜索