https://blog.csdn.net/themelove/article/details/53126360

反编译相关:

apktool    作用:资源文件的获取,可以提取出图片文件和布局文件进行查看

dex2jar    作用:将apk反编译成java源码(classes.dex转化成jar文件)

jd-gui       作用:查看APK中的classes.dex转化成的jar文件,即源码文件

概述:apktool dex2jar  jd-gui他们三个都和反编译相关,但是侧重点不同,当我们有不同的需求时,选择不同的工具,可以获取不同的资源。通常情况下,我们可以三者结合起来用。

apktool下载地址

dex2jar下载地址

jd-gui下载地址

我汇总的三个工具包下载

apktool的使用:

cmd下进入到apktool目录下执行:apktool d xxxxx.apk

运行结果:

可以看到用apktool反编译apk之后的目录如上:assets 目录和res目录下的文件和原工程中的资源文件一样,lib下是一些第三方的.so文件,smail中是calsses.dex转化成的

smail文件,并不可读

apktool的主要用途:

1.可以获取apk里的资源文件

2.可以反编译之后修改AndroidManifest.xml文件中的一些配置,比如mete-data,可以用于多渠道打包的实现。

3.assets目录下放置的配置文件也可以修改。

应用场景:我们手动反编译修改AndroidManifest.xml中mete-data中的渠道号,在用apktool b [修改好之后的文件目录]  回编成apk,注意,在回编之后的apk是未签名的apk,我们需要重新用jdk中的jarsigner.exe对apk进行签名,再用zipalign.exe对签名后的apk进行对齐优化操作,最终使其成为一个可用的apk.

以上步骤就是手动修改AndroidManifest.xml来手动打包一个渠道包的过程,我们当然可以将所有的渠道号配置在一个配置文件中,将以上步骤都用批处理或者python写的打包工具来代替,也就是我们常说的多渠道打包工具。这样也避免出错的概率。

还不会?教你反编译apk手动修改AndroidManifest.xml再回编打一个渠道包

dex2jar的使用:

1.首先将下载好的xxx.apk改名为xxx.rar,方便解压,解压之后如下图:

2.之后将我们下载好的dex2jar.zip解压进入到如下目录:

图中选中的就是我们要用到的工具。

3.打开cmd 进入到该目录执行  d2j-dex2jar.bat xxxx.classes.dex 如下图

运行结果如下图:

会在批处理所在目录生成classes-dex2jar.jar文件

该步骤主要是将classes.dex---------->xxxxxxx.jar文件,而xxxxx.jar里面就是我们的.class文件,解压xxxxx.jar后目录如下:

我们知道xxxxxx.class 的字节码文件我们是不能直接预览的。所以我们要用到下面的工具

3.jd-gui的使用

查看xxxxxxx.jar里的源码

1.找到我们下载的jd-gui-windows-1.4.0.zip并解压,找到jd-gui.exe,并把上面步骤中生成的xxxxxx.jar文件拖进去,即可看到反编译之后的源码,大功告成:

apktool、dex2jar、jd-gui的区别及详解的更多相关文章

  1. Windows8 各种版本区别对比详解

    微软的 Windows8 操作系统提供了4个不同的版本,分别是 Windows RT.Windows 8 标准版.Windows 8 Pro 专业版 以及 Windows 8 Enterprise 企 ...

  2. java中4种修饰符访问权限的区别及详解全过程

    java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...

  3. Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)

    Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j) 博客分类: Java综合   第一.Logger.getLogger()和Log ...

  4. 《手把手教你》系列技巧篇(二十七)-java+ selenium自动化测试- quit和close的区别(详解教程)

    1.简介 尽管有的小伙伴或者童鞋们觉得很简单,不就是关闭退出浏览器,但是宏哥还是把两个方法的区别说一下,不然遇到坑后根本不会想到是这里的问题. 2.源码 本文介绍webdriver中关于浏览器退出操作 ...

  5. Java、javax、org、sun、Java.util等常用包的区别、详解、实例

    Java.javax.org.sun包都是jdk提供的类包,且都是在rt.jar中.rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就 ...

  6. shell学习(9)- du和df区别及详解

    清明小长假来加班,总得干点啥吧,今天就说说du 和df的区别. 1.区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有删除的.他计算 ...

  7. Mybatis 一级缓存和二级缓存原理区别 (图文详解)

    Java面试经常问到Mybatis一级缓存和二级缓存,今天就给大家重点详解Mybatis一级缓存和二级缓存原理与区别@mikechen Mybatis缓存 缓存就是内存中的数据,常常来自对数据库查询结 ...

  8. java中四种访问修饰符区别及详解全过程

    客户端程序员:即在其应用中使用数据类型的类消费者,他的目标是收集各种用来实现快速应用开发的类. 类创建者:即创建新数据类型的程序员,目标是构建类. 访问控制存在的原因:a.让客户端程序员无法触及他们不 ...

  9. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)

    最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...

随机推荐

  1. notepad++ 开始和结尾

    作者:zecy链接:https://www.zhihu.com/question/37708379/answer/73181634来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  2. HDOJ 5693 D Game

    众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它发明了一个游戏:D游戏. 度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只是代指等差数列[(等差数列百科)](http://baik ...

  3. 【Treap模板详细注释】BZOJ3224-普通平衡树

    模板题:D错因见注释 #include<iostream> #include<cstdio> #include<cstring> #include<algor ...

  4. 1.6(java学习笔记)static关键字

    static关键字 1.static修饰变量也称静态变量,静态变量存放在静态区被该类的所有对象共享. 例如,定义了一个类class User{static Sring city = "a城& ...

  5. java--模板方法模式

    /* 需求:获取一段程序的运行时间 原理:获取程序开始和结束的时间并相减即可 获取时间:用java中已有的一个类:System.currentTimeMillis(); 当代码完成优化后,就可以解决这 ...

  6. glib wpa_supplicant Unix上库编译错误解决与总结

    编译Linux下的库是一件痛苦的事情,这里主要阐述glib和wpa_supplicant库的编译,因各自的依赖关系,另外一些库要事先编译.glib依赖libffi和zlib,而wpa_supplica ...

  7. Go beego框架使用笔记(一)

    Beego介绍 beego我认为是go初学者比较容易上手的一门MVC Web框架.简单易懂,最重要的一点就是提供了中文文档,这对于我这种英语能力比较差的人来说就是福音. beego的官网上是这么介绍b ...

  8. [Bug]转:使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法

    最近做的项目使用了jquery的uploadify,但是在谷歌浏览器测试总是会出现崩溃.如: 因为是java项目. 解决的办法是: 给引入的js加上一个参数,时间戳就可以,防止缓存,使每一次都请求.( ...

  9. 【spring data jpa】使用jpa的@Query,自己写的语句,报错:org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' cannot be found on null

    报错: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' ...

  10. virtualenv、virtualenvwrapper安装和使用;Mac os的特殊性

    [sudo] pip install virtualenv 或者[sudo] pip3 install virtualenv [sudo]可用可不用 pip/pip3 install virtuale ...