[教學] APK應用程序的解包、修改、編輯、漢化、打包及應用
------------------------------------------------
APK应用程序的解包、修改、编辑、、打包及应用
本讲是进级的内容,来谈谈与apk应用程序有关的知识,内容包括akp文件的解包、打包、反编辑、解析、、修改等内容,也介绍几个常用的软件。最后要介绍对apk操作有哪些应用,学会了能干些什么。
这些内容实际上构成了一个很大的课题,用简短的文字无法描述清楚。我准备用三个部分来介绍如下内容:
第一部分:apk应用介绍,解包和打包,常用软件工具
第二部分:三星闭源系统apk文件的处理,和签名
第三部分:介绍apk文件打包解包的各种应用
第一部分是基础知识,第二部分进入实战修改apk应用程序,最后在第三部分来介绍APK应用程序的修改和编辑的各种各样实际应用。
----------------------------------------------------------------------------------
第一部分:apk应用介绍,解包和打包,常用软件
相信每为机友对APK文件都不陌生。你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具、插件、好玩的游戏等等。。。尤其是最近关于2.3.4 XXJVP ROM的,更成为论坛里的热门话题。你们可曾知道ROM是怎样的吗?说来容易做来难。这里要涉及很广泛的知识、手段,以及要花大量的时间。
1. APK文件简介
APK是Android Package的缩写,即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,扩展名为 .apk。APK文件是用专业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件直接传到Android手机中执行即可安装。APK文件其实就是zip格式,但其扩展名被改为apk,在Windows下用解压软件WinRAR/WinZIP/7-Zip可以直接打开。解压后,你会看到有几个文件和文件夹。一个典型的APK文件通常有下列内容组成:
l 程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 编译后的二进制资源文件
META-INF\ 该目录下存放的是签名信息
res\ 该目录存放资源文件
assets\ 该目录可以存放一些配置文件
下面对这些文件和目录做些基本的注释和介绍:
• l
该文件是每个apk应用程序都必须包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。
• classes.dex文件
classes.dex是java源码编译后生成的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行程序。利用解析工具可以将其转换成java来加以阅读和理解。
• resources.arsc
编译后的二进制资源文件。在做主题美化时要常与这个文件打交道。
• META-INF目录
META-INF目录下存放的是签名信息,有三个签名文件,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
• res目录
res目录存放资源文件。包括图片,字符串等等。res下有若干个子目录,主要为drawable,layout,xml。
解包后,几乎所有可能的修改和编辑工作基本都在这里。ROM的主要工作就在这里。ROM实际上就是所有的apk应用程序的字符文件。
• assets目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
下面以“设置”应用程序Settings.apk为例。用WinRAR打开文件后,看到以上介绍的六项内容。现在,即使你已经对文件解压,你还是无法直接阅读每个文件的内容。为了读出这些文件的内容,从而进行进一步的修改和编辑,你就必须具有相应的工具了(请到第二节)。
2. APK应用程序的解包和打包工具
这一节主要介绍在Windows系统中常用的几个工具包,用来对apk应用程序进行解包、打包、反编译、解析。所有apk工具包都要求java环境(这个我就不介绍了,自己学习去吧)。这些工具可以从网上各个论坛获取。我在近一个月里收集了几个常用的工具包,我会打包上传与有志于对apk进行操作的机友分享。主要推荐有三个工具包。
1) apktool
apktool可能是当今最为流行的apk工具包,由解包、打包、签名程序组成。被称之为“apk反编译利器”。去Google一下apktool,有非常多的资源,无论是软件下载,还是使用教程。对非三星的应用程序进行操作,很好用。
打开apktool工具包,看到如下内容:
Akp程序的解包和打包软件由2个程序来完成:apktool.jar 和 。
另外提供一个批处理文件:apktool.bat,其内容为:
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
运行apktools.jar需要java环境(1.6.0版本以上)。apktool.jar用于解包,apktool.jar和联合用于打包。testkey.pk8和testkey.x509.pem是签名程序。
解包命令:
apktool d xxxxxx.apk ABC
这里“d”表示要解码。Xxxxx.apk是要解包的APK文件。ABC是子目录名。解包的文件会放在这个子目录内。
打包命令:
apktool b ABC yyyyy.apk
这里“b”表示要打包,ABC是子目录名,是解包时产生的子目录,用来存放所有解包后的和修改后的文件。yyyyy.apk是打包后产生的新的APK文件。
在上传的apk工具包里,已经另外加了两个批处理文件:Unpack-apk.bat和Repack-apt.bat。前者用于apk的解包过程,后者用于编辑后的文件的打包和签名。把待解包的apk文件放到Unpack-apk.bat的同一个目录里,双击Unpack-apk.bat,apk文件解包开始,产生3个子文件夹,解包后的文件被放在Working_APK文件夹内。详细内容将在第二部分描述。另外,批处理文件允许同时对多个apk文件顺序进行解包和打包。
注意:文件名里不允许有空格,不能有中文。
使用前,要先安装框架文件:apktool if framework-res.apk
如果是三星系统,还要安装:apktool if twframework-res.apk
2) apk manager
apk manager是另一个“apk反编译利器”。它比apktool工具包还要强大些。三星的许多apk系统应用程序用了三星的闭源系统,用apktool可以解包,但是打包不成功。这时,apk manager就好用了。
打开apk manager工具包,看到如下内容。软件都放在other子目录里。运行apk manager要求adb工具包(见下图中的3个adb文件)。把待解包的apk文件放到place-apk-here-for-modding子目录里,双击脚本批处理程序Script.bat,选择选项:9,产生一个子文件夹projects,解包后的文件被放在这个子文件夹内。详细内容将在第二部分描述。
在使用时,有时apktool和apk manager交替使用,一个不行就用另外一个。 所以,在编辑apk应用程序时两者都要掌握。
注意:文件名里不允许有空格,不能有中文。
使用前,要先安装框架文件:apktool if framework-res.apk
如果是三星系统,还要安装:apktool if twframework-res.apk
3) Dex2jar和XJad
该方法不是直接对apk文件进行解包。它是首先提取apk文件内的classes.dex文件,然后使用dex2jar.jar工具包将classes.dex解包成jar文件,再通过XJad 或者其他class反编译工具进行java反编译,最后生成java源文件。
但是,使用这个工具包无法进行classes.dex的还原(当然也无法进行apk的打包)。尽管如此,这个工具包仍然很重要,因为它把classes.dex文件转换成了可以更容易阅读的java源文件。在修改apk应用程序时,必不可少,是一极强的辅助工具。相比之下,apktool和apk manager反编译后得到的是Dalvik 反编译码 (Dalvik opcodes),需要很专业的知识来阅读,很不直观。如果你读懂了java源文件,那修改相对应的Dalvik码不就容易多了吗。
4) 其它工具包简介
此外,还有许多工具包可用。这些也容易在网上到。
a) DoAPK
DoAPK实际上就是apktool工具包。有人把apktool写成了带窗口界面的可执行文件。
b) Google Smali
有两个程序:baksmali.jar和smali.jar。baksmali.jar用来反解析dex和odex文件,得到Dalvik码。然后用smali.jar还原成dex文件。例如,在修改状态栏时间显示颜时,要用的这两个解析程序。
c) AXMLPrinter2.jar
AXMLPrinter2.jar对apk文件内的 l和l进行操作,将XML还原成文本文件,便于阅读。
d) Apkdb
是一个集成apktool,smali,Dex2jar,签名等功能的工具。
e) 其它工具
不再介绍。自己动手到网上去搜索吧。
我把这些收集到的apk工具包打包上传,供你们使用,免得你们来去。
集成Apk工具包下载地址:
u.115/file/clnar7bm
第二部分:三星闭源系统apk文件的处理,和签名
在这一部分,我们要进入实战。首先,利用一个具体的例子来阐述apk工具包的使用,对apk文件进行解包、、打包和签名。然后,我们来对付三星闭源系统的apk程序,达到我们修改、和美化的目的。我们假定所有apk文件都是单个独立文件,不含odex文件(在官版ROM中,通常每个apk都分成两部分,第一部分是apk,第二部分是odex。将它们合并是另一个题目,这里不作叙述)。
1. 配置框架(Framework)环境
在处理APK文件时,apktool需要框架文件(framework-res.apk)来解码和打包。apktool已经包含了标准的框架,所以在大多数APK文件的解包时,不需要另外提供框架文件。但是,某些制造商(例如三星)使用了他们自己的框架文件,为了解包,就不得不从手机中或从ROM中把框架文件(framework-res.apk)提取出来,然后安装到计算机。安装命令是:
apktool if framework-res.apk
安装后就会得到:~\apktool\framework\1.apk
注意:三星系统(例如:I897)有两个框架文件:framework-res.apk和twframework-res.apk。在使用apktool之前,要安装这两个框架文件。安装方法同上:
apktool if framework-res.apk
apktool if twframework-res.apk
安装后就会得到:~\apktool\framework\1.apk和
~\apktool\framework\2.apk。
许多人拿来apktool工具包用,说解不开包,运行出错。原因是没有配置框架环境。
2. akp文件的和修改
我首先来讲对一般的(非三星)apk应用程序进行解包、和打包。为你们方便和叙述目的,我在上传的apktool和apk manager工具包里都带了一个小的apk应用程序SilentBoot_EN.apk。这个程序是“静音启动”,就是通过这个程序来设置开机时是否有开机音乐。我在我的2.3.4 XXJVP ROM里也集成了这个akp程序,现在你们自己来把它一下吧。我们用apktool工具包来做。
步骤如下:
1) apk程序解包首先把SilentBoot_EN.apk复制到Unpack-apk.bat的同一个目录里(我已经放好了)
双击Unpack-apk.bat,apk文件解包开始。DOS窗口出现,显示解包进程和一系列信息,直到解包结束。
解包结束后,在工作目录下产生3个子文件夹:New_APK,Raw_APK和Working_APK。解包了的文件被放在Working_APK文件夹内,原始apk文件(SilentBoot_EN.apk)被复制一份到Raw_APK文件夹保存。见界面截图如下:
在Working_APK字文件夹里产生了一个子夹_SilentBoot_EN.apk,里面存放所有解包后的文件。在_SilentBoot_EN.apk之下有两个文件夹 /res和/smali,还有两个文件l和l。用文本编辑器打开l看看,是不是在第一部分里介绍的内容。你要修改的内容在/res文件夹内。
打开/res文件夹,看到里面有5个子夹,/drawable存放apk应用的图标(Icon),drawable-hdpi存放其它要用的图形文件,/layout是apk的布局文件,/values里是字符文件。apk就是/alues文件夹内l文件的内容。
2) 字符
这里只适用于懂英语的同学。如果你不懂英语,就照表抄课好了。
用文本编辑器打开l,其内容为:
Silent Boot
Enable Silent Boot
Device is muted on shutdown.
Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled.
要汉译的字符是:Silent Boot,Enable Silent Boot,Device is muted on shutdown,Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled。
先别急,我现在来教你怎样处理文件。有两种方法:a) 正规,b) 强制。
a) 正规
一个apk应用在后应该能在英文和中文系统下都能使用。/values目录下的是英文语言包。为了建一个中文语言包,与/values并行创建一个子文件夹:/values-zh-rCN(必须用这个文件名!)。这里values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。
把/values文件夹里的l等语言文件复制进/values-zh-rCN。在我们的例子中,只有l一个文件。
进入/values-zh-rCN,用文本编辑器打开l,然后你就翻译吧,把英文描述译成相应的中文。
例如,我们可以把上面的l文件译成:
静音启动
开启静音启动
关机也是静音
关机不是静音\n如果没有开启静音启动,关机时播放开机音乐。
里面有个操作符“\n”是换行符,迫使换行显示文本内容。之后存盘,用“另存为”(Save As)存成UTF-8格式。这是保持中文文本的格式。
在作工作时,要对l文件进行修改。有时也需要修改其它xml文件,一个一个地认真查看,一个一个地。
b) 强制
所谓“强制”就是不产生/values-zh-rCN文件夹。而是在/values文件夹内把需要的文件都直接译成中文。显然,如果在英文操作系统中没有中文字库的话,强制的apk在英文系统中可能显示乱码。所以,建议养成良好习惯,采用“正规”。
高级内容:以上的是修改l,把英文译成相应的中文就好了,然后打包和签名。但是,在有些apk文件里,所显示的字符文字并不都在xml文件里。apk原作者把某些字符写在代码中。反编译后,存放在/smali文件夹里。一层一层地下去,最后你会看到一大堆Dalvik码文件,都是以.smali为文件扩展名。举一个例子,用文本编辑器打开某个.smali文件,看到:
const-string v5, "ServiceMode"
“ServiceMode”会在apk执行时显示为英文。因此,需要。在I897 ROM里,用工程模式特殊代码看到的多半属于这一类。汉译起来非常花时间。我们要把ServiceMode译成“服务模式”。怎么处理呢?你不能把const-string v5, "ServiceMode"直接改成const-string v5, "服务模式"。打包会失败的。正确的做法是把相应的中文字符用16进制的unicode来表示。例如:把“服务模式”用16进制的unicode表示就是\u670d\u52a1\u6a21\u5f0f 。每一个汉字用4个字符表示,\u表示为16进制的unicode码。好了,正确的汉译是:
const-string v5, "\u670d\u52a1\u6a21\u5f0f "
网上有中文字符与16进制unicode码的对照表或转换工具。我在这部分提供一张转换表供你们使用。见附件。
3) Apk打包和签名
打包操作很简单,没有什么好讲的。照着做就行了。
回到apktool目录,鼠标双击批处理文件Repack-apk.bat,apk文件就打包好了。在Repack-apk.bat批处理中,每个apk文件打包好后就紧跟着进行签名操作。所以,执行完Repack-apk.bat后,打包和签名都完成了。
打包和签名好了的apk文件存放在New_APK文件夹内,文件名加了一个前缀New_。在我们的例子中,所生成的新的apk应用程序为New_SilentBoot_EN.apk。这就是好了的apk程序了。
现在你需要把文件改成你需要的名字:SilentBoot_CN.apk,安装到手机试一下吧!欣赏一下你自己的apk程序!是不是很爽!有成就感吧!
3. 三星akp文件的和修改
好了,有了以上对apk解包、修改()、打包、签名做基础,我们现在来看怎样对三星apk进行操作。我们手里用的是三星I897手机,/system/app目录下的很多apk应用程序都是三星程序,典型的包括framework-res.apk,twframework-res.apk,TouchWiz30Luancher.apk。由于三星采用自己的闭源系统,对其、修改、打包和签名有一定难度,目前还没有发现完全适合于三星apk的专用工具。因此,需要采取特殊手段来达到目的。
apktool对所有三星apk文件都是可以解包的,对某些apk是可以打包签名的,但是,对另外一些apk的打包总是失败。这里需要指出的是,即使你对三星apk文件打包签名成功,这个生成的apk程序也无法在三星手机上运行!原因是三星使用了其闭源的特殊签名。
由于某些三星apk文件无法用apktool进行打包,所以我们在这一节使用功能更强大的apk manager进行解包和打包。在执行apk manager脚本批处理Script.bat时,有很多选项(见下图)。我们用到选项9和11。选项9是反编译(解包),选项11是再编译(打包)。由于三星不承认其它签名,所以这里签名并不重要。但是,如果你在处理非三星的apk文件,那签名还是需要的,要用的选项12和14。
操作步骤:
1)把待解包的apk文件(例如:TouchWiz30Launcher.apk)放到place-apk-here-for-modding子目录里
2)双击脚本批处理程序Script.bat,你会看到上面的界面
3)选择选项9进行解包,回车,开始解包
4)解包结束后,产生一个子文件夹projects,里面有一个字文件夹(TouchWiz30Launcher.apk),解包后的文件被放在这个子文件夹内。
5)选择选项24退出程序
6)按照上一节的方法进入projects/TouchWiz30Launcher.apk文件夹,把l和有关的部分进行了修改
7)修改和结束后,再运行批处理程序Script.bat
8)选择选项11进行打包。需要的时间较长,请耐心等待打包结束
9)打包结束后,在place-apk-here-for-modding文件夹内产生了一个新的未签名的apk文件:unsignedTouchWiz30Launcher.apk
为了在手机上运行apk应用程序,签名是必需的。那怎样对三星apk应用程序进行签名处理呢?一个有效的方法就是借用原来解包前apk文件已经有的签名,把原来的签名与新的编辑内容进行合成。从而,达到我们解包、修改、、打包和“签名”的目的,使新的apk程序可以在三星I897上运行。
合成操作步骤:
1)先用WinRAR打开原始的apk文件TouchWiz30Launcher.apk,里面有3个文件和两个文件夹。在第一部分讲过每一个文件和文件夹的作用。这里不再描述。
2)再用WinRAR打开生成的apk文件unsignedTouchWiz30Launcher.apk。 里面是没有签名文件的,就没有文件夹META-INF,我们也不需要它。
3)从unsignedTouchWiz30Launcher.apk中提取我们编辑过的东西。为此,用鼠标把resources.arsc文件从unsignedTouchWiz30Launcher.apk文件窗口拖进TouchWiz30Launcher.apk的窗口,去覆盖原来的resources.arsc文件。你也可以先把原来的resources.arsc删除,然后再做拖入的动作。
4)出现一个参数窗口。在压缩方式处选择“Store”(存储)。然后按“OK”。
5)退出WinRAR。结束。新的三星apk应用程序就制作好了,签名是利用了原始的签名。文件是TouchWiz30Launcher.apk。
说明:
1)如果修改了/res目录下的内容,在第3步,就复制resources.ars。如果修改了/smali目录下的内容,在第3步,就复制classes.dex。
2)只可以替换这两个文件,别的都不要动。
3)在第4步的压缩方式,一定要选“Store”。
第三部分:介绍apk文件打包解包的各种应用
在第一和第二部分中,我们花了大量的篇幅来介绍apk文件的结构,apk文件的解包、修改、编辑、打包、签名,以及所需要的工具。我写的很累,你们读着一定也会很累。内容很多,篇幅又长。在这一部分里,谈点轻松的来结束第三讲。
为什么要对apk文件进行解包?当然要对其内容进行必要的修改。修改什么呢?在第二讲中,我们对apk进行了。其实只是一个应用而已。下面,根据我的经验和知识来介绍一下apk文件解包和打包的各种应用。一般来说,就是为了修改和美化。更进一步,就是为了定制ROM。
为完整起见,先简要地介绍一下对apk文件的非解包修改问题。也就说,在不使用第一部分的apk解包打包工具的情况下,我们能对apk文件的哪些内容做些修改?用WinRAR打开一个apk文件,你会看到有一个文件夹/res,进去后,你有会看到有一个子文件夹/drawable或多个文件夹。如果有多个子文件夹,之中会有一个/drawable-hdpi。挨个都打开看看。这些子文件夹都是放一些图片和xml文件的。你可以对所有的图片进行删除、替换、添加。如果替换,切记文件名要一致。一个大家都熟悉的例子是替换/修改电池显示图标。但是,你无法对xml进行修改。如果要对文字和其它非图像类内容进行修改,那只能通过解包解码了。
好了。现在我们回到这一部分的主题,来介绍apk文件解包和打包的各种应用。下面几项任务需要对apk文件进行解包和打包。其实我在以前的帖子里介绍过,这里只重复简单介绍一下,请自己去读参考资料和详细的操作方法和教程。
1) apk应用程序
在第二部分详细讲过。再次不再叙述。
2) 修改图标标签
每一个apk文件都有一个“图标标签”。将apk程序安装进手机后,在图标下面显示图标标签文字。这个图标标签的内容是可以修改的。在\res\values下到l,修改其中的一行:
图标标签
例如:静音启动
同理,如果是窗口小插件,要修改widget_name。
3) 去掉apk中的广告
有很多apk应用都带有广告。为了去掉程序中的广告,要修改l文件与广告有关的内容。在/res目录下到文件l。通常在/layout目录下,有时也被放在其它目录下。甚至,有时不存在l文件,广告行被放在其它xml文件内。只能细心逐个文件进行查。无论哪一种情况,查看其内容,你会看到有一项类似的命令如下。这就是广告显示。
将其改为:
可以看到,关键是要把fill_parent改为0.0dip,把wrap_content改为0.0dip,其它内容保持不变即可。这种改法就是不给广告显示空间,当然你就看不到广告了。
4) 修改电池显示精度
在官方I897 ROM里,默认的电池显示精度是5%。我们希望把显示精度增加到1%。这个需要通过修改主题文件framework-res.apk来实现。你们今天ROM里每变化1%电量就显示一次的主题,就是这样做出来的。
修改步骤如下:
(1) 对framework-res.apk进行解包
(2) 修改和增加电池状态图标(可以从其它ROM中提取)
(3) 修改文件stat_l (每隔1%显示一次)
(4) 修改文件stat_sys_l(对应新的充电动画)
(5) 打包
(6) 提取stat_l,stat_sys_l,resources.arsc和一个图标目录:drawable-mdpi
(7) 重新装配framework-res.apk
5) 状态栏信息通知文字颜修改
状态栏信息通知文字颜,是由framework-res.apk文件里res\values下的l文件控制的,所以我们只需修改l文件就可以了。另外,此文件还控制下拉栏的文字颜,可以修改。
用文本编辑器打开l文件,到
#ff000000
将这句修改为:#ffffffff
这状态栏信息通知文字颜由黑改为白。
6) 其它应用
安卓软件签名工具
还有许多应用都与美化修改主题有关,像修改状态栏“时间”的显示颜,步骤繁多,这里就不介绍了。
------------------------------------------------
APK应用程序的解包、修改、编辑、、打包及应用
本讲是进级的内容,来谈谈与apk应用程序有关的知识,内容包括akp文件的解包、打包、反编辑、解析、、修改等内容,也介绍几个常用的软件。最后要介绍对apk操作有哪些应用,学会了能干些什么。
这些内容实际上构成了一个很大的课题,用简短的文字无法描述清楚。我准备用三个部分来介绍如下内容:
第一部分:apk应用介绍,解包和打包,常用软件工具
第二部分:三星闭源系统apk文件的处理,和签名
第三部分:介绍apk文件打包解包的各种应用
第一部分是基础知识,第二部分进入实战修改apk应用程序,最后在第三部分来介绍APK应用程序的修改和编辑的各种各样实际应用。
----------------------------------------------------------------------------------
第一部分:apk应用介绍,解包和打包,常用软件
相信每为机友对APK文件都不陌生。你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具、插件、好玩的游戏等等。。。尤其是最近关于2.3.4 XXJVP ROM的,更成为论坛里的热门话题。你们可曾知道ROM是怎样的吗?说来容易做来难。这里要涉及很广泛的知识、手段,以及要花大量的时间。
1. APK文件简介
APK是Android Package的缩写,即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,扩展名为 .apk。APK文件是用专业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件直接传到Android手机中执行即可安装。APK文件其实就是zip格式,但其扩展名被改为apk,在Windows下用解压软件WinRAR/WinZIP/7-Zip可以直接打开。解压后,你会看到有几个文件和文件夹。一个典型的APK文件通常有下列内容组成:
l 程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 编译后的二进制资源文件
META-INF\ 该目录下存放的是签名信息
res\ 该目录存放资源文件
assets\ 该目录可以存放一些配置文件
下面对这些文件和目录做些基本的注释和介绍:
• l
该文件是每个apk应用程序都必须包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。
• classes.dex文件
classes.dex是java源码编译后生成的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行程序。利用解析工具可以将其转换成java来加以阅读和理解。
• resources.arsc
编译后的二进制资源文件。在做主题美化时要常与这个文件打交道。
• META-INF目录
META-INF目录下存放的是签名信息,有三个签名文件,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
• res目录
res目录存放资源文件。包括图片,字符串等等。res下有若干个子目录,主要为drawable,layout,xml。
解包后,几乎所有可能的修改和编辑工作基本都在这里。ROM的主要工作就在这里。ROM实际上就是所有的apk应用程序的字符文件。
• assets目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
下面以“设置”应用程序Settings.apk为例。用WinRAR打开文件后,看到以上介绍的六项内容。现在,即使你已经对文件解压,你还是无法直接阅读每个文件的内容。为了读出这些文件的内容,从而进行进一步的修改和编辑,你就必须具有相应的工具了(请到第二节)。
2. APK应用程序的解包和打包工具
这一节主要介绍在Windows系统中常用的几个工具包,用来对apk应用程序进行解包、打包、反编译、解析。所有apk工具包都要求java环境(这个我就不介绍了,自己学习去吧)。这些工具可以从网上各个论坛获取。我在近一个月里收集了几个常用的工具包,我会打包上传与有志于对apk进行操作的机友分享。主要推荐有三个工具包。
1) apktool
apktool可能是当今最为流行的apk工具包,由解包、打包、签名程序组成。被称之为“apk反编译利器”。去Google一下apktool,有非常多的资源,无论是软件下载,还是使用教程。对非三星的应用程序进行操作,很好用。
打开apktool工具包,看到如下内容:
Akp程序的解包和打包软件由2个程序来完成:apktool.jar 和 。
另外提供一个批处理文件:apktool.bat,其内容为:
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
运行apktools.jar需要java环境(1.6.0版本以上)。apktool.jar用于解包,apktool.jar和联合用于打包。testkey.pk8和testkey.x509.pem是签名程序。
解包命令:
apktool d xxxxxx.apk ABC
这里“d”表示要解码。Xxxxx.apk是要解包的APK文件。ABC是子目录名。解包的文件会放在这个子目录内。
打包命令:
apktool b ABC yyyyy.apk
这里“b”表示要打包,ABC是子目录名,是解包时产生的子目录,用来存放所有解包后的和修改后的文件。yyyyy.apk是打包后产生的新的APK文件。
在上传的apk工具包里,已经另外加了两个批处理文件:Unpack-apk.bat和Repack-apt.bat。前者用于apk的解包过程,后者用于编辑后的文件的打包和签名。把待解包的apk文件放到Unpack-apk.bat的同一个目录里,双击Unpack-apk.bat,apk文件解包开始,产生3个子文件夹,解包后的文件被放在Working_APK文件夹内。详细内容将在第二部分描述。另外,批处理文件允许同时对多个apk文件顺序进行解包和打包。
注意:文件名里不允许有空格,不能有中文。
使用前,要先安装框架文件:apktool if framework-res.apk
如果是三星系统,还要安装:apktool if twframework-res.apk
2) apk manager
apk manager是另一个“apk反编译利器”。它比apktool工具包还要强大些。三星的许多apk系统应用程序用了三星的闭源系统,用apktool可以解包,但是打包不成功。这时,apk manager就好用了。
打开apk manager工具包,看到如下内容。软件都放在other子目录里。运行apk manager要求adb工具包(见下图中的3个adb文件)。把待解包的apk文件放到place-apk-here-for-modding子目录里,双击脚本批处理程序Script.bat,选择选项:9,产生一个子文件夹projects,解包后的文件被放在这个子文件夹内。详细内容将在第二部分描述。
在使用时,有时apktool和apk manager交替使用,一个不行就用另外一个。 所以,在编辑apk应用程序时两者都要掌握。
注意:文件名里不允许有空格,不能有中文。
使用前,要先安装框架文件:apktool if framework-res.apk
如果是三星系统,还要安装:apktool if twframework-res.apk
3) Dex2jar和XJad
该方法不是直接对apk文件进行解包。它是首先提取apk文件内的classes.dex文件,然后使用dex2jar.jar工具包将classes.dex解包成jar文件,再通过XJad 或者其他class反编译工具进行java反编译,最后生成java源文件。
但是,使用这个工具包无法进行classes.dex的还原(当然也无法进行apk的打包)。尽管如此,这个工具包仍然很重要,因为它把classes.dex文件转换成了可以更容易阅读的java源文件。在修改apk应用程序时,必不可少,是一极强的辅助工具。相比之下,apktool和apk manager反编译后得到的是Dalvik 反编译码 (Dalvik opcodes),需要很专业的知识来阅读,很不直观。如果你读懂了java源文件,那修改相对应的Dalvik码不就容易多了吗。
4) 其它工具包简介
此外,还有许多工具包可用。这些也容易在网上到。
a) DoAPK
DoAPK实际上就是apktool工具包。有人把apktool写成了带窗口界面的可执行文件。
b) Google Smali
有两个程序:baksmali.jar和smali.jar。baksmali.jar用来反解析dex和odex文件,得到Dalvik码。然后用smali.jar还原成dex文件。例如,在修改状态栏时间显示颜时,要用的这两个解析程序。
c) AXMLPrinter2.jar
AXMLPrinter2.jar对apk文件内的 l和l进行操作,将XML还原成文本文件,便于阅读。
d) Apkdb
是一个集成apktool,smali,Dex2jar,签名等功能的工具。
e) 其它工具
不再介绍。自己动手到网上去搜索吧。
我把这些收集到的apk工具包打包上传,供你们使用,免得你们来去。
集成Apk工具包下载地址:
u.115/file/clnar7bm
第二部分:三星闭源系统apk文件的处理,和签名
在这一部分,我们要进入实战。首先,利用一个具体的例子来阐述apk工具包的使用,对apk文件进行解包、、打包和签名。然后,我们来对付三星闭源系统的apk程序,达到我们修改、和美化的目的。我们假定所有apk文件都是单个独立文件,不含odex文件(在官版ROM中,通常每个apk都分成两部分,第一部分是apk,第二部分是odex。将它们合并是另一个题目,这里不作叙述)。
1. 配置框架(Framework)环境
在处理APK文件时,apktool需要框架文件(framework-res.apk)来解码和打包。apktool已经包含了标准的框架,所以在大多数APK文件的解包时,不需要另外提供框架文件。但是,某些制造商(例如三星)使用了他们自己的框架文件,为了解包,就不得不从手机中或从ROM中把框架文件(framework-res.apk)提取出来,然后安装到计算机。安装命令是:
apktool if framework-res.apk
安装后就会得到:~\apktool\framework\1.apk
注意:三星系统(例如:I897)有两个框架文件:framework-res.apk和twframework-res.apk。在使用apktool之前,要安装这两个框架文件。安装方法同上:
apktool if framework-res.apk
apktool if twframework-res.apk
安装后就会得到:~\apktool\framework\1.apk和
~\apktool\framework\2.apk。
许多人拿来apktool工具包用,说解不开包,运行出错。原因是没有配置框架环境。
2. akp文件的和修改
我首先来讲对一般的(非三星)apk应用程序进行解包、和打包。为你们方便和叙述目的,我在上传的apktool和apk manager工具包里都带了一个小的apk应用程序SilentBoot_EN.apk。这个程序是“静音启动”,就是通过这个程序来设置开机时是否有开机音乐。我在我的2.3.4 XXJVP ROM里也集成了这个akp程序,现在你们自己来把它一下吧。我们用apktool工具包来做。
步骤如下:
1) apk程序解包首先把SilentBoot_EN.apk复制到Unpack-apk.bat的同一个目录里(我已经放好了)
双击Unpack-apk.bat,apk文件解包开始。DOS窗口出现,显示解包进程和一系列信息,直到解包结束。
解包结束后,在工作目录下产生3个子文件夹:New_APK,Raw_APK和Working_APK。解包了的文件被放在Working_APK文件夹内,原始apk文件(SilentBoot_EN.apk)被复制一份到Raw_APK文件夹保存。见界面截图如下:
在Working_APK字文件夹里产生了一个子夹_SilentBoot_EN.apk,里面存放所有解包后的文件。在_SilentBoot_EN.apk之下有两个文件夹 /res和/smali,还有两个文件l和l。用文本编辑器打开l看看,是不是在第一部分里介绍的内容。你要修改的内容在/res文件夹内。
打开/res文件夹,看到里面有5个子夹,/drawable存放apk应用的图标(Icon),drawable-hdpi存放其它要用的图形文件,/layout是apk的布局文件,/values里是字符文件。apk就是/alues文件夹内l文件的内容。
2) 字符
这里只适用于懂英语的同学。如果你不懂英语,就照表抄课好了。
用文本编辑器打开l,其内容为:
Silent Boot
Enable Silent Boot
Device is muted on shutdown.
Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled.
要汉译的字符是:Silent Boot,Enable Silent Boot,Device is muted on shutdown,Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled。
先别急,我现在来教你怎样处理文件。有两种方法:a) 正规,b) 强制。
a) 正规
一个apk应用在后应该能在英文和中文系统下都能使用。/values目录下的是英文语言包。为了建一个中文语言包,与/values并行创建一个子文件夹:/values-zh-rCN(必须用这个文件名!)。这里values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。
把/values文件夹里的l等语言文件复制进/values-zh-rCN。在我们的例子中,只有l一个文件。
进入/values-zh-rCN,用文本编辑器打开l,然后你就翻译吧,把英文描述译成相应的中文。
例如,我们可以把上面的l文件译成:
静音启动
开启静音启动
关机也是静音
关机不是静音\n如果没有开启静音启动,关机时播放开机音乐。
里面有个操作符“\n”是换行符,迫使换行显示文本内容。之后存盘,用“另存为”(Save As)存成UTF-8格式。这是保持中文文本的格式。
在作工作时,要对l文件进行修改。有时也需要修改其它xml文件,一个一个地认真查看,一个一个地。
b) 强制
所谓“强制”就是不产生/values-zh-rCN文件夹。而是在/values文件夹内把需要的文件都直接译成中文。显然,如果在英文操作系统中没有中文字库的话,强制的apk在英文系统中可能显示乱码。所以,建议养成良好习惯,采用“正规”。
高级内容:以上的是修改l,把英文译成相应的中文就好了,然后打包和签名。但是,在有些apk文件里,所显示的字符文字并不都在xml文件里。apk原作者把某些字符写在代码中。反编译后,存放在/smali文件夹里。一层一层地下去,最后你会看到一大堆Dalvik码文件,都是以.smali为文件扩展名。举一个例子,用文本编辑器打开某个.smali文件,看到:
const-string v5, "ServiceMode"
“ServiceMode”会在apk执行时显示为英文。因此,需要。在I897 ROM里,用工程模式特殊代码看到的多半属于这一类。汉译起来非常花时间。我们要把ServiceMode译成“服务模式”。怎么处理呢?你不能把const-string v5, "ServiceMode"直接改成const-string v5, "服务模式"。打包会失败的。正确的做法是把相应的中文字符用16进制的unicode来表示。例如:把“服务模式”用16进制的unicode表示就是\u670d\u52a1\u6a21\u5f0f 。每一个汉字用4个字符表示,\u表示为16进制的unicode码。好了,正确的汉译是:
const-string v5, "\u670d\u52a1\u6a21\u5f0f "
网上有中文字符与16进制unicode码的对照表或转换工具。我在这部分提供一张转换表供你们使用。见附件。
3) Apk打包和签名
打包操作很简单,没有什么好讲的。照着做就行了。
回到apktool目录,鼠标双击批处理文件Repack-apk.bat,apk文件就打包好了。在Repack-apk.bat批处理中,每个apk文件打包好后就紧跟着进行签名操作。所以,执行完Repack-apk.bat后,打包和签名都完成了。
打包和签名好了的apk文件存放在New_APK文件夹内,文件名加了一个前缀New_。在我们的例子中,所生成的新的apk应用程序为New_SilentBoot_EN.apk。这就是好了的apk程序了。
现在你需要把文件改成你需要的名字:SilentBoot_CN.apk,安装到手机试一下吧!欣赏一下你自己的apk程序!是不是很爽!有成就感吧!
3. 三星akp文件的和修改
好了,有了以上对apk解包、修改()、打包、签名做基础,我们现在来看怎样对三星apk进行操作。我们手里用的是三星I897手机,/system/app目录下的很多apk应用程序都是三星程序,典型的包括framework-res.apk,twframework-res.apk,TouchWiz30Luancher.apk。由于三星采用自己的闭源系统,对其、修改、打包和签名有一定难度,目前还没有发现完全适合于三星apk的专用工具。因此,需要采取特殊手段来达到目的。
apktool对所有三星apk文件都是可以解包的,对某些apk是可以打包签名的,但是,对另外一些apk的打包总是失败。这里需要指出的是,即使你对三星apk文件打包签名成功,这个生成的apk程序也无法在三星手机上运行!原因是三星使用了其闭源的特殊签名。
由于某些三星apk文件无法用apktool进行打包,所以我们在这一节使用功能更强大的apk manager进行解包和打包。在执行apk manager脚本批处理Script.bat时,有很多选项(见下图)。我们用到选项9和11。选项9是反编译(解包),选项11是再编译(打包)。由于三星不承认其它签名,所以这里签名并不重要。但是,如果你在处理非三星的apk文件,那签名还是需要的,要用的选项12和14。
操作步骤:
1)把待解包的apk文件(例如:TouchWiz30Launcher.apk)放到place-apk-here-for-modding子目录里
2)双击脚本批处理程序Script.bat,你会看到上面的界面
3)选择选项9进行解包,回车,开始解包
4)解包结束后,产生一个子文件夹projects,里面有一个字文件夹(TouchWiz30Launcher.apk),解包后的文件被放在这个子文件夹内。
5)选择选项24退出程序
6)按照上一节的方法进入projects/TouchWiz30Launcher.apk文件夹,把l和有关的部分进行了修改
7)修改和结束后,再运行批处理程序Script.bat
8)选择选项11进行打包。需要的时间较长,请耐心等待打包结束
9)打包结束后,在place-apk-here-for-modding文件夹内产生了一个新的未签名的apk文件:unsignedTouchWiz30Launcher.apk
为了在手机上运行apk应用程序,签名是必需的。那怎样对三星apk应用程序进行签名处理呢?一个有效的方法就是借用原来解包前apk文件已经有的签名,把原来的签名与新的编辑内容进行合成。从而,达到我们解包、修改、、打包和“签名”的目的,使新的apk程序可以在三星I897上运行。
合成操作步骤:
1)先用WinRAR打开原始的apk文件TouchWiz30Launcher.apk,里面有3个文件和两个文件夹。在第一部分讲过每一个文件和文件夹的作用。这里不再描述。
2)再用WinRAR打开生成的apk文件unsignedTouchWiz30Launcher.apk。 里面是没有签名文件的,就没有文件夹META-INF,我们也不需要它。
3)从unsignedTouchWiz30Launcher.apk中提取我们编辑过的东西。为此,用鼠标把resources.arsc文件从unsignedTouchWiz30Launcher.apk文件窗口拖进TouchWiz30Launcher.apk的窗口,去覆盖原来的resources.arsc文件。你也可以先把原来的resources.arsc删除,然后再做拖入的动作。
4)出现一个参数窗口。在压缩方式处选择“Store”(存储)。然后按“OK”。
5)退出WinRAR。结束。新的三星apk应用程序就制作好了,签名是利用了原始的签名。文件是TouchWiz30Launcher.apk。
说明:
1)如果修改了/res目录下的内容,在第3步,就复制resources.ars。如果修改了/smali目录下的内容,在第3步,就复制classes.dex。
2)只可以替换这两个文件,别的都不要动。
3)在第4步的压缩方式,一定要选“Store”。
第三部分:介绍apk文件打包解包的各种应用
在第一和第二部分中,我们花了大量的篇幅来介绍apk文件的结构,apk文件的解包、修改、编辑、打包、签名,以及所需要的工具。我写的很累,你们读着一定也会很累。内容很多,篇幅又长。在这一部分里,谈点轻松的来结束第三讲。
为什么要对apk文件进行解包?当然要对其内容进行必要的修改。修改什么呢?在第二讲中,我们对apk进行了。其实只是一个应用而已。下面,根据我的经验和知识来介绍一下apk文件解包和打包的各种应用。一般来说,就是为了修改和美化。更进一步,就是为了定制ROM。
为完整起见,先简要地介绍一下对apk文件的非解包修改问题。也就说,在不使用第一部分的apk解包打包工具的情况下,我们能对apk文件的哪些内容做些修改?用WinRAR打开一个apk文件,你会看到有一个文件夹/res,进去后,你有会看到有一个子文件夹/drawable或多个文件夹。如果有多个子文件夹,之中会有一个/drawable-hdpi。挨个都打开看看。这些子文件夹都是放一些图片和xml文件的。你可以对所有的图片进行删除、替换、添加。如果替换,切记文件名要一致。一个大家都熟悉的例子是替换/修改电池显示图标。但是,你无法对xml进行修改。如果要对文字和其它非图像类内容进行修改,那只能通过解包解码了。
好了。现在我们回到这一部分的主题,来介绍apk文件解包和打包的各种应用。下面几项任务需要对apk文件进行解包和打包。其实我在以前的帖子里介绍过,这里只重复简单介绍一下,请自己去读参考资料和详细的操作方法和教程。
1) apk应用程序
在第二部分详细讲过。再次不再叙述。
2) 修改图标标签
每一个apk文件都有一个“图标标签”。将apk程序安装进手机后,在图标下面显示图标标签文字。这个图标标签的内容是可以修改的。在\res\values下到l,修改其中的一行:
图标标签
例如:静音启动
同理,如果是窗口小插件,要修改widget_name。
3) 去掉apk中的广告
有很多apk应用都带有广告。为了去掉程序中的广告,要修改l文件与广告有关的内容。在/res目录下到文件l。通常在/layout目录下,有时也被放在其它目录下。甚至,有时不存在l文件,广告行被放在其它xml文件内。只能细心逐个文件进行查。无论哪一种情况,查看其内容,你会看到有一项类似的命令如下。这就是广告显示。
将其改为:
可以看到,关键是要把fill_parent改为0.0dip,把wrap_content改为0.0dip,其它内容保持不变即可。这种改法就是不给广告显示空间,当然你就看不到广告了。
4) 修改电池显示精度
在官方I897 ROM里,默认的电池显示精度是5%。我们希望把显示精度增加到1%。这个需要通过修改主题文件framework-res.apk来实现。你们今天ROM里每变化1%电量就显示一次的主题,就是这样做出来的。
修改步骤如下:
(1) 对framework-res.apk进行解包
(2) 修改和增加电池状态图标(可以从其它ROM中提取)
(3) 修改文件stat_l (每隔1%显示一次)
(4) 修改文件stat_sys_l(对应新的充电动画)
(5) 打包
(6) 提取stat_l,stat_sys_l,resources.arsc和一个图标目录:drawable-mdpi
(7) 重新装配framework-res.apk
5) 状态栏信息通知文字颜修改
状态栏信息通知文字颜,是由framework-res.apk文件里res\values下的l文件控制的,所以我们只需修改l文件就可以了。另外,此文件还控制下拉栏的文字颜,可以修改。
用文本编辑器打开l文件,到
#ff000000
将这句修改为:#ffffffff
这状态栏信息通知文字颜由黑改为白。
6) 其它应用
安卓软件签名工具
还有许多应用都与美化修改主题有关,像修改状态栏“时间”的显示颜,步骤繁多,这里就不介绍了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论