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 ...
随机推荐
- DWR第三篇之逆向Ajax升级
1. 本示例在第二篇架构基础上添加代码 2.在client.jsp开头的地方添加如下代码: 本示例需要做的是定向推送,那么就需要浏览器进行登录,从而进行定向的推送功能,为了节省时间,这里不做登录模块了 ...
- python中执行该文件,就调用 mian 方法
代码: test.py import student def main(): st = student.student(1001, 'tommy', 18) st.sing() st.dance() ...
- mysql滑动聚合
滑动聚合是按顺序对滑动窗口范围内的数据进行聚合的操作.下累积聚合不同,滑动聚合并不是统计开始计算的位置到当前位置的数据. 这里以统计最近三个月中员工第月订单情况为例来介绍滑动聚合. 滑动聚合和累积聚合 ...
- Mybatis学习(五)————— 延迟加载和缓存机制(一级二级缓存)
一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybati ...
- 机器学习排序算法:RankNet to LambdaRank to LambdaMART
使用机器学习排序算法LambdaMART有一段时间了,但一直没有真正弄清楚算法中的所有细节. 学习过程中细读了两篇不错的博文,推荐给大家: 梯度提升树(GBDT)原理小结 徐博From RankNet ...
- man exportfs(exportfs命令中文手册)
本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html exportfs() System Manager's Manual exportfs ...
- spark之scala程序开发(本地运行模式):单词出现次数统计
准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...
- TensorFlow(3)CNN中的函数
tf.nn.conv2d()函数 参数介绍: tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=Non ...
- [翻译]一个新式的基于文本的浏览器 Browsh
介绍 什么是Browsh? Browsh是一个纯文本浏览器,可以运行在大多数的TTY终端环境和任何浏览器.目前1 ,终端客户端比浏览器客户端更先进2. TTY 客户端 终端客户端即时更新和交付,以便于 ...
- .net core2.0+nginx+Ubuntu14.04【一个小白的初次尝试】
新的业务来了,需要使用linux环境部署web服务,作为一个C#的懒惰程序员,就这么上了车[狗脸],废话不多说,跟我一样的小白请看,大神请绕路. 站点暂时没有使用Docker部署,为什么呢,因为我还没 ...