一.环境要求

  1. 安装java 1.8 以上
  2. 命令行运行 java -version 返回版本大于1.8
  3. 如果没有,请安装java 1.8

二.下载与安装

  1. 下载apktool_x.x.x.jar到本地 官网下载或者 镜像下载
  2. 重命名下载的apktool_x.x.x.jar,改名为apktool.jar
  3. 下载脚本并配置
    1. Windows

      1. 写个bat脚本放在同一目录下

        @echo off
        set PATH=%CD%;%PATH%;
        java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
      2. 两个文件放在同一目录,后将该目录添加到您的环境变量系统PATH变量中

    2. Linux
      1. 写个sh脚本放在同一目录下

        #!/bin/bash
        #关闭已运行的
        pid = ps-ef| grep apktool.jar| grep -v | awk `{print $2}`
        kill -9 $pid
        echo "$pid进程终止"
        sleep2 #后台启动
        nohup java -jar apktool.jar
      2. 将两个文件(apktool.jar&apktool)移动到/usr/local/bin

      3. 确保两个文件都可执行(chmod +x1)

    3. Mac OS
      1. 写个sh脚本放在同一目录下
      2. 将两个文件(apktool.jar&apktool)移动到/usr/local/bin
      3. 确保两个文件都可执行(chmod +x)
  4. 命令行中输入 apktool 验证

三.使用

1.反编译

使用 d 或者 decode 命令

apktool d apk文件路径
apktool decode apk文件路径
// 效果一样 反编译 apktool d apk文件路径 o 解压目录

2.重新打包

使用 b 或 build

apktool b 解压后的项目目录 -o 新apk的名字
// 重新打包生成的 apk 需要签名才能安装

3.拓展反编译的配置

#-api, --api-level <API>
指定生成smali文件所用的api等级,默认使用targetSdkVersion版本 #-b, --no-debug-info
防止baksmali写出调试信息(.local,.param,.line等)。如果您要比较来自不同版本的同一APK的smali,则首选使用。 #-f, --force
如果反编译的目标目录存在,将会被强制清空 #--force-manifest 
强制反编译 AndroidManifest.xml文件,优先级高于 -s, --no-src 配置。 #--keep-broken-res
如果出现 "Invalid Config Flags Detected. Dropping Resources..." 错误,这表示apk中有apktool不能识别的结构。可能是apktool不支持的更新的api版本,亦或者是该apk为不规则的apk。你可以添加此配置,以跳过错误,但后续你需要手动修复这些错误。 #-m, --match-original
将各文件处理为最接近原生的形式,将会导致不能备重新打包。
Ps:我试了下,格式确实更接近原生,但是我重新打包也是成功了(打包成功,但并未签名安装)。 #--no-assets
不处理和拷贝属于 unknown 的资源文件。 #-o, --output <DIR>
指定输出目录 #--only-main-classes
只反编译apk根目录下的dex文件,如:classes[0-9].dex
通过阅读源码发现,此配置的作用为:反编译根目录下的以 classes 开头,并以 .dex 结尾的dex文件,不仅限于0-9 #-p, --frame-path <DIR>
指定存储和加载framework的目录 #-r, --no-res
不反编译资源,保留 resources.arsc 为原来的样子,如果你只是需要修改代码,此配置会加快反编译和重新打包的速度。 #-s, --no-src
不反编译代码,即不处理 dex文件。如果你只是需要修改资源,此配置会加快反编译和重新打包的速度。 #-t, --frame-tag <TAG>
使用指定的framework进行反编译,前文有述。

4.拓展重新打包配置

#-a, --aapt <FILE>
指定使用的aapt,当指定目录未找到aapt时,会使用apktool自带的aapt进行处理。 #-api, --api-level <API>
指定处理smali文件的api版本,默认使用minSdkVersion版本 #-c, --copy-original
拷贝原始 AndroidManifest.xml and META-INF 到apk包体中。将会在2.5.0版本移除此功能。 #-d, --debug
在 AndroidManifest 加入 debuggable="true" 配置
此配置,不会覆盖已经存在的debuggable配置。 #-f, --force-all
当生成的文件存在时,进行强制覆盖 #-nc,--no-crunch
此配置会传递给aapt,参阅:
    Expose the aapt --no-crunch option by Novex · Pull Request #1849 · iBotPeaches/Apktool · GitHub
    aapt build in apktool is not support new options · Issue #1232 · iBotPeaches/Apktool · GitHub
    禁止对资源文件的处理 #-o, --output <FILE>
指定apk的输出目录 #-p, --frame-path <DIR>
指定加载framework的路径 #--use-aapt2
使用aapt2进行打包

5.编译后目录打开

#subl进行打开
#subl的安装http://www.sublimetext.com/3
subl 反编译后文件目录

apktool的下载,安装,反编译和重新打包的更多相关文章

  1. eclipse安装反编译插件(附jad下载)

    eclipse安装反编译插件(附jad下载) 博客分类: eclipse   一.eclipse反编译插件Jadclipse jadclips插件网站:    http://jadclipse.sou ...

  2. eclipse安装反编译工具

    身为一名程序员来说,日常最常做的就是编写代码和查看别人写好的源代码了,有时候打开别人写的class文件发现根本不是自己想要的,所以给大家介绍一种eclipse中反编译class文件的工具. 第一步:下 ...

  3. MyEclipse 2017 ci6 安装反编译插件(本人自己摸索的方法,亲测可行)

    注: 本文来源于:Smile_Miracle 的< MyEclipse 2017 ci6 安装反编译插件(本人自己摸索的方法,亲测可行) > 第一步:关闭ME,去一下地址下载jad的反编译 ...

  4. Eclipse 如何安装反编译插件

    安装反编译插件 1.Help——Eclipse Marketplace 2.输入 Decompiler 搜索并安装此插件 3.根据提示无脑下一步,安装好,重启后(如果还是无法编译,需要把默认打开cla ...

  5. 反编译sencha toucha打包的apk文件,修改应用名称支持中文以及去除应用标题栏

    一.去除安卓应用标题栏 sencha touch打包android安装包,去掉标题栏titlebar的简单方法 (有更复杂更好的方法,参看"二.利用反编译修改apk的应用名称为中文" ...

  6. ApkTool反编译和重新打包

    有时会需要反编译APK,各人有各人的原因,你都懂的…… 准备工作: 下载APKTool,通过下面这个连接进行下载,https://code.google.com/p/android-apktool/d ...

  7. myeclipse2014安装反编译插件

    一.在线安装方式: Eclipse Class Decompiler整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class Viewer无缝集成,能够很方便的使 ...

  8. Eclipse安装反编译工具JadClipse

    记录一下安装Eclipse的反编译插件JadClipse的过程: 1.首先准备: 1)JadClipse插件,从网站http://sourceforge.net/projects/jadclipse/ ...

  9. Eclipse安装反编译工具JadClipse for Eclipse手把手教程

    今天闲来无事准备弄弄eclipse的反编译工具JadClipse for Eclipse,百度经验里也说的比较清楚只是两个文件下载地址没有明确 net.sf.jadclipse_3.3.0.jar   ...

随机推荐

  1. git代码管理——克隆项目到本地仓库及上传本地项目到仓库

    一.克隆项目到本地仓库 1.github网站操作 1.1 登录github 首先创建一个仓库,点击“New” 1.2 输入仓库信息 1.3 创建完成后,会多出一个仓库 2.安装git客户端 2.1 安 ...

  2. spring-dao.xml通常写法

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  3. 几个超级好用但很少有人知道的 webstorm技巧

    我总结一些我发现的比较实用的功能,内容来自日常工作中用到的功能.图片来自PPT,是在公司内部的分享. 你不知道的webstorm进阶使用技巧 1.双击shift 全局搜索,可以搜索代码.设置等. 如果 ...

  4. Linux常用字段

    cd 切换路径 vim,vi 打开文档 ls  查看文件信息 chmod 修改文件或目录的权限 useradd 添加用户 cat 查看纯文本文件(少内容) rm 删除文件或目录 mv 剪切文件或文件重 ...

  5. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  6. 如何写出优美的 JavaScript 代码?

    一.变量相关 (1)变量数量的定义 NO:滥用变量 let kpi = 4; // 定义好了之后再也没用过 function example() { var a = 1; var b = 2; var ...

  7. Raft 协议

    Paxos 存在的问题 Paxos 算法的描述偏学术化,缺失了很多细节,无法直接应用于工程领域.实际工程应用中的分布式算法大多是 Paxos 的变种,验证这些算法的正确性也成为了一个难题. 举个例子: ...

  8. 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用

    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...

  9. Java知识系统回顾整理01基础04操作符04位操作符

    一.位操作符 位操作符在实际工作中用的并不常见,但是我比较纠结这些位操作.所以实际练习位操作符的每一个操作符的操作实例来理解其具体含义. 建议: 如果确实感兴趣,就看看,个人建议跳过这个章节. 真正工 ...

  10. 【题解】[AHOI2013]作业

    Link 题目大意:\(n\)个数,\(m\)个询问,每次四个参数,\(l,r,a,b\),问区间\([l,r]\)中出现过的,数值在\([a,b]\)区间中的数的个数以及区间\([l,r]\)中数值 ...