> For the complete documentation index, see [llms.txt](https://docs.aiot.virbox.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aiot.virbox.com/faq/apktool.md).

# 使用 Apktool 解压 APK 并打包

Android应用加固中，如果对apk中的SO文件进行加固，需首先使用 **apktool** 解压apk文件。

**apktool** 除了可以解压apk外，还可以在修改后重新打包。

## 功能

* 将apk解压为原来的形式（包括resources.arsc，class.dex，so等）
* 将解压的资源重新打包成apk
* 组织和处理依赖于框架资源的apk
* Smali调试
* 执行自动化任务

## 安装方式

访问 [https://ibotpeaches.github.io/Apktool/install](https://ibotpeaches.github.io/Apktool/install/)，根据开发环境选择对应版本。

## 使用方式

```
usage: apktool
 -advance,--advanced   prints advance information.
 -version,--version    prints the version then exits
usage: apktool if|install-framework [options] <framework.apk>
 -p,--frame-path <dir>   Stores framework files into <dir>.
 -t,--tag <tag>          Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
 -f,--force              Force delete destination directory.
 -o,--output <dir>       The name of folder that gets written. Default is apk.out
 -p,--frame-path <dir>   Uses framework files located in <dir>.
 -r,--no-res             Do not decode resources.
 -s,--no-src             Do not decode sources.
 -t,--frame-tag <tag>    Uses framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
 -f,--force-all          Skip changes detection and build all files.
 -o,--output <dir>       The name of apk that gets written. Default is dist/name.apk
 -p,--frame-path <dir>   Uses framework files located in <dir>.
```

## 解压apk

### 切换目录

![切换至apk所在目录](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDn33hPCNWs9d1z7JLu%2F-MDn3ZAnVnuYu4gbKA85%2Fimage.png?alt=media\&token=ad88eecf-8f61-486d-8060-03b88d9108dd)

### 解压apk

```
apktool d <file_apk>
```

![解压apk文件](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDn3haF3eQ3waC045-3%2F-MDn3yO-iWqp81HzHS5X%2Fimage.png?alt=media\&token=182dd95d-d78a-48ed-bf29-a155092527e1)

解压后，会生成一个同名的文件夹

![解压后的文件夹](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDmwtXt6VTMjZ629kxF%2F-MDmxqPf1hoiPNTfvhnK%2Fimage.png?alt=media\&token=9d9db978-3708-42cc-8090-59882438b7b1)

### 查看SO文件

本范例的SO文件保存于C:\Program Files (x86)\apktool\angrybots5.5.3\lib\armeabi-v7a目录下，开发者可根据自己的实际情况定位SO文件目录。

![查看SO文件](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDmwtXt6VTMjZ629kxF%2F-MDmyYO8YRNXdn8aE8iU%2Fimage.png?alt=media\&token=67ee834c-2542-4c66-bdd5-29a15ed47c3e)

### SO加固

不同语言开发的SO文件加固方式不同，详情请访问：

{% content-ref url="/pages/-M9JNt\_JZGym5IN8TZYU" %}
[开发指南](/how-to-use.md)
{% endcontent-ref %}

## 打包apk

### 切换目录

![切换至解压文件所在目录](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDn3haF3eQ3waC045-3%2F-MDn4ArjKtEsK51LY92I%2Fimage.png?alt=media\&token=d62e2768-d0a8-4c45-a5e8-756eefc07596)

### 打包apk

```
apktool b <app_path>
```

![打包apk文件](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDn4Gh-uQX1QbdLWgSo%2F-MDn4cz85KAExwX2hSSv%2Fimage.png?alt=media\&token=d865e2b6-3f26-48a7-943d-f10ab92a1917)

### 查看apk文件

本范例的新apk文件保存于C:\Program Files (x86)\apktool\angrybots5.5.3\dist目录下，开发者可根据自己的实际情况定位apk所在目录。

![](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDn-gE_rtzVDWMv0qeA%2F-MDn2YMNbmw4EF7ycWY2%2Fimage.png?alt=media\&token=9e7cdd81-adee-462c-9551-1a666dd759e2)

## 文件对比

![保护前后文件对比](https://2533242127-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpX-FkE6usysD6ERAdR%2F-MDn4Gh-uQX1QbdLWgSo%2F-MDn59NA1p1cDdQXOwVO%2Fimage.png?alt=media\&token=1afe89b6-cecc-4337-beb9-0d1330aa2fa2)
