2026年10月29日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
JK-0017743
Lv7可吟七步诗等级图标等级图标等级图标等级图标等级图标
勋章勋章
帖子
67
回复
476
积分
7,293
注册
2011-03-06
[怀旧国机]

【Being出品】APK文件的解包打包和修改...

[复制链接]
查看 594 回复 4
楼主 发表于 | 只看该作者
17 人收藏

注:本文来源于网络分享给大家学习研究之用,(本文件由PDF转换而来)有看不清的的下载附件。

APK文件的解包打包和修改

相信每位玩机的人对APK文件都不陌生。你可能每天都与APK文件打交道,无论是

安装和卸载有用的应用工具、插件、好玩的游戏等等。。。你可曾知道这些每天

都伴随着你的 APK文件是什么吗?怎样对它们作些修改呢?比如说:对英文版进

行汉化、修改功能、修改文字描述、去掉广告等等。

本文介绍

APK的基本知识、结构、APK文件的解包、打包及签名,以及对APK文件的常规修改

。

1.1.1.1.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 *utes的全称,即 Android Dalvik执行程序,并非 Java ME

的字节码而是 Dalvik字节码。

resources.arsc 编译后的二进制资源文件。

META-INF目录 META-INF目录下存放的是签名信息,用来保证 apk包的完整性和系

统的安全。在eclipse编译生成一个 apk包时,会对所有要打包的文件做一个校验

计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意

替换。比如拿到一个 apk包后,如果想要替换里面的一幅图片,一段代码,或一

段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给

病毒感染和恶意修改增加了难度,有助于保护系统的安全。

.

res目录

res目录存放资源文件。包括图片,字符串等等。

解包后,几乎所有可能的修改和编辑工作基本都在这里。

.

assets目录

assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过

相关的 API获得。

2.2.2.2.A

APK文件的解包和打包

APK文件是用专业软件eclipse编译生成的文件包。在网上可以找到许多软件来对

APK的内容进行反编译,例如:可以通过AXMLPrinter2工具和命令:

java -jarAXMLPrinter2.jarAndroidManifest.xml解开在 apk中的

AndroidManifest.xml。最近,业界有一个功能强大的解包打包工具包apktool,

可以在Windows下用来方便快速地对APK文件进行解包和打包,给修改和编辑工作

带来许多方便。下面来介绍它的使用。

1)APKtool软件包APKtool软件包有

2个程序组成:apktool.jar和aapt.exe

另外提供一个批处理文件: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和 aapt.exe联合用于打包。

2)APK文件的解包

下面以解开

Contacts.apk为例。首先把

Contacts.apk复制到当前工作目录下(例:Test)。在DOS下打入命令

apktool d Contacts.apkABC这里“d”表示要解码。Contacts.apk是要解包的APK

文件。

ABC是子目录名。所有解包的文件都会放在这个子目录内。

3)APK文件的打包

在

DOS下打入命令

apktool

bABC

New-Contacts.apk

这里“b”表示要打包ABC是子目录名,是解包时产生的子目录,用来存放所有解

包后的和修改后的文件。 New-Contacts.apk是打包后产生的新的APK文件。

4)

Framework框架文件

在解开APK文件时,apktool需要框架文件(framework-res.apk)来解码和打包。

Apktool已经包含了标准的框架,所以在大多数 APK

文件的解包时,不需要另外提供框架文件。但是,某些制造商使用了他们自己的

框架文件,为了解包,就不得不从手机中把框架文件(framework-res.apk)提取

出来,然后安装到计算机。安装命令是:

apktool if framework-res.apk

安装后就会得到:~\apktool\framework\1.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\%%i\dist\*.apk %%i && ren %%i New%%i && move New%%i

Modified_Signed_Files && @echo %%i Complete repacking and Signing! &&

cdModifying_Files

3.3.3.3.应用实例:

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程序安装进手机后,在图标下面显

示图标标签文字。这个图标标签的内容是可以修改的。

在\res\values下找到

strings.xml,修改其中的一行:

<string

name=“app_name“>图标标签

</string>

例如:

<string

name=“app_name“>静音启动

</string>

同理,如果是窗口小插件,要修改widget_name。

注意:

system/app下的apk不宜修改,因为要同时修改对应的odex文件。

3)去掉

APK中的广告

有很多APK应用都带有广告。为了去掉程序中的广告,要修改main.xml文件与广告

有关的内容。在\res目录下找到文件main.xml。

通常在 \layout目录下,有时也被放在其它目录下。甚至,有时不存在main.xml

文件,广告行被放在其它xml文件内。只能细心逐个文件进行查找。无论哪一种情

况,查看其内容,你会看到有一项类似的命令如下。这就是广告显示。

<com.admob.android.ads.AdView

android:id=”@id/ad”

android:layout_width=”fill_parent”

android:layout_height=”wrap_content”

admobsdk:backgroundColor=”#ff000000″

admobsdk:textColor=”#ffffffff”

admobsdk:keywords=”Android

application”

/>

将其改为:

<com.admob.android.ads.AdView

android:id=”@id/ad”

android:layout_width=”0.0dip”

android:layout_height=”0.0dip”

admobsdk:backgroundColor=”#ff000000″

admobsdk:textColor=”#ffffffff”

admobsdk:keywords=”Android application”

/>

可以看到,关键是要把

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文件里

res\values下的colors.xml文件控制的,所以我们只需修改colors.xml文件就可

以了。另外,此文件还控制下拉栏的文字颜色,可以修改。

用文本编辑器打开

colors.xml文件,找到

<color

name=“hw_statusbar_time“>#ff000000</color>

将这句修改为:

<color

name=“hw_statusbar_time“>#ffffffff</color>

这状态栏信息通知文字颜色由黑色改为白色。

附件

zipapk文件的解包打包和修...改已失传147.5KB
登录回复
JK-0077447
Lv2独赏二月雪等级图标等级图标
帖子
19
回复
251
积分
4,984
注册
2011-10-11
1 楼

呵呵,中了五百万!

JK-0107989
Lv1韶华一笑间等级图标
帖子
18
回复
329
积分
2,676
注册
2012-05-16
2 楼

两手一抖,绝币到手!

JK-0107989
Lv1韶华一笑间等级图标
帖子
18
回复
329
积分
2,676
注册
2012-05-16
3 楼

两手一抖,绝币到手!

JK-0008801
王者却具王侯心等级图标等级图标等级图标等级图标
勋章勋章勋章勋章勋章勋章勋章勋章+3
帖子
184
回复
2,223
积分
3,915
注册
2011-02-06
4 楼

呵呵,中了五百万!

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块