首页 收藏 QQ群
 网站导航
开启辅助访问

QQ登录

只需一步,快速开始

扫一扫,访问微社区

立即注册 找回密码
查看: 5811|回复: 48
[经验&教程]

APK文件修改解包打包

  [复制链接]
发表于 2014-4-12 16:05 | 显示全部楼层 |阅读模式
前言:相信每位玩机的人对APK文件都不陌生。你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具、插件、好玩的 游戏等等。。。你可曾知道这些每天都伴随着你的APK文件是什么吗?怎样对它们作些修改呢?比如说:对英文版进行汉化、修改功能、修改文字描述、去掉广告 等等。本文介绍APK的基本知识、结构、APK文件的解包、打包及签名,以及对APK文件的常规修改。

一、APK文件简介
  APK 是Android Package的缩写,即即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk。APK文件是用专 业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件直接传到Android手机中执行即可安装。 APK文件其实就是zip格式,但其扩展名被改为apk,用解压软件可以直接打开。通过WinRAR或UnZip解压后,你会看到有几个文件和文件夹。一 个典型的APK文件通常有下列内容组成:
AndroidManifest.xml 程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 编译后的二进制资源文件
META-INF 该目录下存放的是签名信息
res 该目录存放资源文件
assets 该目录可以存放一些配置文件

下面对这些文件和目录做些基本的注释和介绍。
AndroidManifest.xml
该文件是每个应用程序都必须定义和包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。需要解包后才能加以阅读。
classes.dex文件
classes.dex是java源码编译后生成的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
resources.arsc
编译后的二进制资源文件。
META-INF目录
META- INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算, 并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
res目录
res目录存放资源文件。包括图片,字符串等等。
解包后,几乎所有可能的修改和编辑工作基本都在这里。
assets目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。

二、APK文件的解包和打包
  APK 文件是用专业软件eclipse编译生成的文件包。在网上可以找到许多软件来对APK的内容进行反编译,例如:可以通过AXMLPrinter2工具和命 令:java -jar AXMLPrinter2.jar AndroidManifest.xml 解开在apk中的AndroidManifest.xml。最近,业界有一个功能强大的解包打包工具包apktool,可以在Windows下用来方便快 速地对APK文件进行解包和打包,给修改和编辑工作带来许多方便。下面来介绍它的使用。

1) APKtool软件包
APKtool软件包有2个程序组成:apktool.jar 和 aapt.exe
另外提供一个批处理文件:apktool.bat,其内容为:
java -jar "%~dp0apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
运行apktools.jar需要java环境(1.6.0版本以上)。
apktool.jar用于解包,apktool.jar和aapt.exe联合用于打包。

2) APK文件的解包
下面以解开Contacts.apk为例。首先把Contacts.apk Copy到当前工作目录下(例:Test)。在DOS下打入命令
apktool d Contacts.apk ABC
这里“d”表示要解码。Contacts.apk是要解包的APK文件。ABC是子目录名。所有解包的文件都会放在这个子目录内。

3) APK文件的打包
在DOS下打入命令
apktool b ABC New-Contacts.apk
这里“b”表示要打包
ABC是子目录名,是解包时产生的子目录,用来存放所有解包后的和修改后的文件。
New-Contacts.apk是打包后产生的新的APK文件。

游客,如果您要查看本帖隐藏内容请回复



5) 解包、解包和签名批处理
在实际使用时,可能对多个APK文件进行处理。方便的做法是写成批处理文件。打包和签名可以一次完成。
解包批处理命令:
for %%i in (*.apk) do java -jar apktool.jar d %%i _%%i && move _%%i Modifying_Files && copy %%i Backuped_Raw_Files && @echo File [%%i] unpacking process is completed!
打包和签名批处理命令:
for /d %%i in (*) do cd.. && java -jar apktool.jar b Modifying_Files%%i && java -jar signapk.jar testkey.x509.pem testkey.pk8 Modifying_Files%%idist*.apk %%i && ren %%i New%%i && move New%%i Modified_Signed_Files && @echo %%i Complete repacking and Signing! && cd Modifying_Files

三、应用实例:APK解包后的编辑和修改
  为什么要对APK文件进行解包?当然要对其内容进行必要的修改。修改什么呢?通常,如果只是对图像进行替换,没有必要进行解包和打包。用WinRAR打开 APK文件,直接做替换就可以了。但是,如果要对文字和其它非图像类内容进行修改,那只能通过解包解码了。下面几项任务需要对APK进行解包和打包。这里 只作大概介绍,请自己去找详细的操作方法和教程。

1) 汉化APK软件
在 res文件夹中,我们可以看到有很多values-***的文件夹,这就是语言包。values是英文语言包,values-zh是中国地区语言包(包含 港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。除此以外,其它地 区的语言包都是精简的对象,可以不过多了解。
在values文件夹里,通常有arrays.xml、strings.xml等语言文件,要作汉化就要对这些文件进行修改。有时也需要修改其它xml文件,一个一个地认真查看。

2) 修改图标标签
每一个APK文件都有一个“图标标签”。将APK程序安装进手机后,在图标下面显示图标标签文字。这个图标标签的内容是可以修改的。在 esvalues下找到strings.xml,修改其中的一行:
图标标签
例如:静音启动
同理,如果是窗口小插件,要修改widget_name。
注意:system/app下的apk不宜修改,因为要同时修改对应的odex文件。

3) 去掉APK中的广告
有 很多APK应用都带有广告。为了去掉程序中的广告,要修改main.xml文件与广告有关的内容。在 es目录下找到文件main.xml。通常在 layout目录下,有时也被放在其它目录下。甚至,有时不存在main.xml文件,广告行被放在其它xml文件内。只能细心逐个文件进行查找。无论 哪一种情况,查看其内容,你会看到有一项类似的命令如下。这就是广告显示。

将其改为:

可以看到,关键是要把fill_parent改为0.0dip,把wrap_content改为0.0dip,其它保持不变即可。这种改法就是不给广告显示空间,当然你就看不到广告了。

4) 修改显示电池为1%精度
在XT502上,默认显示只有7档: 0%,10%,20%,40%,60%,80% 和100%。通过修改framework-res.apk,可以改变显示精度。但是在XT502上,实践证明最好可能达到的现实精度只有10%。修改工作如下:
(1) 对framework-res.apk进行解包
(2) 修改和增加电池状态图标
(3) 修改文件stat_sys_battery.xml
(4) 修改文件stat_sys_battery_charge.xml
(5) 打包
(6) 提取stat_sys_battery.xml,stat_sys_battery_charge.xml,resources.arsc和一个图标目录:drawable-mdpi
(7) 重新装配framework-res.apk

5) 状态栏信息通知文字颜色修改
状态栏信息通知文字颜色,是由framework-res.apk文件里resvalues下的colors.xml文件控制的,所以我们只需修改colors.xml文件就可以了。另外,此文件还控制下拉栏的文字颜色,可以修改。
用文本编辑器打开colors.xml文件,找到
#ff000000
将这句修改为:#ffffffff
这状态栏信息通知文字颜色由黑色改为白色。

发表于 2014-4-21 19:23 | 显示全部楼层
试试啊
回复 支持 1 反对 0

使用道具 举报

头像被屏蔽
发表于 2014-4-20 17:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 1 反对 0

使用道具 举报

发表于 2014-4-12 16:38 | 显示全部楼层
楼主用心了,内容非常精彩。
回复 支持 1 反对 0

使用道具 举报

发表于 2014-4-12 16:06 | 显示全部楼层
顶起顶起顶起
回复 支持 1 反对 0

使用道具 举报

发表于 2014-4-24 22:00 | 显示全部楼层
正需要啊,感谢楼主无私分享!
回复 支持 反对

使用道具 举报

发表于 2014-4-24 22:00 | 显示全部楼层
正需要啊,感谢楼主无私分享!
回复 支持 反对

使用道具 举报

发表于 2014-4-24 22:00 | 显示全部楼层
正需要啊,感谢楼主无私分享!
回复 支持 反对

使用道具 举报

发表于 2014-4-24 22:29 来自ZNDS手机版 | 显示全部楼层
;-);-)
回复 支持 反对

使用道具 举报

发表于 2014-4-26 06:21 | 显示全部楼层
要看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐应用 上一条 /5 下一条

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 浙ICP备14000780号 )

增值电信业务经营许可证:浙B2-20150411 丨 浙公网安备 33010802006145号

浙网文(2016)6491-366号 | GMT+8, 2017-9-21 11:30 , Processed in 0.066402 second(s), 15 queries , MemCache On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2017 ZNDS.Com

快速回复 返回顶部 返回列表