Android插件化原理解析——概要

转自:http://weishu.me/2016/01/28/understand-plugin-framework-overview/

2015年是Android插件化技术突飞猛进的一年,随着业务的发展各大厂商都碰到了Android Native平台的瓶颈:

  1. 从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法数的天花板;同时,运营为王的时代对于模块热更新提出了更高的要求。
  2. 在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋;各个团队维护着同一个App的不同模块,如果每个模块升级新功能都需要对整个app进行升级,那么发布流程不仅复杂而且效率低下;在讲究小步快跑和持续迭代的移动互联网必将遭到淘汰。

H5和Hybird可以解决这些问题,但是始终比不上native的用户体验;于是,国外的FaceBook推出了react-native;而国内各大厂商几乎都选择纯native的插件化技术。可以说,Android的未来必将是react-native和插件化的天下。

react-native资料很多,但是讲述插件化的却凤毛菱角;插件化技术听起来高深莫测,实际上要解决的就是两个问题:

  1. 代码加载
  2. 资源加载

代码加载

类的加载可以使用Java的ClassLoader机制,但是对于Android来说,并不是说类加载进来就可以用了,很多组件都是有“生命”的;因此对于这些有血有肉的类,必须给它们注入活力,也就是所谓的组件生命周期管理

另外,如何管理加载进来的类也是一个问题。假设多个插件依赖了相同的类,是抽取公共依赖进行管理还是插件单独依赖?这就是ClassLoader的管理问题

资源加载

资源加载方案大家使用的原理都差不多,都是用AssetManager的隐藏方法addAssetPath;但是,不同插件的资源如何管理?是公用一套资源还是插件独立资源?共用资源如何避免资源冲突?对于资源加载,有的方案共用一套资源并采用资源分段机制解决冲突(要么修改aapt要么添加编译插件);有的方案选择独立资源,不同插件管理自己的资源。

目前国内开源的较成熟的插件方案有DLDroidPlugin;但是DL方案仅仅对Frameworl的表层做了处理,严重依赖that语法,编写插件代码和主程序代码需单独区分;而DroidPlugin通过Hook增强了Framework层的很多系统服务,开发插件就跟开发独立app差不多;就拿Activity生命周期的管理来说,DL的代理方式就像是牵线木偶,插件只不过是操纵傀儡而已;而DroidPlugin则是借尸还魂,插件是有血有肉的系统管理的真正组件;DroidPlugin Hook了系统几乎所有的Sevice,欺骗了大部分的系统API;掌握这个Hook过程需要掌握很多系统原理,因此学习DroidPlugin对于整个Android FrameWork层大有裨益。

接下来的一系列文章将以DroidPlugin为例讲解插件框架的原理,揭开插件化的神秘面纱;同时还能帮助深入理解Android Framewrok;主要内容如下:

  • Hook机制之动态代理
  • Hook机制之Binder Hook
  • Activity生命周期管理,占坑和Hook
  • 插件的广播机制,静态广播非静态
  • Service组件的管理,占坑和Hook
  • ContentProvider的管理
  • 插件加载解析之自定义包管理服务(PackageManager)
  • 插件进程管理机制(ActivityMAnager)
  • 插件机制之资源管理
  • DroidPlugin插件通信机制
  • DroidPlugin框架缺陷
  • 不同插件框架方案对比
  • 插件化的未来

另外,对于每一章内容都会有详细的demo,具体见understand-plugin-framework;喜欢就点个关注吧~定期更新,敬请期待!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2048小游戏的概要设计可以分为以下几部分: 1. 游戏界面设计:包括游戏主界面、游戏结束界面、游戏设置界面等。游戏主界面需要显示当前游戏得分、游戏操作按钮等,游戏结束界面需要显示最终得分、重新开始游戏按钮等,游戏设置界面需要包含音效开关、背景音乐开关等选项。 2. 游戏逻辑设计:主要包括方块的随机生成、方块的合并、方块的移动等。当玩家进行方向操作时,需要根据当前方块位置和操作方向判断是否可以进行移动,并且需要判断是否可以进行方块合并。 3. 数据存储设计:需要将游戏得分、游戏设置等数据进行本地存储,以便下次游戏时可以读取之前的游戏数据。 4. 音效设计:需要为游戏添加合适的音效,例如方块移动、方块合并、游戏结束等。 5. 广告与付费设计:可以在游戏中加入广告或者付费去除广告的选项,以便获取收益。 总之,一个成功的2048小游戏需要在游戏界面、游戏逻辑、数据存储、音效等方面都有良好的设计和实现。 ### 回答2: 2048小游戏是一款益智类游戏,玩家的目标是通过移动方块,使得相同数字的方块在合并后形成2048这个数字的方块。以下是该游戏的概要设计。 1. 游戏界面设计:采用简洁、清晰的界面设计,主要包括游戏棋盘和方块。游戏棋盘为4x4的格子,方块根据数字的大小呈现不同的颜色。 2. 游戏规则设计:玩家通过上下左右滑动来移动方块,相同数字的方块会合并成一个新的方块,并在空白格子中产生新的方块。每次移动后,新的数字方块以2的形式出现。当玩家成功合并两个2048方块时,游戏胜利;当棋盘被填满且没有可合并的方块时,游戏失败。 3. 游戏功能设计: - 计分系统:记录玩家的得分,每次成功合并方块时增加相应分数。 - 撤销功能:允许玩家撤销一次上一步移动。 - 重新开始:玩家可以选择重新开始游戏。 - 最高纪录:记录玩家历史最高分,在游戏结束时显示。 4. 游戏界面交互设计:玩家通过触摸屏幕上的方向键模拟滑动操作,方块根据滑动方向移动并合并。移动过程中添加适当的动画效果,增加游戏的交互性。 5. 游戏难度设计:设置不同难度的游戏模式,如简单、普通、困难,通过限制方块生成的概率或增加合并难度来增加游戏挑战性。 总之,该2048小游戏概要设计包括了游戏界面设计、游戏规则设计、游戏功能设计、界面交互设计和游戏难度设计。通过以上设计,可以实现一款符合玩家习惯且有趣的Android游戏。 ### 回答3: 2048小游戏是一款经典的数字合并游戏,目标是通过向不同方向滑动屏幕,将相同的数字相邻合并,得到更大的数字。以下是Android课程设计2048小游戏的概要设计: 1. 游戏界面设计: - 采用MVVM架构设计,将逻辑和界面分离。 - 使用GridLayout布局实现游戏面板,方便管理和显示数字矩阵。 - 使用动画效果来使得数字在滑动过程中平滑移动和合并。 2. 游戏逻辑设计: - 设计一个4x4的矩阵用于存储数字,初始时在随机位置生成两个数字(2或4)。 - 随着玩家滑动屏幕,数字向指定方向移动直到遇到边界或其他数字。 - 相邻数字相同则合并,合并后的数字加入分数,并生成一个新的数字。 - 判断游戏是否胜利:出现2048数字即可胜利。 - 判断游戏是否失败:没有空白格子可生成新数字且无法继续合并。 3. 用户界面设计: - 采用Material Design风格,使用卡片式布局和明亮的颜色。 - 显示当前分数和最高分数。 - 提供菜单按钮包含重新开始和退出游戏选项。 4. 数据存储设计: - 使用SharedPreferences存储最高分数,便于在游戏中进行读写操作。 - 使用SQLite数据库记录游戏记录。包括游戏分数、游戏时间和结束原因等信息。 5. 游戏优和扩展: - 使用异步任务来加载和保存游戏数据,避免卡顿。 - 添加撤销功能,允许玩家撤销一步操作。 - 添加多种游戏主题选择,提供更多样的游戏体验。 通过以上概要设计,我们可以设计出一款功能完善、界面美观的Android课程设计2048小游戏。玩家可以体验数字合并带来的乐趣,并且通过不断挑战自己创造最高分数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值