• Apktool(3)——Apktool的使用


    一.apktool的作用

    安卓应用apk文件不仅仅是包含有resource和编译的java代码的zip文件,如果你尝试用解压工具(如好压)解压后,你将会获得classes.dex和resource.arsc等文件。但这些文件对我们来说一无用处。你可以尝试打开AndroidManifest.xml:

    image

    如果我们有了apktool:输入apktool d testapp.apk
    image

    再打开AndroidManifest.xml:

    image

    除了这些,我们还获得了该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,将会得到如下错误。

    image

    使用:apktool if/install-framework <framework.apk>

    再次尝试反编译MiuiHome.apk

    image

    2.签名问题

    使用apktool b testapp –o out estapp.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/

  • 相关阅读:
    傻逼Eclipse笔记
    Less笔记
    [转]解决WebClient或HttpWebRequest首次连接缓慢问题
    Css3图标库
    Json.Net4.5 序列化问题
    async和await
    CLR、内存分配和垃圾回收
    C#7.0新语法
    C#6.0新语法
    C#泛型详解
  • 原文地址:https://www.cnblogs.com/mliangchen/p/5084961.html
Copyright © 2020-2023  润新知