学习途径:
- 官网教程:https://ibotpeaches.github.io/Apktool/
 
Basic
First lets take a lesson into apk files. Apks are nothing more than a zip file containing resources and assembled java code. If you were to simply unzip an apk like so, you would be left with files such as classes.dex and resources.arsc.
1
2
3
4
5
6
7
  | $ unzip testapp.apk -d unzip-folder
...
$ cd unzip-folder
$ ls
AndroidManifest.xml  META-INF  classes.dex  res  resources.arsc
  | 
Obviously, editing or viewing a compiled file is next to impossible. That is where Apktool comes into play:
1
2
3
  | $ apktool d testapp.apk
I: Using Apktool 2.3.4 on testapp.apk
...
  | 
Decoding
The decode option on Apktool can be invoked either from d or decode like shown below.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  | $ apktool d foo.jar
# decodes foo.jar to foo.jar.out folder
$ apktool decode foo.jar
# decodes foo.jar to foo.jar.out folder
$ apktool d bar.apk
# decodes bar.apk to bar folder
$ apktool decode bar.apk
# decodes bar.apk to bar folder
$ apktool d bar.apk -o baz
# decodes bar.apk to baz folder
  | 
Building
The build option can be invoked either from b or build like shown below
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  | $ apktool b foo.jar.out
# builds foo.jar.out folder into foo.jar.out/dist/foo.jar file
$ apktool build foo.jar.out
# builds foo.jar.out folder into foo.jar.out/dist/foo.jar file
$ apktool b bar
# builds bar folder into bar/dist/bar.apk file
$ apktool b .
# builds current directory into ./dist
$ apktool b bar -o new_bar.apk
# builds bar folder into new_bar.apk
$ apktool b bar.apk
# WRONG: brut.androlib.AndrolibException: brut.directory.PathNotExist: apktool.yml
# Must use folder, not apk/jar file
  | 
Frameworks
Frameworks can be installed either from if or install-framework, in addition two parameters
-p, --frame-path <dir> - Store framework files into <dir>
-t, --tag <tag> - Tag frameworks using <tag>
-t, --tag <tag> - Tag frameworks using <tag>
Allow for a finer control over how the files are named and how they are stored.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
  | $ apktool if framework-res.apk
I: Framework installed to: 1.apk 
# pkgId of framework-res.apk determines number (which is 0x01)
$ apktool if com.htc.resources.apk
I: Framework installed to: 2.apk 
# pkgId of com.htc.resources is 0x02
$ apktool if com.htc.resources.apk -t htc
I: Framework installed to: 2-htc.apk 
# pkgId-tag.apk
$ apktool if framework-res.apk -p foo/bar
I: Framework installed to: foo/bar/1.apk
$ apktool if framework-res.apk -t baz -p foo/bar
I: Framework installed to: foo/bar/1-baz.ap
  |