文章目录
前言
一、VirtualApp 安装并启动资源中自带的 APK 插件流程
1、依赖 VirtualApp 库
2、插件 APK 准备
3、启动插件引擎
4、拷贝 APK 到存储目录
5、安装插件
6、启动插件
二、完整源码
1、自定义 Application 源码
2、MainActivity 主界面源码
3、执行效果
前言
在 【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 ) 和 【Android 插件化】VirtualApp 接入 ( 安装 APK 插件应用 | 启动插件 APK 应用 | MainActivity 安装启动插件完整代码 ) 博客中 , 简要介绍了应用接入 VirtualApp 的流程 ;
下面开始封装一个 APK 插件到应用中 , 并启动该 APK 插件 ;
一、VirtualApp 安装并启动资源中自带的 APK 插件流程
1、依赖 VirtualApp 库
工程中 , 添加 VirtualApp 的 依赖库 , 该依赖库是 Android Library 类型的 ;
在 Module 下的 build.gradle 中设置 VirtualApp 依赖库 依赖 ;
dependencies { implementation project(':lib') }
2、插件 APK 准备
将插件 APK 文件 , 放置在 assets 资源目录下 ;
3、启动插件引擎
在自定义的 Application 中的 protected void attachBaseContext(Context base) 方法中 , 通过调用 VirtualCore.get().startup(base) 方法 , 启动插件化引擎 ;
public class VApp extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); try { VirtualCore.get().startup(base); } catch (Throwable e) { e.printStackTrace(); } } }
4、拷贝 APK 到存储目录
将 VirtualApp\myapp\src\main\assets\app.apk 文件 , 拷贝到 /data/user/0/com.example.myapp/files/app.apk 位置 ;
之后可以加载 /data/user/0/com.example.myapp/files/app.apk 插件文件 ;
拷贝过程如下 :
/** * 将 VirtualApp\myapp\src\main\assets\app.apk 文件 , * 拷贝到 /data/user/0/com.example.myapp/files/app.apk 位置 */ public void copyFile() { try { InputStream inputStream = getAssets().open("app.apk"); FileOutputStream fileOutputStream = new FileOutputStream(new File(getFilesDir(), "app.apk")); byte[] buffer = new byte[1024 * 4]; int readLen = 0; while ( (readLen = inputStream.read(buffer)) != -1 ) { fileOutputStream.write(buffer, 0, readLen); } inputStream.close(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { Log.i("HSL", "文件拷贝完毕"); } }