Amigo
作为一个“过气”的的热修复框架,用来学习和了解一下热修复的基本原理还是很好的。本文是本系列的第三篇。
前两篇:
原作者已经很久没有更新的,我之前适配了Android8.0 和gradle3.0,最近适配的Android P。 我使用的是最新的环境Android Studio 3.4.1。gradle 插件版本5.1.1 gradle版本 3.4.1 ,kotlin版本1.3.31。
目前在华为和一加的真机上测试,运行顺利。
1.gradle插件方面的适配
主要是gradle语法升级
gradle插件代码 AmigoPlugin.groovy
File manifestFile = output.processManifest.manifestOutputDirectory 复制代码
↓↓↓↓
File manifestFile = output.processManifest.manifestOutputDirectory.get().asFile 复制代码
and
String manifestPath = "${output.processManifest.manifestOutputDirectory.path}/AndroidManifest.xml"
复制代码
↓↓↓↓
String manifestPath = output.processManifest.manifestOutputDirectory.get().asFile.path+"/AndroidManifest.xml" 复制代码
这里代码主要是修改 AndroidManifest.xml
,把原来的Application修改成 me.ele.amigo.Amigo
,然后把原来的Application修改成一个Activity。
2.Amigo代码适配 AmigoInstrumentation.java
我们把系统原先的Instrumentation替换成我们自己的Instrumentation的时候,在Android P以下的系统是可以运行的,但是在Android P上就会抛出Uninitialized ActivityThread, likely app-created Instrumentation的异常,显然这是因为我们自己的Instrumentation的mThread为空导致的。
@Override
public Activity newActivity(ClassLoader cl, String className,
Intent intent)
throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
return oldInstrumentation.newActivity(cl, className, intent);
}
复制代码
3.AssetPath的适配
在Android P上AssetManager中已经没有了 ensureStringBlocks
方法了,根据网上的资料,这个方法只是需要在Android Kiakat上调用。
static void loadPatchResources(Context context, String checksum) throws Exception {
AssetManager newAssetManager = AssetManager.class.newInstance();
invokeMethod(newAssetManager, "addAssetPath", PatchApks.getInstance(context).patchPath(checksum));
invokeMethod(newAssetManager, "ensureStringBlocks");
replaceAssetManager(context, newAssetManager);
}
复制代码
↓↓↓↓
static void loadPatchResources(Context context, String checksum) throws Exception {
AssetManager newAssetManager = AssetManager.class.newInstance();
invokeMethod(newAssetManager, "addAssetPath", PatchApks.getInstance(context).patchPath(checksum));
if (Build.VERSION.SDK_INT <= 26) {
invokeMethod(newAssetManager, "ensureStringBlocks");
}
replaceAssetManager(context, newAssetManager);
}
复制代码
最后 github 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- TensorFlow XLA初步接触
- 测试自动化框架全接触
- Git之旅(4):第一次亲密接触
- 刚接触一个 Laravel 项目,你可以从这些地方入手
- 游戏制作之路(20)角色跳动之后怎么样检测接触地面
- Omi 入坑指南 The second floor 初步接触
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
京东平台运营攻略(全彩)
京东商学院 / 电子工业出版社 / 2015-5 / 69.00元
2014 年年末,京东POP 开放平台的入驻商家已超过6 万,京东平台被广泛关注和认可的同时,在电商江湖中仍颇具神秘色彩。面对碎片化的信息,京东的店铺经营者及希望入驻京东的准商家们,对于在京东如何利用丰富的各类平台资源,搭建并运营京东店铺,一直很难找到全面而系统的资料。 《京东平台运营攻略(全彩)》由京东官方出品,动员了京东内部涉及第三方店铺业务线的众多部门,由多位业务精英参与撰写,保证了内......一起来看看 《京东平台运营攻略(全彩)》 这本书的介绍吧!