滴滴的VirtualApk插件化Android项目使用步骤记录

1、VirtualApk介绍:

virtualApk是滴滴出行自主研发的一款优秀的插件化框架,拥有入侵性底、兼容性优秀和功能完备的优点。也正因为是这些优点让我在接触插件化形式开发选中了VirtualApk为切入点。VirtualApk在解耦方面,VirtualAPK是开源方案的首选,推荐大家使用。

VirtualApk项目地址:https://github.com/didi/VirtualAPK

2、为什么写这篇文章:

首先,这篇文章只是作为我的使用记录,这一次使用完后不知道什么时候会再次使用,所以为了避免自己对VirtualApk的遗忘,写了这一边“备忘录”。这篇文章没有源码介绍;没有架构分析;也没有实现方式,只是罗列步骤介绍如何使用VirtualApk框架。如果想要知道这些知识的大神们,后面的就不用看了,没什么技术含量,关于这方面的内容找度娘直接搜索有很多。

3、切入正题:

接下来,正式开始整合Android项目使用VirtualApk的步骤。

说一下名词:

宿主项目:要接入插件的承载项目。

插件项目:作为插件被宿主项目所使用的项目。

首先,创建项目。项目中包含默认的Module-->app。暂时把它作为宿主项目。

然后,配置宿主项目:

微笑在工程根目录下build.gradle中添加:

微笑在App的build.gradle中顶部添加

微笑在App的build.gradle中 compile 添加


4、宿主项目的代码编写:

第一步:

创建class文件,集成Application类:


重写TestApplication类的attachBaseContent方法:


@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    PluginManager.getInstance(base).init();
}
PluginManager.getInstance(base).init();// 这行代码是对VirtualApk的初始化

第二步:

编写Activity内容:为界面创建一个按钮,为按钮添加onClick事件,触发启动插件Activity操作。

注意:在触发启动插件之前,需要提前加载插件。

private void loadPlugin() {
    //注意在Androidmanifest.xml文件中添加文件读取权限
    String _path = Environment.getExternalStorageDirectory().getAbsolutePath().concat("/" + "plugin.apk");
    File _file = new File(_path);
    mFileExists = _file.exists();
    if (mFileExists) {
        try {
            PluginManager.getInstance(this).loadPlugin(_file);
        } catch (Exception _e) {
            mFileExists = false;
        }
    }
}

Button点击触发事件内容:

if (mFileExists) {
    intent.setClass(this, TestActivity.class);
    intent.setClassName("com.musi.pluginapp", "com.musi.pluginapp.PluginActivity");
    startActivity(intent);
} else {
    Toast.makeText(FirstActivity.this, "文件包不存在!", Toast.LENGTH_SHORT).show();
    return;
}

到此,宿主配置完成。

5、插件项目配置

为当前Project添加plugin Module:

第一步:

在插件项目根目录下build.gradle中顶部添加依赖以及插件配置信息




第二步:界面编写:

用于区分宿主界面启动插件界面成功,在插件界面添加了一个TextView,text内容写上当前界面是插件Activity的界面。

第三步:呃。。。没了   插件项目配置完成了。

6、构建插件

使用git构建:进入项目插件项目根目录,点击右键Git Bash Here 
输入:

./gradlew clean assemblePlugin   或者   gradle clean assemblePlugin


        我就呵呵了,没成功,查找资料,结果gradle可以全自动构建一键搞定:

        

    双击assemblePlugin直接构建完成,完成后插件目录地址:..(插件项目根目录)\build\outputs\plugin\release



这里有个坑:在进行插件构建时,如果宿主项目没有被运行过或者说被构建过,进行插件构建才能成功。

还有一个坑:资源共享问题,插件项目资源和宿主项目资源的id不能相同,直白一点就是名字不能项目。宿主项目的MainActivity启动插件项目的MainActivity。由于两个Activity所引用的布局资源文件的名字都是layout_main.xml,导致虽然插件Activity被启动成功,但是所引用的布局文件却是宿主项目的layout_main.xml。

将这个插件放置到android手机固定的位置,这个位置在宿主项目中按钮点击事件启动插件时会用到。


插件放到固定目录 运行宿主程序,点击按钮,启动插件Activity。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值