一.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的使用的更多相关文章

  1. ApkTool反编译apk,去除广告或者汉化后重新打包apk,并签名

    http://my.oschina.net/mopidick/blog/135581 以ubuntu的环境为例子,window的大同小异 首先下载apktool工具:https://code.goog ...

  2. (转)Android-Mac电脑如何进行APK反编译-使用apktool、jd-gui

    最近群里有人问如何在mac下进行apk反编译,我也没试过,以前都是在windows下进行反编译的,windows下很简单,有许多比较好的集成工具,如apkide(改之理),不过我猜mac下应该和win ...

  3. APKTool 提取APK文件的资源

    APK文件本身是一个压缩包,直接用解压工具即可打开,但里面的文件都已被编码为二进制文件格式,不能直接看,比如程序描述文件AndroidManifest.xml. 使用apktool工具可以将这些文件解 ...

  4. mac apktool配置

    Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com/pxb1988/ ...

  5. Apktool反编译apk资源文件

    Android开发过程中,如何查看已经打包的APK内部xml呢,google下找到了apktool这个工具, apktool项目现在已经迁移到了github:apktool 目前最新版本2.2.2,如 ...

  6. Apktool的安装与使用

    官网的安装方式如下图: 前提条件: Java 1.8版本已安装 通过在终端内输入"java -version"可以查看Java版本 因为我用的是MacBook,所以只介绍如何在Ma ...

  7. Apktool(1)——Apktool的安装

    Apktool是google提供的apk的编译工具,有了它就可以做很多事情.比如获取apk的源码,apk汉化,对手机rom包做一些美化. 首先来看看apktool的安装(配置): 以下内容主要翻译字A ...

  8. mac下使用apktool反编译

    Mac OS X: Download Mac wrapper script (Right click, Save Link As apktool) Download apktool-2 (find n ...

  9. mac上Android反编译工具apktool、dex2jar入门

    MAC上Apktool的安装 官网链接   image.png 使用步骤如图1-6 第一:下载一个shell脚本,保存的名字就是”apktool”,不要带.sh后缀.可以复制到sublimetext, ...

  10. apktool逆向apk包

    在AndroidStudio创建so一节里创建了so,并且在java里面调用so的HelloWorld方法,编译Android Studio后生成包app-debug.apk. 在逆向apk时如果该a ...

随机推荐

  1. ionic3 生成android 如何控制versionCode版本号

    ionic 项目中生成 android 如何控制版本号呢. 1.在项目的配置文件下的config.xml 来我们可以看到 <widget id="com.ionicframework. ...

  2. Spring系列之DI的原理及手动实现

    目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 前言 在上一章中,我们介绍和简单实现了容器的部分功能,但是这里还留下了很多的问题.比如我们在构造bean实例的时 ...

  3. [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  4. Java 并发编程-再谈 AbstractQueuedSynchronizer 2:共享模式与基于 Condition 的等待 / 通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  5. 关于JBoss7.X修改post传输数据量(max-post-size)的问题

    转自: https://blog.csdn.net/zhangyunhao108/article/details/53140569 JBoss7.X修改max-post-size在网上百度了好久,都不 ...

  6. python基本操作

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  7. python三大神器之virtualenv

    virtualenv virtualenv用来管理python项目环境,隔离出一个只属于这个项目的虚拟python环境(windows和Linux用法一样). 首先你需要安装virtualenv模块 ...

  8. 为什么使用SLF4J比使用log4j或者java.util.logging更好

    1.SLF4j是什么? SLF4J 并没有真正地实现日志记录,它只是一个允许你使用任何java日志记录库的抽象适配层. 如果你正在编写内部或者外部使用的API或者应用库的话,如果使用了slf4j,那么 ...

  9. 解读经典《C#高级编程》第七版 Page50-68.核心C#.Chapter2

    前言 本篇讲述Main方法,控制台,注释,预处理指令,编程规范等.这些概念比较琐碎,为避免长篇大论,主要以列举要点的方式来说明. 01 Main方法 Main方法并不是所有应用类型的入口方法,它只是控 ...

  10. 基于SpringMVC+Spring+MyBatis实现秒杀系统【数据库接口】

    前言 该篇教程主要关注MyBatis实现底层的接口,把MyBatis交给Spring来托管.数据库连接池用的c3p0.数据库用的MySQL.主要有2个大类:秒杀商品的查询.秒杀明细的插入. 准备工作 ...