Apktool(3)——Apktool的使用
一.apktool的作用
安卓应用apk文件不仅仅是包含有resource和编译的java代码的zip文件,如果你尝试用解压工具(如好压)解压后,你将会获得classes.dex和resource.arsc等文件。但这些文件对我们来说一无用处。你可以尝试打开AndroidManifest.xml:
如果我们有了apktool:输入apktool d testapp.apk
再打开AndroidManifest.xml:
除了这些,我们还获得了该apk的其他有用资源。
二.apktool命令相关选项(options)说明
1.概要
使用:apktool
(1)-version,--version
查看apktool版本号。
(2)-v,--verbose
使用apktool命令时输出详细内容,该参数必须作为第一个参数。
(3)-q,--quiet
隐藏输出(quiet output),即输出是不显示详细信息,该参数必须作为第一个参数。
(4)-advance,--advances
输出更详细的信息。
2.反编译(decode)
使用:apktool d testapp.apk
(1)--api
产生smail文件的api等级。(??)
(2)-b,--no-debug-info
阻止baksmail写出debug信息。
(3)-d,--debug
在debug模式下decode apk。
(4)--debug-line-prefix
在debug模式下decode时,smali中有行号前缀。
(5)-f,--force
强制删除目标目录,如在再次decode时,删除已经存在的文件夹。强制覆盖存在。
(6)--keep-broken-res
如果存在类似这样的错误:Invalid Config Flags Detected. Dropping Resouerces…,如果加上该选项,则仍然能够通过decode,但需要手动修改文件夹中报错的问题。
(7)-m,--match-original
尽量去保持跟原文件一致或接近,但不能够重新编译打包(rebuild)。
(8)-o,--output <dir>
apk反编译后输出到指定目录
(9)-p,--frame-path <dir>
指定framework文件储存的位置。
(10)-r,--no-res
阻止反编译resource,不修改resources.arsc,若仅仅修改java(smail),建议使用该选项。
(11)-s,--no-src
阻止dex文件分割,在build时仅仅移动classes.dex,若需要快速打包,建议使用该选项。
(12)-t,--frame-tag <TAG>
给生成的framework文件打上标识。
2.编译(rebuild)
使用:apktool b apptest
(1)-a,--aapt
从特殊的位置load appt,不在依赖path。
(2)-c,--copy-original
复制原始的AndroidManifest.xml 和 META-INF文件到apk,可用于保持签名。
(3)-d,--debug
在debug模式下打包。
(4)-f,--force-all
在打包时重写已经存在的文件,强制覆盖。
(5)-o,-output <file>
输出apk的位置和名字。
(6)-p,--frame-path <dir>
保存framework文件到指定目录。
三.重要补充
1.framework文件
一般来说,在用apktool反编译前不需要做其他任何事情,然而有些厂商,如小米,htc,三星等,定制了framework文件并且他们在系统应用中使用了这些文件,因此,为了能够正常反编译这些apk,则必须拷贝反编译apk依赖framework文件。
如,我们尝试编译小米桌面的MiuiHome.apk,将会得到如下错误。
使用:apktool if/install-framework <framework.apk>
再次尝试反编译MiuiHome.apk
2.签名问题
使用apktool b testapp –o out\testapp.apk,不出意外程序就会编译成功,单编译生成的testapp.apk并没有签名,还不能安装测试。一般情况下,保持原始签名不变,使用-c选项来保持。否则就要使用其他的签名工具来对apk签名了,如signapk.jar,auto-sign等。
META-INF包含apk的签名,使用-c/--copy-original来保持签名,使用原始的AndroidManifest.xml文件。但是如果修改AndroidManifest.xml文件,签名也就丢失了。就要重新对其签名。
参考文献:
apktool官方网站:http://ibotpeaches.github.io/Apktool/
Apktool(3)——Apktool的使用的更多相关文章
- ApkTool反编译apk,去除广告或者汉化后重新打包apk,并签名
http://my.oschina.net/mopidick/blog/135581 以ubuntu的环境为例子,window的大同小异 首先下载apktool工具:https://code.goog ...
- (转)Android-Mac电脑如何进行APK反编译-使用apktool、jd-gui
最近群里有人问如何在mac下进行apk反编译,我也没试过,以前都是在windows下进行反编译的,windows下很简单,有许多比较好的集成工具,如apkide(改之理),不过我猜mac下应该和win ...
- APKTool 提取APK文件的资源
APK文件本身是一个压缩包,直接用解压工具即可打开,但里面的文件都已被编码为二进制文件格式,不能直接看,比如程序描述文件AndroidManifest.xml. 使用apktool工具可以将这些文件解 ...
- mac apktool配置
Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com/pxb1988/ ...
- Apktool反编译apk资源文件
Android开发过程中,如何查看已经打包的APK内部xml呢,google下找到了apktool这个工具, apktool项目现在已经迁移到了github:apktool 目前最新版本2.2.2,如 ...
- Apktool的安装与使用
官网的安装方式如下图: 前提条件: Java 1.8版本已安装 通过在终端内输入"java -version"可以查看Java版本 因为我用的是MacBook,所以只介绍如何在Ma ...
- Apktool(1)——Apktool的安装
Apktool是google提供的apk的编译工具,有了它就可以做很多事情.比如获取apk的源码,apk汉化,对手机rom包做一些美化. 首先来看看apktool的安装(配置): 以下内容主要翻译字A ...
- mac下使用apktool反编译
Mac OS X: Download Mac wrapper script (Right click, Save Link As apktool) Download apktool-2 (find n ...
- mac上Android反编译工具apktool、dex2jar入门
MAC上Apktool的安装 官网链接 image.png 使用步骤如图1-6 第一:下载一个shell脚本,保存的名字就是”apktool”,不要带.sh后缀.可以复制到sublimetext, ...
- apktool逆向apk包
在AndroidStudio创建so一节里创建了so,并且在java里面调用so的HelloWorld方法,编译Android Studio后生成包app-debug.apk. 在逆向apk时如果该a ...
随机推荐
- Ocelot简易教程(二)之快速开始2
为什么这篇的标题叫"Ocelot简易教程(二)之快速开始2"呢,因为很多朋友跟我说上一篇" Ocelot简易教程(二)之快速开始1"内容太少了,只是简单介绍Oc ...
- 课程回顾-Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
训练.验证.测试划分的量要保证数据来自一个分布偏差方差分析如果存在high bias如果存在high variance正则化正则化减少过拟合的intuitionDropoutdropout分析其它正则 ...
- mysql 开发进阶篇系列 19 MySQL Server(innodb_flush_log_at_trx_commit与sync_binlog)
一. innodb_flush_log_at_trx_commit 这个参数名称有个log,一看就是与日志有关.是指:用来控制缓冲区(log buffer)中的数据写入到日志文件(log file), ...
- 五分钟轻松了解Hbase面向列的存储
说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- Nacos系列:欢迎来到Nacos的世界!
什么是Nacos? Nacos 是构建以"服务"为中心的现代应用架构 (例如微服务范式.云原生范式) 的服务基础设施. Nacos可以做什么? 1.动态配置服务:支持以中心化.外部 ...
- Perl的IO操作(1):文件句柄
文件句柄 文件句柄用来对应要操作的文件系统中的文件,这么说不太严谨,但比较容易理解.首先为要打开的文件绑定文件句柄(称为打开文件句柄),然后在后续的操作中都通过文件句柄来操作对应的文件,最后关闭文件句 ...
- Spark内存管理机制
Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行 ...
- 了解golang的可变参数(... parameters),这一篇就够了
在实际开发中,总有一些函数的参数个数是在编码过程中无法确定的,比如我们最常用的fmt.Printf和fmt.Println: fmt.Printf("一共有%v行%v列\n", r ...
- 好好耕耘 redis和memcached的区别
观点一: 1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还 ...