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. bzoj1688[Usaco2005 Open]Disease Manangement 疾病管理*
  2. JAVA实现 springMVC方式的微信接入、实现消息自动回复
  3. c# 无法打开计算机.上的 服务,c# - C#Winform应用程序无法在其他计算机上运行(神秘的启动时) - 堆栈内存溢出...
  4. Android关于SQLiteOpenHelper的封装
  5. Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
  6. 谁拿了最多奖学金pascal程序
  7. mybatis集成 Invalid bound statement (not found)
  8. mysql出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'如何解决?
  9. oracle为空替换为0_详解Oracle如何用Translate来统计字符出现的次数
  10. vlookup使用步骤_使用vlookup出错,看看原因多为这几个!快来看看!
  11. 2016CCCC天梯--多项式A除以B
  12. Installation of Requests
  13. 块层介绍 第二篇: request层
  14. IDEA2019开发WebService实例
  15. PHP生成一寸照片代码,用PS制作1寸证件照方法介绍
  16. 知乎周刊之程序人生概要
  17. Compose_23--动画之animateContentSize和Crossfade
  18. 《Adaptive Unimodal Cost Volume Filtering for Deep Stereo Matching》
  19. qq空间留言板删除 php,qq批量删除空间留言及说说
  20. apollo决策规划学习--慢速障碍物超车

热门文章

  1. zoj 3716 Ribbon Gymnastics【神奇的计算几何】
  2. 【CentOS 7.0】配置免费阿里云Docker镜像加速器
  3. 云计算或成时代新拐点?从哪些点可以看出?
  4. swift 实现iOS手势密码、指纹密码、faceID
  5. 在前端页面中调用本机的摄像头
  6. 脚手架的含义,什么是脚手架?什么才能叫做脚手架!(博主自己观点)
  7. 解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
  8. 电脑版android版iphone版ipad版,[下载]微软发布iPad版Office iPhone版Android版彻底免费...
  9. 2020年中国5G基站建设行业报告.pdf (附下载)
  10. python商品打折问题公式_python障碍式期权定价公式