VirtualAPK 入坑记录
来源:互联网 发布:培训机构源码 编辑:程序博客网 时间:2024/05/22 02:25
Virtual APK 入坑
一.为什么选择VirtualAPK
1.插件开发等同于开发原生 APK,无需做特定的处理2.宿主和插件之间有耦合形态和独立两种关系,耦合形态时插件对宿主有代码和资源的依赖;独立形态时插件对宿主无任何依赖关系3.市场兼容性良好,经过了滴滴的实际检验![VA系统架构图](http://img.blog.csdn.net/20170817153429519?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hyaXNtYTY2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
二.接入流程{以 demo 工程为例说明}
1.宿主工程 project.gradle文件中添加 classPath: classpath 'com.didi.virtualapk:gradle:0.9.0'2.宿主工程 app.gradle 文件中引用 VA 插件: apply plugin: 'com.didi.virtualapk.host'3.宿主工程 app.gradle 文件中依赖 VA 插件: compile 'com.didi.virtualapk:core:0.9.0'4.插件工程 project.gradle 文件中添加 classpath: classpath 'com.didi.virtualapk:gradle:0.9.0'5.插件工程 app.gradle 文件中引用 VA插件 compile 'com.didi.virtualapk:core:0.9.0' apply plugin: 'com.didi.virtualapk.plugin' (选配)可以配置自定义的构建变体: productFlavors { beijing { applicationId 'com.didi.virtualapk.demo' } shanghai { applicationId 'com.didi.virtualapk.demo' } } 6.在插件中配置宿主信息 virtualApk { //指定插件资源表中的packageId,不同的插件不能相同{打包时宿主和插件资源会合并,所以不能重复} packageId = 0x6f //指定插件的宿主工程模块的相对路径{一般宿主工程只有一个 app 模块} targetHost = '../../VirtualAPK-master/app' //设置宿主和插件的混淆规则是否保持一致,默认为 true applyHostMapping = true
}
三.运行流程{以 demo 工程为例说明}
1.先运行宿主工程,安装到设备上,运行之后会生成宿主工程的版本信息{versions.txt}和资源id{Host_R.txt}![宿主运行后版本信息](http://img.blog.csdn.net/20170817153540117?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hyaXNtYTY2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)2.编译插件: a.terminal 中切换到插件工程根路径 ./gradlew assemblePlugin {此处不能运行./gradlew assembleRelease 或者 ./gradlew assembleDebug --》 java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity}3.push 插件 adb push app/build/outputs/apk/app-beijing-release-unsigned.apk /sdcard/Test.apk {这里可以选择不同的构建遍体进行 push}4.在宿主中加载插件 4.1 宿主模块Application 类中初始化 VA @override protected void attachBaseContext(Context base) { super.attachBaseContext(base); PluginManager.getInstance(base).init(); } 4.2 加载插件 PluginManager pluginManager = PluginManager.getInstance(base); File apk = new File(Environment.getExternalStorageDirectory(), "Test.apk"); if (apk.exists()) { try { pluginManager.loadPlugin(apk); } catch (Exception e) { e.printStackTrace(); } } 4.3跳转到插件 Intent intent = new Intent(); intent.setClassName("com.didi.virtualapk.demo", "com.didi.virtualapk.demo.aidl.BookManagerActivity"); startActivity(intent);
{插件的寻找以包名为唯一 id,不能直接指定 this,this 指的是插件本身引用}
阅读全文
3 0
- VirtualAPK 入坑记录
- React Native 入坑记录
- 正则表达式入坑记录
- 基于canvas的echars入坑记录
- 入职记录
- aapt解析的坑,记录一下防止再次掉入
- Android 插件化 RePlugin 入坑记录一
- Android 插件化 RePlugin 入坑记录二
- 初入AS浅记录
- Android插件框架VirtualAPK
- VirtualAPK的特性
- VirtualAPK 框架简介
- VirtualAPK框架接入
- VirtualAPK详解和使用
- VirtualAPK详解和使用
- 入坑
- 入坑!
- 入坑~
- Python函数式编程(map、reduce、filter、lambda)
- 匿名内部类访问方法成员变量需要加final的原因及证明
- 动态规划详解
- Django解决跨域访问报错/Cros问题
- 微信支付服务商APP支付申请
- VirtualAPK 入坑记录
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- YII2使用笔记
- EasyStream系列7之录制rtsp流
- Flex 布局教程
- 使用TA-Lib在vn.trader上开发CTA交易策略
- 最大公约数和最小公数的算法
- keepalived SIOCGMIIREG on em1 failed: Invalid argument SIOCGMIIREG on em1 failed: Invalid argument
- oracle认证考试报考须知