VirtualAPK 安装与配置完全指南
项目基础介绍与主要编程语言
项目简介
VirtualAPK是由滴滴出行开发的一个强大的轻量级Android插件化框架。它允许开发者动态加载和运行一个APK文件(即“LoadedPlugin”),让这些插件如同已安装的应用一样无缝运行。支持包括Activity、Service、BroadcastReceiver、Provider在内的组件,并兼容几乎所有的Android特性及设备,最低支持API Level 15。
编程语言
主要编程语言是Java,部分构建脚本使用Groovy。
关键技术和框架
- 插件化技术: 允许业务模块以插件形式存在,实现动态加载。
- Gradle插件: 自定义Gradle插件用于简化项目构建和插件化的集成流程。
- 动态加载: 通过在运行时加载和执行插件APK中的类和资源,实现热更新能力。
- 资源隔离与映射: 提供了资源ID的处理机制,确保插件与宿主应用资源不会冲突。
安装与配置步骤
准备工作
- 环境需求: 确保你的开发环境中安装了Android SDK,并且Gradle版本适宜。
- Git: 安装Git工具,用于克隆项目源码。
- IDE: 推荐使用Android Studio,确保其版本兼容。
克隆项目
git clone https://github.com/didi/VirtualAPK.git
宿主项目设置
-
添加Gradle依赖: 在项目根目录的
build.gradle
文件中加入以下依赖:dependencies { classpath 'com.didi.virtualapk:gradle:0.9.8.6' }
-
应用插件: 在宿主应用程序的模块
build.gradle
里添加插件:apply plugin: 'com.didi.virtualapk.host'
-
配置核心库依赖: 同样在宿主模块的
build.gradle
添加以下代码:implementation 'com.didi.virtualapk:core:0.9.8'
-
初始化PluginManager: 在宿主应用的
YourApplication.java
覆盖attachBaseContext
方法:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); PluginManager.getInstance(base).init(); }
-
ProGuard配置: 在宿主项目的
proguard-rules.pro
文件添加保留规则:-keep class com.didi.virtualapk.internal.VAInstrumentation{*;} -keep class com.didi.virtualapk.internal.PluginContentResolver{*;} -dontwarn com.didi.virtualapk.** -dontwarn android.** -keep class android.** {*;}
插件项目设置
-
添加Gradle插件: 在插件项目的根目录下同样添加虚拟APK的Gradle插件:
apply plugin: 'com.didi.virtualapk.plugin'
-
配置插件信息: 在插件的
build.gradle
文件末尾配置包ID和宿主项目路径,例如:virtualApk { packageId = 0x6f targetHost = '../host/app' applyHostMapping = true }
加载插件
- 运行时加载: 示例代码展示如何加载并启动插件内的活动:
String pluginPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Test.apk"; File plugin = new File(pluginPath); PluginManager.getInstance(this).loadPlugin(plugin); Intent intent = new Intent(); intent.setClassName("com.didi.virtualapk.demo", "com.didi.virtualapk.demo.MainActivity"); startActivity(intent);
测试验证
- 确保宿主项目和插件项目构建成功。
- 在宿主应用中尝试加载插件并执行其中的功能,进行测试。
至此,您已经完成了VirtualAPK的基本安装与配置,可以开始探索和利用插件化带来的灵活性和便利性了。在实际开发过程中,依据具体需求调整配置,享受动态加载带来的技术魅力。