Android插件化之VirtualAPK框架初试
因为需求要做插件化,所以写篇文章写个小demo来记录一下,这篇文章只是写个demo,而不做总结和讲解。
一.前言
1.什么是插件化,网上很大大佬有很好的解释,这里我不重复,简单来说就是要一个apk加载另一个apk的内容。
主apk我们成为宿主,被加载内容的apk我们称为插件
2.为什么使用VirtualAPK
关于插件化有很多方案和框架可以使用,至于我为什么选择VirtualAPK,主要有两点原因:
(1)这个框架目前还在维护
(2)接入方便,文档清晰
3.框架地址
https://github.com/didi/VirtualAPK
二.写Demo接入VirtualAPK
要接入VirtualAPK,我们要跟着文档走,打开连接地址,然后点开wiki,上面会有接入的流程。
注意:不管用什么框架,最好的文档都是官方的文档,就算在接入过程有问题也应该先去找Issues有没有相应的贴,实在没有才用搜索引擎去搜索问题。
读过这个框架之后我们知道要做两个项目,一个是宿主项目,一个是插件项目。那我用AS开发的话可以写一个工程然后两个module,这边比较方便管理
我这里宿主就是:app模块,插件就是:plugintest模块
在 README.md中有写导入过程
跟着做,我们在:app模块中配置
(1)最外层gradle加入virtualapk
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 } }
(2)在app模块的gradle中加入插件和依赖
到这里宿主apk就已经配好了,简直方便啊。然后再来配置插件的gradle
(3)在plugintest模块的gradle中加入插件和依赖
这样就配置好了,这插件简直是方便,比起我当时用微信的Timer,配置方便太多。
可能有些朋友不是很熟gradle,我多啰嗦两句
virtualApk{}是插件com.didi.virtualapk.plugin的配置,就像我们默认生成的android{}是com.android.application插件的配置。
(1)packgeId是有一个范围的,好像是2到多少的我忘了
(2)targetHost是宿主工程的路径,因为插件要获取宿主工程的内容,所以要给个路径给插件,反正就指导宿主的app文件夹下。
2.初始化插件
配置完成之后,我们需要在宿主工程,也就是我的:app模块做插件的初始化
跟着文档做就行,先在application初始化
然后加载插件,要在哪里加载插件,这就要看你需要在哪里使用插件的内容,加载插件就是加载你存储中的apk
这里我插件apk要放在../Android/包名/test 文件夹下, apk要改名成pluginTest.apk
3.导出插件apk
配置好并初始化好之后我们就可以先导出插件apk,再把插件apk放到上面的文件夹中,再运行宿主app就行。
这里需要注意一点,这是我踩的坑,你不能给你的布局使用activity_main.xml这个名称,不然导出插件会不正确,我是在Issues看到的,所以说出现问题先去找Issues
那么要怎么导出插件apk呢,前提是你先要build一下宿主apk,然后再用命令行来打包插件apk,每次,和打jar包一样,用命令打就行。
打开项目的wiki
因为我是windows操作系统哈,所以输入命令 gradlew clean assembleRelease --stacktrace
如果有配置上的错误的话,会打印出来,但是肯定不会打印很详细,所以有问题的话还是要靠一点经验。
能正常打包的话
会在build内生成一个文件夹plugin,说道这里就又要再多啰嗦一句,这个命令打出来的包是正式包,所以在配置gradle时记得写签名
最后把这个apk改名放到这个文件夹里就可以了
这样我们就完成了一个简单的VirtualAPK框架的demo,不得不说这个框架使用起来非常方便,当然别看现在做的这么顺利,其实到实际开发的时候肯定会遇到坑的。所以有一个良好的阅读文档的习惯是非常重要的。
三.最后贴我宿主项目的代码吧
也就做了一个跳转的操作,跳转的activity是插件的activity
public class OneActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); initPlugin(); initView(); } /** * 加载插件 */ private void initPlugin(){ PluginManager pluginManager = PluginManager.getInstance(this); File file = new File(getExternalFilesDir("test"),"pluginTest.apk"); if (file.exists()){ try { pluginManager.loadPlugin(file); }catch (Exception e){ } } } private void initView(){ Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClassName("com.example.plugin.plugintest","com.example.plugin.plugintest.TwoActivity"); startActivity(intent); } }); } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
短视频app开发——Android端实用短视频录制方案
继抖音、快手、微视等一众短视频豪强并起以来,2018年的短视频市场可谓一片火热,而国内很多短视频平台运营商也开始纷纷布局海外短视频市场。面对眼前的场景,短视频app开发也逐渐引发了创投者的兴趣,生怕自己错过眼下的短视频红海。 今天就为大家简单介绍下短视频app开发中关于Android端比较实用的短视频录制方案,希望能对大家有所帮助。 众所周知,短视频app开发业务中“视频录制”以及 “视频编辑”是两个核心功能。 其中视频录制又包括:视频采集、实时美颜、自定义码率、摄像头切换、变焦、对焦、曝光度调节以及滤镜等功能。视频编辑则包括:视频裁剪、视频拼接、混音、视频动画效果、动态贴图等功能。 我们先来说说视频录制吧,视频录制的大致实现流程是先由Camera、AudioRecord进行最原始的相机画面以及声音的采集,然后将采集的数据进行滤镜、降噪等前处理,处理完成后由MediaCodec进行硬件编码,最后采用MediaMuxer生成最终的MP4文件。 虽然这几年智能手机的性能大大增强,很多旗舰手机基本都是8核的CPU了,但要操作如此大量的图片数据并进行浮点运算对CPU的消耗还是很大的。CPU暂...
- 下一篇
Appium iOS三种滑动方式
方法一:不推荐 driver.execute_script("mobile: scroll", {"direction": "down"}) 实际使用中发现会执行两次滑动操作 方法二:不推荐 driver.execute_script("mobile: swipe", {"direction": "down"}) 滑动距离较小 方法三:推荐使用 driver.execute_script("mobile:dragFromToForDuration",{"duration":0.5,"element":None,"fromX":0,"fromY":650,"toX":0,"toY":100}
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2整合Redis,开启缓存,提高访问速度