apktool 工具使用文档

apktool 工具使用文档

安装说明

apktool 是 java 语言开发的,提供的是一个 jar 包,需要在 java 运行环境在1.8以上
在终端输入  java -version  在查看本机 java 版本
Mac OS X:

  1. 下载Mac 包装脚本(右键单击,将链接另存为 apktool ),注意文件没有后缀名
  2. 下载 apktool-2( 在这里找到最新的 )
  3. 将下载的jar重命名为 apktool.jar
  4. 将两个文件( apktool.jar&apktool )移动到 /usr/local/bin( 需要 root )
  5. 确保两个文件都是可执行的(chmod +x)
  6. 尝试通过 CLI ( 命令行 )运行 apktool

介绍

首先让我们学习 apk 文件,它是一个包含资源和 java 汇编代码的 zip 文件。既然是 zip 文件,那么我们解压 apk 文件会看到什么呢。可以尝试一下会看到
classes.dex 和其他的资源文件

$ unzip testapp.apk
Archive:  testapp.apk
 inflating: AndroidManifest.xml
 inflating: classes.dex
 extracting: res/drawable-hdpi/ic_launcher.png
 inflating: res/xml/literals.xml
 inflating: res/xml/references.xml
 extracting: resources.arsc

你可以尝试查看 AndroidManifest.xml 文件,显示是一堆,加密的乱码。

P4F0\fnversionCodeversionNameandroid*http://schemas.android.com/apk/res/androidpackageplatformBuildVersionCodeplatformBuildVersionNamemanifestbrut.apktool.testapp1.021APKTOOL

显然,我们想编辑或查看编译文件是不行滴。那我们想修改其中的内容改怎么弄呢?

那这就是 apktool 发挥作用的地方了。

$ apktool d testapp.apk
I: Using Apktool 2.0.0 on testapp.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: 1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
$

AndroidManifest.xml  再次查看,是不是很熟悉。这不就是在 AS 里面显示的一样嘛!

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="brut.apktool.testapp"
platformBuildVersionCode="21" platformBuildVersionName="APKTOOL" />

除了 XML 之外,诸如 9.PNG,布局文件,字符串等资源,也都正确解码为可读格式。

decode (反编译)

apktool 除了可以解码 apk 外,还能解码 jar 文件,使用参数 d 或 decode 的,具体使用方式如下所示。

// 将foo.jar 解码到 foo.jar.out 文件夹
$ apktool d foo.jar
// 执行结果和上一条命令一样
$ apktool decode foo.jar

// 反编译 apk 文件,生成的文件在当前文件夹的 bar 目录
$ apktool d bar.apk

// -o 参数可以指定生成的文件夹目录名
$ apktool d bar.apk -o baz

操作实例:

image.png

build(编译)

可以从下面显示的 b 或 build 如下所示 调用构建选项

// 将 foo.jar.out 文件夹构建到 foo.jar.out/dist/foo.jar 文件中
// 注意查看生成的 jar 文件路径
$ apktool b foo.jar.out
$ apktool build foo.jar.out

// 将bar文件夹构建apk到 bar/dist/bar.apk 文件中
$ apktool b bar

// 将当前目录构建到 ./dist 中
$ apktool b .

// 将 bar 文件夹构建到 new_bar.apk 中 ,-o 选项
$ apktool b bar -o new_bar.apk


// 如果使用错了文件,会出现如下错误提示。
$ apktool b bar.apk
// WRONG: brut.androlib.AndrolibException: brut.directory.PathNotExist: apktool.yml
// Must use folder, not apk/jar file

image.png

回编完的 apk,不能直接安装运行。需要重新签名,具体参考 Android 开发文档
我们执行验证命令,查看刚才上例中的 apk,显示应用未签名。

image.png

从命令行手动签名应用

这里是已经有现成的 apk 文件,对于在 AndroidStudio 使用命令行构建 apk,参考从命令行构建您的应用
从命令行签名应用有两种选择方式  jarsigner 和 apksigner。
这里介绍 google 推荐的方式。
签名 APK ,参考下面步骤使用 zipalign 和 apksigner。

  1. 打开命令行( 在 Android Studio 中,选择 View > Tool Windows > Terminal ),然后导航至未签署 APK 所在的目录。
  2. 使用 zipalign 对齐未签名的 APK

zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk

zipalign 可以确保所有未压缩的数据首先相对于文件开头部分对齐特定字节,这里指定4字节对齐。这样可减少应用占用的内存量。

image.png

  1. 使用 apksigner 通过您的私钥签署您的 APK:
apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
  1. 在本例中,使用单密钥库文件 my-release-key.jks 中存储的私钥和证书签署 APK 后,以 my-app-release.apk形式输出签署的 APK 。
    apksigner 工具支持其他签名选项,包括使用单独的私钥和证书文件签署 APK 文件,以及通过多个签署人签署 APK。 如需了解详细信息,请参阅 apksigner 参考。
    注:要使用 apksigner 工具,必须安装 Android SDK 构建工具的修订版 24.0.3 或更高版本。 您可以使用 SDK 管理器更新此软件包。

image.png
执行完命令输入签名文件对应的密码,再次检查是否签名成功。
image.png

  1. 验证 APK 是否已签名成功,执行如下命令:
apksigner verify my-app-release.apk

参考:
apktool 官方文档

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅墨cgz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值