VirtualAPK宿主和插件交互解析
来源:互联网 发布:linux root权限 编辑:程序博客网 时间:2024/06/04 19:43
VirtualAPK最大的特色在于支持宿主和插件之间的数据交互,在官方文档中也介绍了VirtualAPK数据交互的原理方法,但是我相信还是有很多人对此一头雾水,首先上一张官网的交互教程:
一、数据交互原理
官网中提到了aar这个文件,这是安卓特有的一种压缩格式,对于jar文件大家肯定都不陌生,jar文件可以理解为代码的压缩文件,而aar可以理解为代码+res资源的压缩文件。有人看到这个aar肯定第一时间还是懵逼,aar文件作为数据容器,宿主和插件都可以通过这个容器存取数据。我用一张图来描述我对VirtualAPK数据交互的理解:
二、代码实现
1、创建aar文件
**新建一工程,将modle下的gradle文件最上边一行改为:apply plugin: ‘com.android.library’,并把applicationId删掉,意味着这个modle是作为library来创建使用的。这里有个地方应注意:library的sdkVersion应和项目保持一致。
**新建Bean类,作为宿主和插件数据交互的数据对象,这个bean对象只有一个name字段,实际应用中根据自己实际项目需求设计。
public class Bean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
**新建BeanManager类来管理数据,内部使用静态方法用于获取bean
public class BeanManager { private static Bean bean; public static void init(Bean bean) { BeanManager.bean = bean; } public static Bean getInstance() { return bean; }}
**写好这两个类后,就可以打包生成aar文件了,这里我们将打包生成的aar文件命名为library.aar,生成方法可以参考这篇博客:http://blog.csdn.net/pbm863521/article/details/54317757
2、宿主应用aar文件
**宿主工程引用aar文件,将aar文件导入宿主工程的libs文件夹下,然后在gradle中配置library.aar为工程应用(注意重新build工程):
**在宿主工程中使用该aar:
public class MainActivity extends Activity { private Button buttonOne; private Button buttonTwo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.host_activity_main); buttonOne = (Button) findViewById(R.id.buttonOne); //加载插件 String path = Environment.getExternalStorageDirectory().getAbsolutePath().toString() + "/test.apk"; File plugin = new File(path); try { PluginManager.getInstance(this).loadPlugin(plugin); } catch (Exception e) { e.printStackTrace(); } //注意这里!!!,就是刚才的library.aar中定义的两个类,在这可以直接使用 Bean bean = new Bean(); bean.setName("haoxinlei"); BeanManager.init(bean); //点击按钮后,打开插件的一个页面,在插件的页面中获取这个数据 buttonOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (PluginManager.getInstance(MainActivity.this).getLoadedPlugin("com.plugin") == null) { Toast.makeText(MainActivity.this, "加载插件失败", Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(); intent.setClassName("com.plugin", "com.plugin.PluginLayoutActivity"); startActivity(intent); } }); }}
3、插件应用aar文件
**插件中使用library.aar文件的方法和宿主一样不再赘述,直接上插件中获取数据的代码。
public class PluginLayoutActivity extends Activity { private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.plugin_layout); text = (TextView) findViewById(R.id.text); text.setText("你好,这是第一个插件"); //注意这里!!在这里直接获取数据。 String str = BeanManager.getInstance().getName(); Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); }}
ok,到这里,整个交互就完成了,插件中获取到了宿主的数据。VirtualAPK在打包插件的时候,会自动将插件gradle中和宿主一样的引用移除,当在宿主中打开插件的Acticity时,插件就会自动使用宿主中的引用了。如有错误,欢迎拍砖!
- VirtualAPK宿主和插件交互解析
- 滴滴插件化方案 VirtualApk 源码解析
- Android插件框架VirtualAPK学习和使用
- Android插件化快速入门与实例解析(VirtualApk)
- Android插件化快速入门与实例解析(VirtualApk)
- Android插件化快速入门与实例解析(VirtualApk)
- Android插件框架VirtualAPK
- 插件化方案-比较滴滴VirtualApk和360DroidPlugin
- 滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理
- VirtualAPK详解和使用
- VirtualAPK详解和使用
- android插件化框架-VirtualApk
- 滴滴插件化VirtualAPK框架原理解析(二)之Service 管理
- 滴滴插件VirtualApk学习一 编译
- VirtualAPK插件化方案原理探索
- docker容器和宿主机的文件交互
- vmware 宿主机和虚拟机进行交互的几个要素
- 工作流与宿主交互
- 类图学习,所有资料整理源于网络
- 258. Add Digits
- ImageView的ScaleType之见解
- 最合适UX设计师的五款原型工具
- https原理详解
- VirtualAPK宿主和插件交互解析
- java DES加密工具类
- SingleFragmentActivity
- codefoces730C Bulmart 二分答案+贪心check && 堆维护
- Java的21个技术点,你知道吗?
- 像数组一样使用NodeList:一个对象组合的有效用法
- 51nod 1003 阶乘后面0的数量
- BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草
- 摘要: Druid连接池一个设置引发的血案 -- 链接池出现问题