当前位置: 首页 > 工具软件 > VirtualAPK > 使用案例 >

著名android插件化框架,《Android 插件化框架VirtualAPK :(一)基本集成》

习哲彦
2023-12-01

一、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-opensource

2. http://geek.csdn.net/news/detail/130917

3. 官网:https://github.com/didi/VirtualAPK

 类似资料: