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的再次接触相关推荐

  1. gradle 打包Android,用Gradle 插件打包android程序

    类型:社交聊天大小:1012KB语言:中文 评分:.0 标签: 立即下载 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是grad ...

  2. android 显示天气插件下载,Android天气插件

    Android天气插件 天气插件Android SDK,包括实况天气.空气质量.灾害预警.生活指数等天气内容,支持在Android应用任意位置加入天气内容,并可生成天气频道页面. 下载 # 适配版本 ...

  3. Android动态秒针插件app,Android 8.1 Launcher3实现动态指针时钟功能

    本文主要实现功能,可能有不合理的地方 首先创建一个实现功能的工具里,直接上代码: import android.content.Context; import android.graphics.Bit ...

  4. android 热更新 方案,与Android热更新方案Amigo的初次接触

    主要记下引入Amigo的过程. 修复前:点击文字没有跳转 修复后:点击文字可以跳转(增加了Activity和布局文件) 其实热更新最重要的是不需要重新安装apk,有的甚至不需要重启app,就可以更新代 ...

  5. android studio lambda插件,在Android Studio中使用Lambda表达式(retrolambda)

    在Android Studio中使用Lambda表达式 要在Android Studio中使用Lambda表达式,需要借助一个gradle插件来完成. A gradle plugin for gett ...

  6. android中json插件,【Android原生插件】package.json中关于第三方aar的配置

    按照文档(https://ask.dcloud.net.cn/article/35414)所说: dependencies节点特殊说明 android插件中集成的第三方SDK 如果是jar或so放入到 ...

  7. android开发rn插件,在Android原生应用中嵌入React Native

    开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...

  8. uni-app更新某个组件版本;uni-app更新插件版本;uni-app更新uni_modules插件;uni-app小程序更新某一个组件的版本库

    uni-app官方介绍的更新某一个组件的uni_modules方法 注意:本篇只是记录更新uni-app的组件库下某一个组件的版本.不是更新微信小程序版本. 场景原因:项目最初是去年开发的,当时下载了 ...

  9. android studio 2d插件,在Android Studio中添加Overlap2D库作为依赖项

    include 'desktop', 'core', 'Overlap2dRuntime' project(':Overlap2dRuntime').projectDir = new File(set ...

最新文章

  1. Linux 命令 top 学习总结
  2. 【分布式共识三】拜占庭将军问题----书面协议
  3. Day 9: TextBlob——对文本进行情感分析
  4. 【图像分割模型】以RNN形式做CRF后处理—CRFasRNN
  5. oracle的高水位和低水位实验,Oracle 高水位问题
  6. 【转】C#格式化字符串
  7. 基于VHDL报警系统设计
  8. Linux Makefile 中的陷阱【转】
  9. 为EasyUI 的Tab 标签添加右键菜单
  10. python调用数据库数据创建函数_Pyhton应用程序数据库函数封装
  11. android 浮动按钮拖拽,小程序拖拽浮动按钮
  12. Mosquitto安装及使用简介
  13. 空头平仓什么意思_什么是白糖期货期权仿真交易套利机会?
  14. 马哥Linux学习笔记2-3Linux命令帮助的获取详解
  15. 代理记账和专职会计哪个更适合企业?
  16. [转载]Matlab定积分近似计算
  17. dataframe画图
  18. MP3参数,格式,术语有关一切内容详解。
  19. 阿里云虚拟机多域名配置
  20. 基于JAVA个人交友网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署mp4

热门文章

  1. SharePoint 2013 图文开发系列之创建内容类型
  2. linq TO XML 基础
  3. Navicat Monitor v1.7的新功能说明
  4. 实况CDN专线网络技术架构如何?
  5. 什么是SDN以及SD-WAN的发展方向?—Vecloud微云
  6. 解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' 的异常
  7. servlet配置web.xml问题
  8. oracle创建分区表
  9. 关于for循环处理列表的思考
  10. leetcode 470. 用 Rand7() 实现 Rand10()