一、VirtualAPK 介绍

VirtualAPK 是我们推出的一款Android平台上的插件化方案,通过VirtualAPK,可以让APP无需重新发版即可上线新功能。

之所以做这件事,是因为传统的开发流程中,APP进行版本迭代的时候,有着严格的时间周期的要求,必须在规定的时间点完成功能开发,也必须在规定的时间点完成渠道投放,这就让APP的版本迭代有了一定的限制,无法做到APP的随时更新,于是我们开发了VirtualAPK,通过VirtualAPK,APP发版将不再有时间点的限制,可以随心所欲地按需更新。

为了实现这一功能,我们首先将一个APP拆成两个部分,分别为宿主和插件,其中宿主中没有或者只有少量无需更新的逻辑,而所有的业务逻辑代码则位于插件中,每次APP更新的时候,我们只需要更新插件即可。在技术上,通过Android的动态加载机制来加载插件,并完成了对各个版本Android系统的拦截,使得插件的开发和传统的Android开发保持一致,支持插件的代码、资源访问,并支持四大组件。

二、集成过程

遇到的问题:
1. 可以跳转,但是跳转到了宿主的activity?
原因:插件布局文件名称与宿主页面名称一致;
2. 可以跳转,生命周期也执行了,但是白板?
问题:编译失败的问题
3. Error:A problem occurred configuring project ':app_plugin'. > The directory of host application doesn't exist!
解决办法:修改宿主路径;
4. Error:A problem occurred configuring project ':app_plugin'. > Can't find D:\workspaceghnice\RPluguin\VAHostDemo\app\build\VAHost\Host_R.txt, please check up your host application need apply com.didi.virtualapk.host in build.gradle of host application
解决办法:在App的工程模块的build.gradle添加使用gradle插件;
同时clean project;
5. Can't find D:\workspaceghnice\RPluguin\VAHostDemo\app\build\VAHost\versions.txt
在4的基础上 rebuild project;
6. Error:A problem occurred configuring project ':app_plugin'. > Failed to notify project evaluation listener. > com/android/builder/dependency/ManifestDependency
修改项目gradle 版本为2.1.3 (原来是2.2.3)
7. Error:Execution failed for task ':app_plugin:transformClassesAndResourcesWithStrippedForRelease'. > Cannot cast object 'null' with class 'org.codehaus.groovy.runtime.NullObject' to class 'java.util.Set'
解决办法:在宿主gradle 加 core 依赖;
8. 提示:宿主可以是debug,插件必须是release。你在buildTye里面加个release。
9.PackageParser: Unknown element under : meta-data at /storage/emulated/0/va_plugin.apk Binary XML file line #11
android.content.res.Resources$NotFoundException: File res/mipmap-xxhdpi-v4/ic_launcher.png from xml type layout resource ID #0x7f030000

解决办法:将插件的清单文件使用的laucher 放在drawable 目录;
10. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
前提:宿主和插件的布局文件名称已经是不一致的。
11. Error:Execution failed for task ':app_plugin:transformClassesAndResourcesWithStrippedForRelease'. > Cannot cast object 'null' with class 'org.codehaus.groovy.runtime.NullObject' to class 'java.util.Set'
解决办法:将插件工程与宿主工程单独开来;

三、参考

介绍文档:

1. infoq http://www.infoq.com/cn/news/2017/06/VirtualAPK-opensource2. http://geek.csdn.net/news/detail/1309173. 官网:https://github.com/didi/VirtualAPK

更多相关文章

  1. android 程序开发的插件化 模块化方法 之二
  2. 关于“Android SDK manager中不出现完整Android版本安装包列表”
  3. Android关于apk版本更新方法
  4. Android插件开发初探——基础篇
  5. 使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本
  6. [Android Studio 权威教程]Android Studio 三种添加插件的方式
  7. [翻译]Android教程-保存数据-支持不同的平台版本
  8. Android各版本发布时间及对应API(2019.3.2截至Android最新版本 P)m
  9. 报道:Android成为96%的新手机恶意软件的宿主机

随机推荐

  1. Android开发高薪之路 蜂窝教育与您同行
  2. Android(安卓)EditText的使用
  3. Android(安卓)Sqlite 数据库—基础篇
  4. Android主流屏幕分辨率介绍
  5. android 7种网络连接方式《IT蓝豹》
  6. 第五章 应用:Hello World!——上
  7. ListView有背景图片或背景颜色,那么在滑动
  8. android学习五(android中基本控件的使用)
  9. android键盘的回车键修改和监听
  10. android笔记