我是靠谱客的博主 漂亮灰狼,这篇文章主要介绍MultiDex 的使用与反编译,现在分享给大家,希望可以做个参考。

Android 反编译 Apk

环境安装

brew install apktoolHomebrew 安装 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(146)

评论列表共有 0 条评论

立即
投稿
返回
顶部