第一步:
根目录的build.gradle文件的配置
apply plugin: 'com.didi.virtualapk.host'
classpath 'com.didi.virtualapk:gradle:0.9.8.6'
第二步:
宿主gradle文件的配置
apply plugin: 'com.didi.virtualapk.host'
implementation 'com.didi.virtualapk:core:0.9.8'
第三步
在自定义applicaiton中去初始化VirtualAPK
并加载指定的插件
public class MyApp extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
PluginManager.getInstance(base).init();
}
@Override
public void onCreate() {
super.onCreate();
String pluginPath = Environment.getExternalStorageDirectory().getAbsolutePath().concat("/vk.apk");
File plugin = new File(pluginPath);
if (plugin.exists()) {
try {
PluginManager.getInstance(this).loadPlugin(plugin);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
第四步:
插件的gradle文件
apply plugin: 'com.didi.virtualapk.plugin'
implementation 'com.didi.virtualapk:core:0.9.8'
virtualApk {
packageId = 0x6f
targetHost = 'C:\\Users\\Devin\\Desktop\\virtualapk\\app'//宿主应用的app模块路径
applyHostMapping = true
}
第五步
宿主中通过Intent,和包名,activity名,跳转到插件的activity中
public class MainActivity extends AppCompatActivity {
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = findViewById(R.id.tv_suzhu);
tv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName("com.example.utils", "com.example.utils.UtilsActivity");
startActivity(intent);
}
});
}
}
第六步
打包插件
打包好的插件在这
把这个APK文件 下载到sd卡的根目录 并改名为 vk.apk。
然后可以运行程序了。
说一下在使用VirtualAPK中遇到过的问题
1.第六步打包插件时,一直打包失败,先通过build APKs 把宿主打包,再去打包插件就可以了
2.我的AS是3.4.2 build:gradle是3.4.2 gradle是5.1.1 NDK是18
一开始去直接依赖virtualapk时一直报错,百度了好多解决方案后
把build:gradle 修改为3.0.0
gradle修改为4.4
ndk修改为16
targetHost中要指向宿主的模块路径,如果指向了插件,会报错,并且百度不到解决方案,