三步把虚拟引擎接入自己的工程:初始化、安装、启动
集成只涉及三步
官方说明给出的最小集成路径非常短:初始化引擎 → 安装应用到虚拟环境 → 启动应用。以下代码整理自项目公开说明(Apache 2.0 协议),以 Java 为例。
第一步:在 Application 中初始化引擎
引擎必须在任何虚拟应用启动前完成初始化,官方做法是挂在 Application 的生命周期里:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
try {
BlackBoxCore.get().doAttachBaseContext(base, new ClientConfiguration() {
@Override
public String getHostPackageName() {
return base.getPackageName();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCreate() {
super.onCreate();
BlackBoxCore.get().doCreate();
}
两个回调的分工:attachBaseContext 阶段挂载引擎上下文(越早越好),onCreate 阶段完成引擎创建。ClientConfiguration 里的宿主包名配置返回宿主应用自己的包名即可。
第二步:安装应用到虚拟环境
两种入口,对应应用「已装在系统里」和「只有安装包」两种状态:
// 已安装的应用:直接给包名
BlackBoxCore.get().installPackageAsUser("com.tencent.mm", userId);
// 未安装的应用:给 APK 路径
BlackBoxCore.get().installPackageAsUser(new File("/sdcard/com.tencent.mm.apk"), userId);
userId 对应引擎的用户(容器)体系——应用装进哪个容器,就传哪个用户的 id,与界面上「用户备注与切换」背后的体系一致。
第三步:启动虚拟应用
BlackBoxCore.get().launchApk("com.tencent.mm", userId);
包名加用户 id,引擎接管后续的进程创建与环境构造,应用在虚拟环境内跑起来。
兼容性前置提醒
官方给集成者的一条关键建议:条件允许时把 targetSdkVersion 降到 28 或以下,兼容性更好。此外架构问题在集成场景同样存在——宿主本身也要考虑覆盖 32/64 位应用的范围,原理见32 位与 64 位安装包有什么区别。
跑通之后
三个调用能跑通,说明引擎初始化与调度链路正常。更细粒度的操作(枚举已装应用、读用户信息等)见下一页核心接口速查。