5、安装插件
调用 VirtualCore.get().installPackage(getFilesDir() + "/app.apk", flags) 方法安装插件 , 该方法第一个参数是 APK 文件的路径 , 即 /data/user/0/com.example.myapp/files/app.apk , 第二个参数是 int 整型 72 ;
private void installPackage() { // int COMPARE_VERSION = 0X01 << 3; // int SKIP_DEX_OPT = 0x01 << 6; // 或运算结果 72 int flags = InstallStrategy.COMPARE_VERSION | InstallStrategy.SKIP_DEX_OPT; // 安装 SD 卡根目录中的 app.apk 文件 // /storage/emulated/0/app.apk VirtualCore.get().installPackage(getFilesDir() + "/app.apk", flags); }
6、启动插件
调用 VirtualCore.get().getLaunchIntent("kim.hsl.svg", 0) 获取已安装插件应用的启动意图 Intent 实例对象 , 根据包名获得 ;
调用 VActivityManager.get().startActivity(intent, 0) 方法 , 启动插件应用 ;
private void startApp() { // 打开应用 Intent intent = VirtualCore.get().getLaunchIntent("kim.hsl.svg", 0); /*VirtualCore.get().setUiCallback(intent, null); try { VirtualCore.get().preOpt("kim.hsl.svg"); } catch (Exception e) { e.printStackTrace(); }*/ VActivityManager.get().startActivity(intent, 0); finish(); }
二、完整源码
1、自定义 Application 源码
package com.example.myapp; import android.app.Application; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.lody.virtual.client.core.VirtualCore; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class VApp extends Application { private static VApp gApp; public static VApp getApp() { return gApp; } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); try { VirtualCore.get().startup(base); } catch (Throwable e) { e.printStackTrace(); } } @Override public void onCreate() { gApp = this; super.onCreate(); /*new Thread(){ @Override public void run() { File file = new File(getFilesDir(), "app.apk"); // 如果文件不存在 , 则拷贝文件 if (!file.exists()) { // 拷贝文件到内置存储 copyFile(); } } }.start();*/ File file = new File(getFilesDir(), "app.apk"); // 如果文件不存在 , 则拷贝文件 if (!file.exists()) { // 拷贝文件到内置存储 copyFile(); Toast.makeText(this, file.getAbsolutePath() + " 文件拷贝完毕 , 可以安装插件", Toast.LENGTH_LONG).show(); Log.i("HSL", file.getAbsolutePath() + " 文件拷贝完毕 , 可以安装插件"); } else { Toast.makeText(this, file.getAbsolutePath() + " 文件已存在 , 可以安装插件", Toast.LENGTH_LONG).show(); Log.i("HSL", file.getAbsolutePath() + " 文件已存在 , 可以安装插件"); } } /** * 将 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", "文件拷贝完毕"); } } }
2、MainActivity 主界面源码
package com.example.myapp; import android.content.Intent; import android.os.Bundle; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.lody.virtual.client.core.InstallStrategy; import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.client.ipc.VActivityManager; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 是否自动安装并启动插件应用 boolean isAuto = true; if (isAuto) { new Thread() { @Override public void run() { // 安装插件 installPackage(); SystemClock.sleep(3000); //启动插件 startApp(); } }.start(); } } /** * 安装应用 * @param view */ public void onClick0(View view) { //installPackage(); } private void installPackage() { // int COMPARE_VERSION = 0X01 << 3; // int SKIP_DEX_OPT = 0x01 << 6; // 或运算结果 72 int flags = InstallStrategy.COMPARE_VERSION | InstallStrategy.SKIP_DEX_OPT; // 安装 SD 卡根目录中的 app.apk 文件 // /storage/emulated/0/app.apk VirtualCore.get().installPackage(getFilesDir() + "/app.apk", flags); } /** * 启动应用 * @param view */ public void onClick(View view) { //startApp(); } private void startApp() { // 打开应用 Intent intent = VirtualCore.get().getLaunchIntent("kim.hsl.svg", 0); /*VirtualCore.get().setUiCallback(intent, null); try { VirtualCore.get().preOpt("kim.hsl.svg"); } catch (Exception e) { e.printStackTrace(); }*/ VActivityManager.get().startActivity(intent, 0); finish(); } }
3、执行效果