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

时间:2024-05-21 12:37:54

1、VirtualApk介绍:

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

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

2、为什么写这篇文章:

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

3、切入正题:

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

说一下名词:

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

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

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

然后,配置宿主项目:

滴滴的VirtualApk插件化Android项目使用步骤记录在工程根目录下build.gradle中添加:

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

滴滴的VirtualApk插件化Android项目使用步骤记录在App的build.gradle中顶部添加

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

滴滴的VirtualApk插件化Android项目使用步骤记录在App的build.gradle中 compile 添加

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

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

第一步:

创建class文件,集成Application类:

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

重写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:

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

第一步:

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

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


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

第二步:界面编写:

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

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

6、构建插件

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

./gradlew clean assemblePlugin   或者   gradle clean assemblePlugin


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

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

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

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


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

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

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


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

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