android热更新插件,与Android热更新方案Amigo的再次接触
Amigo
作为一个“过气”的的热修复框架,用来学习和了解一下热修复的基本原理还是很好的。本文是本系列的第三篇。
前两篇:
与Android 热更新方案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语法升级
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);
}
复制代码
android热更新插件,与Android热更新方案Amigo的再次接触相关推荐
- gradle 打包Android,用Gradle 插件打包android程序
类型:社交聊天大小:1012KB语言:中文 评分:.0 标签: 立即下载 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是grad ...
- android 显示天气插件下载,Android天气插件
Android天气插件 天气插件Android SDK,包括实况天气.空气质量.灾害预警.生活指数等天气内容,支持在Android应用任意位置加入天气内容,并可生成天气频道页面. 下载 # 适配版本 ...
- Android动态秒针插件app,Android 8.1 Launcher3实现动态指针时钟功能
本文主要实现功能,可能有不合理的地方 首先创建一个实现功能的工具里,直接上代码: import android.content.Context; import android.graphics.Bit ...
- android 热更新 方案,与Android热更新方案Amigo的初次接触
主要记下引入Amigo的过程. 修复前:点击文字没有跳转 修复后:点击文字可以跳转(增加了Activity和布局文件) 其实热更新最重要的是不需要重新安装apk,有的甚至不需要重启app,就可以更新代 ...
- android studio lambda插件,在Android Studio中使用Lambda表达式(retrolambda)
在Android Studio中使用Lambda表达式 要在Android Studio中使用Lambda表达式,需要借助一个gradle插件来完成. A gradle plugin for gett ...
- android中json插件,【Android原生插件】package.json中关于第三方aar的配置
按照文档(https://ask.dcloud.net.cn/article/35414)所说: dependencies节点特殊说明 android插件中集成的第三方SDK 如果是jar或so放入到 ...
- android开发rn插件,在Android原生应用中嵌入React Native
开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...
- uni-app更新某个组件版本;uni-app更新插件版本;uni-app更新uni_modules插件;uni-app小程序更新某一个组件的版本库
uni-app官方介绍的更新某一个组件的uni_modules方法 注意:本篇只是记录更新uni-app的组件库下某一个组件的版本.不是更新微信小程序版本. 场景原因:项目最初是去年开发的,当时下载了 ...
- android studio 2d插件,在Android Studio中添加Overlap2D库作为依赖项
include 'desktop', 'core', 'Overlap2dRuntime' project(':Overlap2dRuntime').projectDir = new File(set ...
最新文章
- Linux 命令 top 学习总结
- 【分布式共识三】拜占庭将军问题----书面协议
- Day 9: TextBlob——对文本进行情感分析
- 【图像分割模型】以RNN形式做CRF后处理—CRFasRNN
- oracle的高水位和低水位实验,Oracle 高水位问题
- 【转】C#格式化字符串
- 基于VHDL报警系统设计
- Linux Makefile 中的陷阱【转】
- 为EasyUI 的Tab 标签添加右键菜单
- python调用数据库数据创建函数_Pyhton应用程序数据库函数封装
- android 浮动按钮拖拽,小程序拖拽浮动按钮
- Mosquitto安装及使用简介
- 空头平仓什么意思_什么是白糖期货期权仿真交易套利机会?
- 马哥Linux学习笔记2-3Linux命令帮助的获取详解
- 代理记账和专职会计哪个更适合企业?
- [转载]Matlab定积分近似计算
- dataframe画图
- MP3参数,格式,术语有关一切内容详解。
- 阿里云虚拟机多域名配置
- 基于JAVA个人交友网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署mp4
热门文章
- SharePoint 2013 图文开发系列之创建内容类型
- linq TO XML 基础
- Navicat Monitor v1.7的新功能说明
- 实况CDN专线网络技术架构如何?
- 什么是SDN以及SD-WAN的发展方向?—Vecloud微云
- 解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' 的异常
- servlet配置web.xml问题
- oracle创建分区表
- 关于for循环处理列表的思考
- leetcode 470. 用 Rand7() 实现 Rand10()