【我的Android进阶之旅】Android插件化开发学习资料

1、目前开源的插件开发框架大致有哪些?

1、 任玉刚dynamic-load-apk
Github 地址:https://github.com/singwhatiwanna/dynamic-load-apk

2、mmyyddDirect-Load-apk
Github 地址:https://github.com/mmyydd/Direct-Load-apk

3、limpoxeAndroid-Plugin-Framework
Github 地址:https://github.com/limpoxe/Android-Plugin-Framework

4、bunnyblueACDD
Github 地址:https://github.com/bunnyblue/ACDD

5、携程网DynamicAPK
Github 地址:https://github.com/CtripMobile/DynamicAPK

6、奇虎360DroidPlugin
Github 地址:https://github.com/DroidPluginTeam/DroidPlugin/blob/master/readme_cn.md

7、AndroidDynamicLoader
Github 地址:https://github.com/mmin18/AndroidDynamicLoader

8、Galenlin 林光亮Small
Github 地址:https://github.com/wequick/Small

世界那么大,组件那么小。Small,做最轻巧的跨平台插件化框架。– Galenlin

9、Android Frontia

2、插件化介绍和原理博客

Android博客周刊专题之#插件化开发#

Android 插件化 动态升级

Android 动态加载技术文章以及相关项目

Small Android FAQ

android-dynamic-load-awesome

农民伯伯 Android动态加载jar/dex

GMTC演讲PPT - Small插件化轻巧之道

Android 动态加载技术文章以及相关项目

3、框架对比

原文地址: https://github.com/wequick/Small/edit/master/Android/COMPARISION.md

为方便列表,简写如下:

  DyLA  : Dynamic-load-apk          @singwhatiwanna, 百度
  DiLA  : Direct-Load-apk           @FinalLody
  APF   : Android-Plugin-Framework  @limpoxe
  ACDD  : ACDD                      @bunnyblue
  DyAPK : DynamicAPK                @TediWang, 携程
  DPG   : DroidPlugin               @cmzy, 360
  • 功能
\ DyLA DiLA ACDD DyAPK DPG APF Small
加载非独立插件[1] × x ×
加载.so后缀插件 × × ! [2] × × ×
Activity生命周期
Service动态注册 × × × x [3]
资源分包共享[4] × × ! [5] ! [5] × ! [6]
公共插件打包共享[7] × × × × × ×
支持AppCompat[8] × × × × × ×
支持本地网页组件 × × × × × ×
支持联调插件[9] × x × × × ×

[1] 独立插件:一个完整的apk包,可以独立运行。比如从你的程序跑起淘宝、QQ,但这加载起来是要闹哪样?

     非独立插件:依赖于宿主,宿主是个壳,插件可使用其资源代码并分离之以最小化,这才是业务需要嘛。

     – “所有不能加载非独立插件的插件化框架都是耍流氓”

[2] ACDD加载.so用了Native方法(libdexopt.so),不是Java层,源码见dexopt.cpp

[3] Service更新频度低,可预先注册在宿主的manifest中,如果没有很好的理由说服我,现不支持。

[4] 要实现宿主、各个插件资源可互相访问,需要对他们的资源进行分段处理以避免冲突。

[5] 这些框架修改aapt源码、重编、覆盖SDK Manager下载的aapt,我只想说“杀(wan)鸡(de)焉(kai)用(xin)牛(jiu)刀(hao)”

     Small使用gradle-small-plugin,在后期修改二进制文件,实现了PP段分区。

[6] 使用public-padding对资源id的TT段进行分区,分开了宿主和插件。但是插件之间无法分段。

[7] 除了宿主提供一些公共资源与代码外,我们仍需封装一些业务层面的公共库,这些库被其他插件所依赖。

     公共插件打包的目的就是可以单独更新公共库插件,并且相关插件不需要动到。

[8] AppCompat: Android Studio默认添加的主题包,Google主推的Metrial Design包也依赖于此。大势所趋。

[9] 联调插件:使用Android Studio调试![

时间: 2024-12-03 12:02:50

【我的Android进阶之旅】Android插件化开发学习资料的相关文章

我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)

对于游戏玩家而言,游戏界面上看到的"元素"千变万化:但是对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有所差异而已.因此建立游戏的状态数据模型是实现游戏逻辑的重要步骤. 1.定义数据模型 连连看的界面是一个NxM的"网格",每个网格上显示一张图片.而这个网格只需要一个二维数组来定义即可,而每个网格上所显示的图片,对于底层数据模型来说,不同的图片对于着不同的数值即可. 对于上图所示的数据模型,只要让数值为0的网格上不绘制图片,其他数值的网

我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam

由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程,因此今天百度了一下gif动画的制作工具,找到了这款不错的软件GifCam.然后我使用该软件将动画制作成gif动画,然后更新了上一篇文章上传了新制作的gif动画,使博客的说明效果更佳. 该软件的界面如下所示: 该软件的操作步骤如下: 1.拖动 GifCam 标题栏,改变其位置,并调整 GifCam 窗口大

我的Android进阶之旅------>Android疯狂连连看游戏的实现之开发游戏界面(二)

连连看的游戏界面十分简单,大致可以分为两个区域: 游戏主界面区 控制按钮和数据显示区 1.开发界面布局 本程序使用一个RelativeLayout作为整体的界面布局元素,界面布局上面是一个自定义组件,下面是一个水平排列的LinearLayout. 下面是本程序的布局文件:/res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=

我的Android进阶之旅------&amp;gt;Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piece对象时,程序会直接调用ImageUtil的getPlayImages()方法去获取图片,该方法会随机从res/drawable目录中取得N张图片. 下面是res/drawable目录视图: 为了让getPlayImages()方法能随机从res/drawable目录中取得N张图片,具体实现分为以下几步: 通

我的Android进阶之旅------&amp;gt; Android为TextView组件中显示的文本添加背景色

通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article/details/46916963)      我们学会了在TextView中显示图片的方法,现在我们来学习如何为TextView组件中显示的文本添加背景色.要求完成的样子如图所示: 首先来学习使用BackgroundColorSpan对象设置文字背景色,代码如下: TextView textView=(

我的Android进阶之旅------&amp;gt;Android颜色值(#AARRGGBB)透明度百分比和十六进制对应关系以及计算方法

我的Android进阶之旅-->Android颜色值(RGB)所支持的四种常见形式 透明度百分比和十六进制对应关系表格 透明度 十六进制 100% FF 99% FC 98% FA 97% F7 96% F5 95% F2 94% F0 93% ED 92% EB 91% E8 90% E6 89% E3 88% E0 87% DE 86% DB 85% D9 84% D6 83% D4 82% D1 81% CF 80% CC 79% C9 78% C7 77% C4 76% C2 75% B

我的Android进阶之旅------&amp;gt;Android疯狂连连看游戏的实现之游戏效果预览(一)

今天看完了李刚老师的<疯狂Android讲义>一书中的第18章<疯狂连连看>,从而学会了如何编写一个简单的Android疯狂连连看游戏.      开发这个流行的小游戏,难度适中,而且能充分激发学习热情,适合Android初学者来说是一个不错的选择.对于该游戏的开发,需要重点掌握单机游戏的界面分析和数据建模能力:游戏玩家严重看到的是游戏界面,但是在开发者眼中看到的应该是数据模型.除此之外,单机游戏通常需要一个比较美观的界面,需要通过自定义View来实现游戏主界面.      开发连

我的Android进阶之旅------&amp;gt;Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题

    今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护.     好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的Android进阶之旅------>Android[设置]-[语言和输入法]-[语言]列表中找到相应语言所对应的列表项   地址:http://blog.csdn.net/ouyang_peng/article/details/50209789 ======================

我的Android进阶之旅------&amp;gt;Android疯狂连连看游戏的实现之实现游戏逻辑(五)

在上一篇<我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)>中提到的两个类: GameConf:负责管理游戏的初始化设置信息. GameService:负责游戏的逻辑实现. 其中GameConf的代码如下:cn\oyp\link\utils\GameConf.java package cn.oyp.link.utils; import android.content.Context; /** * 保存游戏配置的对象