package com.aitsuki.hotpatch;
import android.content.Context;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import dalvik.system.DexClassLoader;
/**
* Created by hp on 2016/4/11.
*/
public class HotPatch {
// private HotPatch() {}
private static Context mContext;
public static void init(Context context) {
mContext = context;
File hackDir = context.getDir("hackDir", 0);
File hackJar = new File(hackDir,"hack.jar");
try {
AssetsUtil.copyAssets(context,"hack.jar", hackJar.getAbsolutePath());
inject(hackJar.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void inject(String path) {
File file = new File(path);
if(file.exists()) {
try {
// 获取classes的dexElements
Class<?> cl = Class.forName("dalvik.system.BaseDexClassLoader");
Object pathList = ReflectUtil.getField(cl, "pathList", mContext.getClassLoader());
Object baseElements = ReflectUtil.getField(pathList.getClass(), "dexElements", pathList);
// 获取patch_dex的dexElements(需要先加载dex)
String dexopt = mContext.getDir("dexopt", 0).getAbsolutePath();
DexClassLoader dexClassLoader = new DexClassLoader(path, dexopt, dexopt,mContext.getClassLoader());
Object obj = ReflectUtil.getField(cl, "pathList", dexClassLoader);
Object dexElements = ReflectUtil.getField(obj.getClass(), "dexElements", obj);
// 合并两个Elements
Object combineElements = ReflectUtil.combineArray(dexElements, baseElements);
// 将合并后的Element数组重新赋值给app的classLoader
ReflectUtil.setField(pathList.getClass(), "dexElements", pathList, combineElements);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.e("HotPatch", file.getAbsolutePath()+"does not exists");
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android热修复完整示例
共59个文件
java:13个
xml:11个
gradle:6个
需积分: 10 14 下载量 2 浏览量
2016-10-18
15:43:32
上传
评论
收藏 110KB RAR 举报
温馨提示
Android热修复的例子网上很多,但是很多不全,这是一个简单的实例,易懂可用。
资源推荐
资源详情
资源评论
收起资源包目录
HotPatchDemo.rar (59个子文件)
HotPatchDemo
gradlew.bat 2KB
gradlew 5KB
gradle.properties 872B
HotPatchDemo.iml 943B
hotpatch
proguard-rules.pro 654B
src
test
java
com
aitsuki
hotpatch
ExampleUnitTest.java 327B
androidTest
java
com
aitsuki
hotpatch
ApplicationTest.java 363B
main
res
drawable
values
strings.xml 74B
java
com
aitsuki
hotpatch
AssetsUtil.java 742B
ReflectUtil.java 2KB
HotPatch.java 2KB
AndroidManifest.xml 279B
hotpatch.iml 7KB
.gitignore 8B
build.gradle 597B
libs
app
proguard-rules.pro 654B
src
test
java
com
aitsuki
hotpatchdemo
ExampleUnitTest.java 331B
androidTest
java
com
aitsuki
hotpatchdemo
ApplicationTest.java 367B
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 214B
strings.xml 78B
styles.xml 394B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
activity_main.xml 727B
values-w820dp
dimens.xml 364B
assets
hack.jar 1KB
java
com
aitsuki
hotpatchdemo
HotPatchApplication.java 525B
Cat.java 167B
MainActivity.java 572B
AndroidManifest.xml 812B
app.iml 7KB
.gitignore 8B
build.gradle 2KB
libs
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 231B
patch_dex.jar 1KB
.gitignore 105B
buildsrc
buildsrc.iml 20KB
src
main
groovy
com
aitsuki
plugin
PreDexTransform.groovy 3KB
Register.groovy 516B
Inject.groovy 4KB
JarZipUtil.groovy 3KB
local.properties 450B
build.gradle 205B
settings.gradle 49B
hack
hack.iml 7KB
proguard-rules.pro 654B
src
test
java
com
aitsuki
hack
ExampleUnitTest.java 323B
androidTest
java
com
aitsuki
hack
ApplicationTest.java 359B
main
res
drawable
values
strings.xml 70B
java
com
aitsuki
hack
AntilazyLoad.java 102B
AndroidManifest.xml 275B
.gitignore 8B
build.gradle 597B
libs
build.gradle 521B
共 59 条
- 1
资源评论
SEU_Calvin
- 粉丝: 3w+
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功