添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

APK是个什么东西? “application package file”

简单来说就是把编译后的文件和资源文件打包到一起,格式为zip的容器。我们简单的了解下即可。

通常包含以下目录和文件:

1. META-INF\                 存放签名密钥;

2. res\                             存放没有编译到resources.arsc的资源文件,如图片 ;

3. lib\                              存放特定软件编译代码,共享库文件;

4. AndroidManifest.xml  程序全局配置文件,描述程序名称、版本、访问权限、应用程序调用库文件 ;

5. classes.dex                  主要运行文件

6. resources.arsc              预编译资源,如二进制xml。

题外话:汉化apk多是修改resources.arsc,个别还需要修改classes.dex。classes.dex很有意思,由java源码编译后的.class再编译为安卓能懂的Dalvik虚拟机文件,加上了个dex就变成了classes.dex了。

为什么要编译APK?

通过使用apk编译工具将apk文件中的源文件和资源反编译出来,将得到的源文件和资源文件进行处理后再进行编译,以达到个性化定制,汉化等目的。

APK工具的使用

工欲善其事必先利其器。我们先来介绍一下编译AKP文件的工具APKtool。Apktool是一个反编译和回编译apk文件的工具,有了它我们就可以打造自己的apk文件。

首先我们可以用winrar打开apk文件,看似好像是一个普通的压缩包,但实际上远非这么简单。WINRAR解压文件后,查看图片似乎没有什么问题,但当你查看xml文件的时候就会发现—“乱码”。

apk是经过程序编译后的文件,不能单纯解压后进行修改。当然主要针对classes.dex、resources.arsc ,RES目录下的图片等资源文件一般可不用反编译直接替换。

要想修改APK文件,我们首先要进行反编译。进行反编译工作前,我们先来构筑JAVA运行环境。

一,构筑运行环境

运行APKtool,首先要下载JAVA SDK 1.6,安装后设置环境变量, JDK-6u37 32位下载地址

[GUIDE] How To Install and Use Android SDK

Windows XP:右键点击“我的电脑”,点击“属性”,选择“高级”选项卡,点击“环境变量”

Windows 7:右键点击“我的电脑”,点击“高级系统设置”,点击最下面的“环境变量”

在系统变量下

变量名JAVA_HOME

变量值C:\Program Files\Java\jdk1.6 此处路径是按照你的JAVA安装目录为准。

变量名CLASSPATH

变量值 .;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar 注意前边的点别丢了。

编辑PATH变量

在PATH变量后面添加 ;%JAVA_HOME%\bin  分号是为了与前边已有项隔开

然后点击开始菜单,点击“运行”,输入CMD,出现DOS窗口

输入java和javac,如果显示参数提示,环境设置就OK了。

可参考 java环境变量配置

二,反编译和回编译

我们来看apktool,完整的apktool包括3个文件,aapt.exe ;apktool.bat;apktool.jar

可将这3个文件放入c:\windows目录下方便调用。

可在C盘下建立APK文件夹方便操作,把需要修改的apk文件和系统框架framework-res.apk一起放入,如有副框架也需放入(如不清楚可把system/framework下所有apk放入)。

运行中输入cmd打开DOS窗口,输入命令进入新建apk文件夹

cd apk

C:\apk>

1.安装框架

apktool if framework-res.apk

完成后显示 I: Framework installed to: C:\Documents and Settings\Administrator\apktool\framework\1.apk

apktool已经包含了标准框架,大多数APK解包时不需要安装框架,但某些制造商(如三星、HTC)使用了自己的框架文件,如果要修改手机system/app下系统文件必须加载框架,否则回编译会出错。框架文件framework-res.apk在手机system/framework/下,应加载此文件夹下所有apk文件(一般1到2个)。华为U8825D也有副框架不过一般没用。副框架加载一般会生成名为2.apk的文件。

下面以修改systemui.apk为例

2.反编译命令

Apktool d systemui.apk

会在当前目录下生成systemui目录,反编译后的文件就在这里。目录名称可自定,

如Apktool d systemui.apk 123      123为生成目录

3.回编译命令

Apktool b systemui 456.apk

回编译systemui目录,然后生成456.apk文件,名称自定。

此时已生成456.apk为编译后文件,用winrar打开后发现与原文件比较缺少META-INF目录,此目录包含apk签名文件,没有被签名的程序,系统将不能安装。只有相同签名的程序,才能替换升级。

为了不破坏签名文件,我们用winrar打开原apk和修改后的apk(不要解压出来),将resources.arsc 文件拖回原apk窗口覆盖源文件,压缩模式选择储存。将classes.dex也拖回覆盖,压缩模式选择标准。如果修改了图片等资源文件可将res文件夹拖回覆盖,关闭winrar完成对APK的修改。

补充:一般res目录可删掉然后把处理后的res目录选择储存模式拖回原apk,但其中的 .9.png 格式比较特殊,会由aapt进行编译,不可随意替换。另外反编译后也不要替换“AndroidManifest.xml” 否则容易出错。

附:为什么要签名?

每个应用都有一个唯一合法的ID,这就签名,签名可以保证软件升级的一致性,使用相同签名的应用可以覆盖安装,不一致的签名将无法共享使用数据,无法覆盖安装,这样可防止篡改,保护开发者利益。但签名只能保证检测到修改,并不能阻止你修改。

三,zipalign优化

使用zipalign优化你的APK文件,可以减少运行内存RAM的占用。

如果你下载过Android SDK Tools,此文件位于android-sdk-windows\tools目录下

zipalign.exe -v 4 你的apk文件

参数v:详细输出。 参数4:对齐为4字节。

zipalign能够确保apk文件中未压缩的数据在4个字节边界上对齐,这样android系统就在读取资源上获得较高的性能,从而减少RAM占用,但文件大小一般会有所增加。

如果对APK进行签名,那么在签名后才可进行zipalign优化。

四,版本选择及工具下载

网上有不少集成的工具,可反编、回编、签名、优化,相当方便。但掌握命令行模式将会让我们打好基础,出错也比较好找原因。编译framework-res.apk框架尤其推荐命令行模式。

如使用集成的工具,可自行将aapt.exe和apktool.jar替换为最新版,一般没有问题。提示:系统apk无需自己签名,用winrar替换回去可保留原文件签名,属于只认签名不认人的类型。

反编译也不是一定保证成功,华为自带的框架和系统文件就有点问题,可到找修改好能运行的拿来修改,当然修改过的出问题的几率也大。推荐用BCompare等比较工具比较文件差异,这工具相当方便。

网上有很多apktool的版本,当初找的我头晕眼花,也没人说下原来这货是有官网的,X,最新版是1.5,网上流传多是1.43。

Apktool--- XDA论坛发布地址 GOOGLE地址

aapt.exe和 zipalign.exe是Android SDK tools自带,可自行更新官方版,也可于XDA论坛下载作者修改版。(修改版个头几乎是原版10倍)

附录:ODEX   “optimized Dalvik executable”

classes.dex是apk文件中的关键执行文件," odex "化就是将其预先解出并优化为.odex文件,并将原apk中classes.dex文件删除,这样可以加快系统引导进程和与预载入部分应用数据。

system/app/Phone.apk

system/app/Phone.odex

如上所示phone.apk存在一个同名的.odex文件,即表明这个apk的人生已经不完整了。要编译这样的apk,需先用工具将phone.odex转回classes.dex并和phone.apk合体为完整的phone.APK才可进行。

"odex"化常见于官方ROM,华为U8825D没有所以不需要这一步,故文章中省略了APK合并过程。

将分离的.odex文件还原为classes.dex,并将其放回apk文件,这个过程称为" Deodex "。合体为完整的apk文件后才可正常编译。

Deodex可使用的工具 smali 及 baksmali

命令行deodex

Manually Deodexing (Windows/Linux/OSX)
以上面的phone.apk , phone.odex 为例
电脑上新建一个非中文目录,将手机中/system/framework下的所有文件,包括apk、jar什么的都复制进去,因为deodex时需要系统框架,但其实需要的就5,6个而已,但记住名字太麻烦不如都拖进去吧。baksmali.jar 和 smali.jar也复制进去。
第一步 java -jar baksmali.jar -x phone.odex 默认会生成out目录,这个不用管。网上很多教程里是这个样子“baksmali-1.2.2.jar”,开始我以为-1.2.2是参数其实是版本号,把他改名为baksmali.jar方便些。

第二步 java -jar smali.jar out -o classes.dex -o参数后接的是自定义名称,如果没有-o参数,默认生成out.dex。

然后将classes.dex拖入残疾的phone.apk,储存格式选标准,然后zipalin处理下完成了。剩下的你自然知道怎么做了。

When deodexing pre-ICS odex files, you must use the new --api-level/-a option to specify the api level

附dex2jar工具

命令行dex2jar [classes.dex]

生成classes.dex.dex2jar.jar在classes.dex所在目录

jd-gui

用jd-gui打开classes.dex.dex2jar.jar便可看到源代码
万能 apk 签名 工具( APK 文件 修改 工具)V1.00 绿色版 使用 万能 apk 签名 工具,自己定制个性的rom 就 轻而易举了!用的这个 签名 成功,然后将 apk 安装到了模拟器中。用的时候很简单,选择 apk 包,然后选择 签名 就可以。 运行它,对rom里的应用程序增减, 美化 ! 1.有了这个软件,可以自己 修改 美化 APK 文件 2.用WINRAR打开 APK 文件,将自己的图片图标放进替换原有的,然后用本软件制作 签名 ,然后安装进 Android 。 3.下载别人制作好的ROM,自己精简删除,或者添加 APK 文件。 4.用本软件给 ROM 制作 签名 ,然后刷机
本贴来源于bbs.mfunz.com/,非本人原创,只是感觉很不错,就转过来,给有需要的朋友参考 也许许多人都曾经想过要 修改 APK 自己DIY,但不知道怎么下手,其实要 修改 APK 并没有想象中的那样复杂,这个虽不能让你成为高手(那要有程序基础才可能),但至少入门是没有问题的,涵盖了大部分的东西,全方位step By step的教你怎么弄这些东西! 一、 APK 文件结构介绍 二、 JAVA
前言: 因公司安全要求对 apk 进行加固处理,加固后需对应用进行重新 签名 签名 步骤: 1、将加固后的 apk 文件后缀改成 zip 格式,打开 zip 删除“MEAT-INF”整个文件夹,然后将后缀改为 apk 文件; 2、将jks 签名 证书改成keystore格式文件,如果文件本身是keystore格式文件忽略该步骤! ①进入 签名 证书文件目录,打开cmd命令; ②执行以下命令先将jks文件转成p12格式文件; 使用 bandi zip 等软件直接打开 apk ,进行需要的 修改 ,然后把META-INF文件夹中的xxx.RSA、xxx.SF和xxx.MF都删掉 或者解压 apk 到一个文件夹中进行 修改 并按照上述操作删除文件后,然后压缩成 zip 格式,压缩完成后把压缩文件后缀改为 apk 重新打包 apk 执行命令(需要配置好 java 环境,windows也可以直接执行) jarsigner -ve...
【中山小学竞赛2016】切蛋糕 时间限制: 1000 ms 空间限制: 262144 KB 题目描述小明今天生日,邀请了一些朋友过来开生日会。妈妈专门去买了一个大蛋糕,蛋糕为一个n*m的矩 SVD分解 opencv实现 【中山小学竞赛2016】切蛋糕 时间限制: 1000 ms 空间限制: 262144 KB 题目描述小明今天生日,邀请了一些朋友过来开生日会。妈妈专门去买了一个大蛋糕,蛋糕为一个n*m的矩 SVD分解 opencv实现