didi VirtualApk 框架的使用

今年估计是最闲的过年了,呆着无聊,也是对自己的一种充实吧,使用一下didi的VirtualApk ,以前也使用过插件的,但是没有*这个好用。在此,立个flag,每个月至少写俩篇博客,总结一些东西,学习一些知识。

为什么学习使用virtual apk,而不是其他插件框架,主要原因有:

  • 1 功能完备,简单集成就能使用
  • 2 侵入性低
  • 3 四大组件均不需要在宿主manifest中预注册,每个组件都有完整的生命周期
  • 4 优秀的兼容性

VirtualAPK和主流的插件化框架对比


废话不多说,开始集成使用

一、项目引用VirtualAPK依赖

1、 在项目的build.gradle中添加依赖

2、在宿主的 build.gradle中添加依赖,注意我们这里是宿主

3、在插件的build.gradle中添加依赖,注意这里是插件


到此,VirtualApk框架的依赖已经结束,是不是很简单,看起来是的。

好了,我们继续。

二、在宿主中初始化插件并使用

1、自定义application并初始化
ps:记得在manifest.xml中配置自己的application

2、由于我这里是把插件apk放在sdcard根目录下,所以需要权限,而且我的手机是android 9.0,所以还需要动态请求权限

3、加载插件

4、在插件的build.gradle中添加宿主是哪个

5、给宿主和插件添加相同的签名

三、打包宿主和插件,这里需要注意,插件必须是签名的,不然不能用,所以最好是给宿主和插件都使用相同的签名。

1、打包宿主

2、打包插件

3、安装宿主,把插件apk放到sdcard目录
4、运行宿主

遇到问题:

1:


解决方案:我是新建的module,需要在module下添加grdle.properties,然后添加android.useDexArchive=false

2:

解决方案:

gradle插件版本过高,VirtualApk的构建原理与gradle插件强依赖,建议使用官方demo工程使用的gradle插件版本,这里降至3.0.0 就ok了

最后附上项目的完整build.gradle

项目build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.0.0'classpath 'com.didi.virtualapk:gradle:0.9.8.6'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {google()jcenter()}
}task clean(type: Delete) {delete rootProject.buildDir
}
宿主build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.didi.virtualapk.host' //这个是宿主中添加的android {compileSdkVersion 28defaultConfig {applicationId "com.vanish.interview"minSdkVersion 19targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}signingConfigs{release {keyAlias 'vanish'keyPassword 'android'storeFile file('D:/StudioProject/keyStore/sign.jks')storePassword 'android'}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}}
}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support.constraint:constraint-layout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'//virtualApkimplementation 'com.didi.virtualapk:core:0.9.8'//Andpermissionimplementation 'com.yanzhenjie:permission:2.0.0-rc4'
}
插件build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.didi.virtualapk.plugin'//注意这个是plugin结尾,宿主是以host结尾的android {compileSdkVersion 28signingConfigs{release {keyAlias 'vanish'keyPassword 'android'storeFile file('D:/StudioProject/keyStore/sign.jks')storePassword 'android'}}defaultConfig {applicationId "com.vanish.interview2"minSdkVersion 19targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}}}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support.constraint:constraint-layout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'//virtualApkimplementation 'com.didi.virtualapk:core:0.9.8'
}virtualApk{//插件资源表中的packageId,需要确保不同插件有不同的packageId.packageId = 0x6ftargetHost = '../../MyInterview/app'//宿主应用的app模块路径//默认为true,如果插件有引用宿主的类,那么这个选项可以使得插件和宿主保持混淆一致applyHostMapping = true
}

demo下载链接:

添加链接描述

didi VirtualApk 框架的使用相关推荐

  1. VirtualAPK 踩坑实录

    VirtualAPK 官网 https://github.com/didi/VirtualAPK 框架接入,四大组件原理分析,资源原理分析,在 wiki 中的第三方技术文章里都有很详细的介绍 Virt ...

  2. Android开源框架源码鉴赏:VirtualAPK

    文章目录 一 VirtualAPK的初始化流程 二 VirtualAPK的的加载流程 三 VirtualAPK启动组件的流程 3.1 Activity 3.2 Service 3.3 Broadcas ...

  3. 滴滴开源Android插件化框架VirtualAPK原理分析

    概述 滴滴出行公司的首个对外开源项目 - VirtualAPK.地址:github.com/didi/Virtua- 滴滴自行研发了这款插件化框架,功能全面.兼容性好,还能够适用于有耦合的业务插件,这 ...

  4. 良心博客滴滴开源框架VirtualAPK插件化介绍加教程加DEMO加投入项目

    公司要实现一个这样的效果,类似于qq游戏大厅,我们可以下载斗地主,可以下载保皇,下载完成直接就可以玩,不需要安装,也就是说我们的这一款软件里面可以装载多款软件. 公司项目是一套系统管理软件,它里面包括 ...

  5. 【Android 插件化】插件化框架整理

    文章目录 一.Altas ( 阿里巴巴 ) 二.DynamicAPK ( 携程 ) 三.VirtualApp ( 罗迪 ) 四.DroidPlugin ( 360 ) 五.dynamic-load-a ...

  6. VirtualAPK:滴滴 Android 插件化的实践之路

    一.前言 在 Android 插件化技术日新月异的今天,开发并落地一款插件化框架到底是简单还是困难,这个问题不同人会有不同的答案.但是我相信,完成一个插件化框架的 Demo 并不是多难的事儿,然而要开 ...

  7. 滴滴开源Android插件框架

     登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 返回通知列表 下一条 上一条 分享资讯传PPT/文档提问题写博客传资源创建项目创建代码片 wz ...

  8. 安卓 SDK 开发使用 VirtualAPK 实现插件化

    1. 背景 因为公司现在要在广告 SDK 开发中实现一部分代码的更新,或者是新增部分功能,因此需要从后台通过网络下载然后通过插件化的方式进行加载展示.本来想的是自己实现,但是遇到了一些问题,所以直接采 ...

  9. 优秀的Android开源框架(持续更新)

    开源是软件发展的趋势,越来越多的人投入到开源世界中去.我们可以从开源世界中获得很多有益的东西,本着不重复造轮子的精神,我们应该充分利用这些开源项目的成果.本文会持续更新涌现出来的优秀开源框架. UI ...

最新文章

  1. shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...
  2. 关于第十六届大学生智能汽车竞赛 华南赛区补赛办法
  3. Keras入门(一)搭建深度神经网络(DNN)解决多分类问题
  4. 工作290:重置新增的mode
  5. spring mvc学习(11):eclipse的环境maven项目创建前期工作
  6. Linux进程全解4——fork创建子进程
  7. es6 Generator函数的应用
  8. durpal是否支持php7,drupal7 的安装方法
  9. Ansible(十四)-- ansible 中的变量(三) set_fact 模块 注册变量实现跨play调用变量
  10. 138529-46-1,Biotin-PEG2-amine可在EDC或HATU存在下与NHS酯或羧酸反应试剂
  11. 搭讪培训班 - 名品试用 - YOKA时尚论坛 - YOKA社区
  12. 如何基于 APISIX 迭代数字智联平台
  13. 跨境电商推广干货:掘金东南亚和这几个推广平台
  14. P3174 [HAOI2009] 毛毛虫
  15. 计算机运行库,VC2010运行库
  16. Android百度地图短链分享的使用
  17. 企业网站受到攻击会有什么影响
  18. Qt如何生成license文件
  19. 选调打印准考证必须用电脑吗
  20. 深度:大数据分析对于中国医疗保险管理的价值(N多案例分析+附下载)

热门文章

  1. ODBC驱动器管理器——未发现数据源名称并且未指定默认驱动程序
  2. MySQL之悲观锁场景举例
  3. 通过nginx代理vue,vue再访问后端时出错记录
  4. 如何用多线程实现归并排序
  5. 国际码可以直接应用于计算机,2001年4月份全国高等教育自学考试计算机应用基础试题...
  6. 炫龙笔记本组合快捷键
  7. [清华大学]计算机科学与技术
  8. 冒险岛手游哪个服务器稳定,冒险岛手游现在十个职业哪个后期最强
  9. Kindle 转换器
  10. [乐意黎转载]关于泸西县弯腰树村委会经济社会发展思路调研报告