第一课】APK应用程序的解包、修改、编辑、打包及应用
【第二课】ROM的提取和RFS文件的解包打包
【第三课】如何制作刷机补丁和CWM刷机包ROM
资料收集作者
你们的好友:恍若·流年
编辑时间:2012年10月12日
=============================================================================
【第一课】APK应用程序的解包、修改、编辑、打包及应用 
=============================================================================
这些内容实际上构成了一个很大的课题,用简短的文字无法描述清楚。我准备用三个部分来介绍如下内容:
   第一部分:apk应用介绍,解包和打包,常用软件工具
   第二部分:apk文件的处理,汉化和签名
   第三部分:介绍apk文件打包解包的各种应用
第一部分是基础知识,第二部分进入实战修改apk应用程序,最后在第三部分来介绍APK应用程序的修改和编辑的各种各样实际应用。
一:apk应用介绍,解包和打包,常用软件
相信每为机友对APK文件都不陌生。你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具、插件、好玩的游戏等等。。。尤其是最近关于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文件通常有下列内容组成:
   AndroidManifest.xml  程序全局配置文件
   classes.dex                Dalvik字节码
   resources.arsc           编译后的二进制资源文件
   META-INF\                 该目录下存放的是签名信息
   res\                           该目录存放资源文件
   assets\                      该目录可以存放一些配置文件

下面对这些文件和目录做些基本的注释和介绍:
• AndroidManifest.xml
   该文件是每个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 和 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联合用于打包。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文件内的 AndroidManifest.xml和main.xml进行操作,将XML还原成文本文件,便于阅读。
d) Apkdb
    是一个集成apktool,smali,Dex2jar,签名等功能的工具。
e) 其它工具
    不再介绍。自己动手到网上去搜索吧。

我把这些收集到的apk工具包打包上传,供你们使用,免得你们找来找去。

集成Apk工具包下载地址:
http://115.com/file/e7zeohqd#
APK-Tools修改工具集合.rar

第二部分: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

2. akp文件的汉化和修改
我首先来讲对一般的apk应用程序进行解包、汉化和打包。为你们方便和叙述目的,我在上传的apktool和apk manager工具包里都带了一个小的apk应用程序SilentBoot_EN.apk。这个程序是“静音启动”,就是通过这个程序来设置开机时是否有开机音乐。现在你们自己来把它汉化一下吧。我们用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,还有两个文件AndroidManifest.xml和apktool.yml。用文本编辑器打开AndroidManifest.xml看看,是不是在第一部分里介绍的内容。你要修改的内容在/res文件夹内。

打开/res文件夹,看到里面有5个子夹,/drawable存放apk应用的图标(Icon),drawable-hdpi存放其它要用的图形文件,/layout是apk的布局文件,/values里是字符文件。汉化apk就是汉化/alues文件夹内string.xml文件的内容。
2) 字符汉化

这里只适用于懂英语的同学。如果你不懂英语,就照表抄课好了。

用文本编辑器打开string.xml,其内容为:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="app_name">Silent Boot</string>
    <string name="labelEnabled">Enable Silent Boot</string>
    <string name="textEnabled">Device is muted on shutdown.</string>
    <string name="textDisabled">Device is NOT muted on shutdown.\nBoot sound   is played if the device is shut down with sounds enabled.</string>
</resources>
要汉译的字符是: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文件夹里的strings.xml等语言文件复制进/values-zh-rCN。在我们的例子中,只有strings.xml一个文件。
进入/values-zh-rCN,用文本编辑器打开strings.xml,然后你就翻译吧,把英文描述译成相应的中文。
例如,我们可以把上面的string.xml文件译成:
<?xml version="1.0" encoding="UTF-8"?>

转载于:https://blog.51cto.com/jexon/1047267

Android改包1相关推荐

  1. android改包名

    改包名方法: 打开android studio app-java-com.XXXX.XXX  右键 refactor-rename-显示最后一个单词,改掉这个词,refactor 底栏出现 提示一系列 ...

  2. android工程改包名及多工程设置

    android工程更改包名: 1. 先改manifest中的包名 2. src目录上点右键,选择refactor->rename,改包名,然后选择continue. 3. 改了包名之后,要注意包 ...

  3. Android修改包名

    1.直接Refactor ---> rename 2.修改build.gradle ---> applicationId 为新包名 3.修改后要注意XML中自定义控件的全名是否也改变了 参 ...

  4. 详述Android马甲包

    一.何为马甲.作用 简单的说,一句话就是:APP的小号. 区别: 1. 马甲icon和名字不同,内容和主号基本一样. 2. 有的是针对不同的目标用户,马甲采用主App的部分功能,同时具特别的功能和内容 ...

  5. Android抓包方法之Win7笔记本Wifi热点+WireShark工具

    Android抓包方法 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等. 第 ...

  6. Android aar 包修改源代码和布局资源id

    Android aar 包修改源代码和布局资源id 原文地址 https://www.jianshu.com/p/bdb62f36bc62 注:本项目基于 Android Studio 讲解,Inte ...

  7. Android 抓包 Fiddler Https443问题

    Android 抓包 Fiddler Https443问题 简单的Fiddler配置在这里不说了,可以查到 解决Android 手机App抓包出现443问题 方法一: 把app的targetSdkVe ...

  8. IOI车机系统刷机和改包笔记

    前言 我自己21年买的雪佛兰探界者SUV,没想到到了23年,车机系统上的高德导航还是3.2版本,而官方的已经7.1. 中间出去玩,在高速上被车机上的高德坑了好多次,简直无力吐槽.单纯使用手机Carpl ...

  9. Android引包出现Duplicate class com.xxx.xxx found in modules错误

    方法一:改依赖库的版本 其实就是依赖的包版本不一样,产生了冲突,把所有依赖的库改成版本一致的就可以了. 注意:如果有多个library的引用,并且各自引入了 so库文件,编译时发生了so重复引入的问题 ...

  10. Android 解析包出错问题

    2019独角兽企业重金招聘Python工程师标准>>> Android 解析包出错问题 app上线后经常会遇到安装包解析出错问题,今天刚好做个不完整的总结, 解决问题 检测系统是否开 ...

最新文章

  1. 新能源汽车电驱系统行业深度报告
  2. RocketMQ 消息丢失场景分析及如何解决!
  3. python——图像处理3(均值偏移、改变亮度、图像修复、图像融合)
  4. Jmeter性能测试之后置处理器Json提取器的使用
  5. Ubuntu修改DNS服务器
  6. 关于textarea包在div的自适应问题
  7. 《中国人工智能学会通讯》——6.25 日落的教训
  8. 腾讯光子《黎明觉醒》技术美术负责人:如何制作超真实的开放世界?
  9. 【音视频安卓开发 (一)】AndroidStudio项目配置权限、jni库路径、ABI、Cmake
  10. mysql数据库sql语句优化
  11. odoo10参考系列--操作(Actions)
  12. 蓝桥杯 PREV-8 历届试题 买不到的数目
  13. 阿里云数据盘分区并挂载
  14. 计算机桌面空白地方鼠标右击没有属性选项,电脑右键没有属性选项_电脑右键没有显卡属性...
  15. 易康EPS2的使用(一)
  16. 常见蓝屏代码解释及解决方法
  17. 盘点好用的 Markdown 编辑器
  18. 流程编排框架LiteFlow详解
  19. 修改Element-ui表格样式
  20. MSYS+MinGW64环境的搭建

热门文章

  1. npcap关闭_Npcap.资料
  2. 基于openoffice+pdfobject.js实现文档上传以及在线预览功能
  3. vnc远程访问linux服务器,如何通过 VNC 远程访问 Linux 虚拟机
  4. 鸟哥linux——Ext2文件系统基本原理
  5. 【 PID 算法 】PID 算法基础
  6. 管理距离 动态协议端口号 协议号
  7. 成语接龙 | c++ | 建图和BFS
  8. 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——第2章 生产模式和计划策略 2.1 计划策略与需求类型总览...
  9. 【信号与系统】笔记合集,你确定不收藏吗?我已经收藏了
  10. 一个简单的HTML网页——传统节日春节网页(HTML+CSS)