Android 反编译 Apk
环境安装
brew install apktool:Homebrew安装apktool
下载JD-GUI
jd-gui 主要是为了方便查看 dex2jar 转换的jar文件结构和部分代码(未混淆)
- jd-gui github地址 官网地址
下载 dex2jar
dex2jar 主要用于将解压后的 Apk 包中 classes.dex 转换为 classesdex.jar 包便于 jd_gui 查看
- dex2jar 下载地址
dex2jar使用说明
- 使用说明地址
工具使用
Apktool 反编译和二次打包
- apktool d -f demo.apk -o 存放反编译文件路径
apktool d -f /Users/boomhe/debug.apk -o Game/Apk
- apktool b -f 二次打包文件路径 -o demo.apk
apktool b -f /Users/boomhe/Game/Apk -o /Users/boomhe/Game/debug.apk
MultiDex 使用
MultiDex 是什么
MultiDex 就是分包、解决项目中 65535 问题
什么是 .dex 文件
Dalvik VM executes : Android Dalvik 虚拟机执行文件
什么是 art
Android Runtime :Android 运行时、Android 4.4 引入
直接对 .apk 文件解压会保留 META-INF 签名信息文件
unzip /Users/boomhe/Game/GWT.apk -d /Users/boomhe/Game/unzipGWT
采用 ApkTool 工具反编译的文件没有 META-INF 签名信息文件
apktool d -f /Users/boomhe/Game/GWT.apk
-o Game/apktoolApk
apk 解压后的项目结构
- AndroidManifest.xml 配置信息
- META-INF 签名信息
- classes.dex Java 字节码文件
- res 资源文件
- resources.arsc 二进制资源文件
Java 中常见的类加载器
- BootstrapClassLoader:纯 C++ 实现的、没有对应的 Java 类、主要加载 jre/lib/目录下的核心库
- ExtClassLoader:主要加载 jre/lib/ext/ 目录下的扩展包
- AppClassLoader:主要加载 ClassPath 路径下的包
Android 中常见的类加载器
- ClassLoader:加载器 是父委托加载机制
- PathClassLoader:加载 /data/app 目录下的 apk 文件、从这个目录可以看出、PathClassLoader 主要用来加载已经安装过的 apk
- DexClassLoader:加载路径需要在创建 DexClassLoader 时传入、也就是说可以加载任何路径下的 apk/dex/jar
两种分包方案
- Ant:Eclipse 工具
- Gradle:Android Studio 工具
Android Studio 集成 MultiDex
引入依赖和开启multiDex
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
// 第一步 开启 multiDex
multiDexEnabled true
}
...
}
dependencies {
// 第二步:引入依赖
compile 'com.android.support:multidex:1.0.1'
}
重写 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用 Dalvik 可执行文件分包
// 第三步:重写 attachBaseContext()
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
}
配置 manifest 文件
// 第四步:配置
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="com.czcg.qlsct.MyApplication" >
...
</application>
</manifest>
动态加载分 Dex
- 将 DexClassLoader 插入到 PathClassLoader 和 BootClassLoader 中间
- DexClassLoader 中的 dex 追加到 PathClassLoader 中
参考文献
Mac下配置Apktool反编译环境
郭霖
鸿洋
任玉刚
最后
以上就是漂亮灰狼最近收集整理的关于MultiDex 的使用与反编译的全部内容,更多相关MultiDex内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复