滴滴virtualapk插件框架

       最近都在搞插件框架,为项目搭建用,之前集成了下阿里的atlas,现在送上一篇滴滴的virtualapk,就个人而言,滴滴的集成过程比阿里简单些,有兴趣的可以看看我atlas的:https://blog.csdn.net/lovelixue/article/details/81141213

       废话不多说,上过程

1.环境配置,很重要,官方有规定gradle使用哪个之类的,我用的不同,我就基于我的来写

1.1新建一个工程,根目录的build.gradle里面

classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.didi.virtualapk:gradle:0.9.8.4'

根目录 就配置这两个

1.2在app(宿主)目录下的build.gradle文件下添加

apply plugin: 'com.didi.virtualapk.host'

在dependencies里面添加

implementation 'com.didi.virtualapk:core:0.9.6'

1.3重点来了,通过file,new module的形式新建一个module,然后我命名为plugindemo,然后在nodule.gradle里面添加

implementation 'com.didi.virtualapk:core:0.9.6'

接着在末端添加

apply plugin: 'com.didi.virtualapk.plugin'
virtualApk {
    // 插件资源表中的packageId,需要确保不同插件有不同的packageId.
    packageId = 0x6f             // The package id of Resources.
    // 宿主工程application模块的路径,插件的构建需要依赖这个路径
    targetHost='../app' // The path of application module in host project.
    //默认为true,如果插件有引用宿主的类,那么这个选项可以使得插件和宿主保持混淆一致
    applyHostMapping = true      // [Optional] Default value is true.
}

截图

基本 环境就到此为止了,接下来代码部分

2.代码添加并验证

在app的mainactivity里面添加两个按钮,一个是跳转到module去的,一个是加载插件的

public void loadPlugin() {
    PluginManager pluginManager = PluginManager.getInstance(this);
    //此处是当查看插件apk是否存在,如果存在就去加载(比如修改线上的bug,把插件apk下载到sdcard的根目录下取名为plugin-release.apk)
    File apk = new File(Environment.getExternalStorageDirectory(), "plugin-release.apk");
    if (apk.exists()) {
        try {
            pluginManager.loadPlugin(apk);
            Toast.makeText(this, "插件加载成功", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "插件加载异常!", Toast.LENGTH_SHORT).show();
        }
    }
}

截图

这个时候跳转是不行的,接下来就需要加载插件了 ,首先需要生成插件apk

官方文档是通过命令

gradle clean assemblePlugin来构建插件

如果不想这样,也可以通过直接gradle的来,具体如下

这样 就生成插件apk了,同时官方文档介绍了下这个,就是只能生成release版本的,插件包位于build目录下

到这里 就可以结束验证了,点击加载插件,然后再点击跳转,你会发现可以跳转了,如果如果有帮助可以帮我点个赞或者githup上面star一下,谢谢,如果有问题,可以下面评论回复,一起学习探讨。下面贴上注意点

1.集成环境一定要配置好

2.生成的插件包和加载的时候名字一定要一样

3.注意SD卡的权限

贴上相关参考文档和我的githup代码

https://github.com/didi/VirtualAPK

https://github.com/didi/VirtualAPK/wiki/VirtualAPK-%E6%9E%84%E5%BB%BA%E5%99%A8-API-%E6%A6%82%E8%A7%88

githup:https://github.com/sdgSnow/VirtualAPK

希望对大家有帮助。

遗留了一个问题,宿主app和module的数据传递,请求指教

 

加几个遇到的坑

这个问题是因为gradle版本问题,我使用的3.1.2报错了,改成3.0.0可以

虚拟以太网是指在真实的互联网中,通过软件方法在数据链路层实现一个 按以太网原理工作的虚拟网络。在虚拟网络中可以透明地运行所有应用程 序,支持各种第三层网络协议,如IP,IPv6,IPX等,可以进行普通的文件 共享以及ERP、VoIP等待应用。 特点: . 配置极其简单。 . 树形结构,可以从任一个节点接入,可谓一点接入,全网通行。 . 配合握手服务器(可由任一节点充当),可以实现两个节点间 直接 点对点 通讯,无需中转 !! . 3DES 数据加密 用途: . 创建企业虚拟网 . 创建专题虚拟网,你可以作为虚拟网的树根,然后把所有志同道合的人连接在一起,形成一个独具特色的 “虚拟以太网社区”。 简单地说,任何人都可以用VE建立自己的虚拟Internet世界。 使用说明: 1.双击virtualether.exe运行,程序会自动安装驱动程序va.sys,成功后会弹出设置界面。 2.设置方法。virtual ethernet的设置包括本地(local),远端(remote)和代理(proxy)。   local设置,本端作为虚拟HUB接受连接:  . 设置本端的连接监听端口,即虚拟HUB的连接端口。  . 设置本端的连接密码,当远端连接过来时,需要进行密码验证。 . 设置点对点通讯的握手服务器域名/IP,及其端口。 . 如果本端想做握手服务器,可以设置一个本地的UDP端口。 注:只有本端想做虚拟HUB时才需要正确设置。    remote设置,本端作为虚拟网卡向虚拟HUB发起连接:  . 远端虚拟HUB的IP或域名(当然可以是动态域名)  . 远端虚拟HUB的密码,即远端在 local 设置中的密码 . 远端虚拟HUB的连接端口,即远端在 local 设置中监听端口 注:1.只有本端想与虚拟HUB连接时才需要正确设置。 2.如果想连接到自己的虚拟HUB,则选择“connect to my local virtual HUB”。 Proxy设置,如果你机器通过代理上网,如HTTP代理,Socket代理,就需要根据你的 代理情况进行设置。(这个功能可以穿透firewall,网管要小心啦) 两个VA之间发生通讯时,如果已经配置握手服务器,软件会自动尝试建立点对点通道。 VE不会自动为虚拟网卡分配IP,如果有这个需要,只需要在虚拟网络中找一台机器运行DHCP服务即可。如选择其中一台提供HUB的机器运行DHCP服务。 如果你的上网方式是通过 http 代理,则可能需要把将要连接的虚拟HUM的监听端口设置成443才可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值