Android笔记之:App模块化及工程扩展的应用
2023-06-13 09:14:51 时间
1.需求
无论是在.net还是java平台,合理的分层架构是最普遍的模块化思路之一。
dll,jar文件无不风靡盛行,无处不在。
一天,tx团队和我说,我们现在要做android上做三个论坛的客户端,一个是新闻论坛,一个是文学论坛,一个是音乐论坛。除了数据,界面和很少的模块不一样,其他的都一摸一样。
jar是我第一刻就想到的东西,但是共用的jar文件无法方便的共享资源或者覆盖资源。
而我们也不会傻傻的单独做三个客户端的吧,也不会傻傻的做3个客户端再傻傻的copy3份,依次修改吧。
2.问题
在Android工程中如何开发一个共用Framework,能共用资源,代码,但是也能扩展?
3.使用硬编码判断
有人提出了一种方案,在代码里面判断:
if(新闻论坛){
//加载新闻论坛的资源
//执行新闻论坛的代码
//显示新闻论坛的效果
}elseif(文学论坛){
//加载文学论坛的资源
//执行文学论坛的代码
//显示文学论坛的效果
}elseif(音乐论坛){
//加载音乐论坛的资源
//执行音乐论坛的代码
//显示音乐论坛的效果
}
PS:这是一种很无奈的办法,代码丑陋,扩展性差,有没有更好的办法呢?
4.使用AndroidLibrary分离工程
AndroidLibrary提供了一个类似于其他平台的库的概念,这个库不仅能公用代码,还能共用资源,还能覆写资源。
AndroidLibrary是以工程的颗粒来复用,引用它的工程,其实就是引用它的代码,然后生成R.java和主工程需要的资源,而剔除Library中被覆盖的资源。其中Library中的AndroidManifest.xml不能复用,也就是说主工程必须重新定义AndroidManifest.xml,这个也很容易理解,AndroidManifest.xml本来就是工程的一个配置文件,一般来说不具备共用的库的通用性。
步骤如下:
第一步:新建Android工程common。
第二步:右键common,选择Properties,在Android标签页,选中"IsLibrary",如下图。
第三步:新建主工程新闻论坛tianxianews。
第四步: 右键tianxianews,选择Properties,在Android标签页,点击Add,选中common。如下图。
我们展开tianxianews工程的gen目录:
eclipse为了生成了两个R.java,一个是common工程的,一个tianxianews工程的,但是内容是一摸一样的,这样做的好处是:R.java里面的内容包括两个工程资源,第一,tianxianews工程通过R.java能调用到common工程的资源;第二,如果有覆写的资源,生成apk的时候,tianxianews工程覆盖common工程的资源,因为两个R.java内容一样,common代码调用的R.java中的资源,实际上调用的是tianxianews资源,这个特性类似如面向对象的继承的概念。
我们还可以另外新建tianxiamusic,tianxialiterature工程,都引用common,这样我们三个工程就能共用common,这样我们就可以只在common一个工程中开发了。
在这里,具体的使用步骤我没有截图出来,主要是没什么技术,也没什么好说的,就是两个字:覆盖。
5.小结
AndroidLibrary为Android模块化和工程扩展提供了一个很好的工具或者方式。随着项目的增大,资源的共享,模块化和扩展的这种需求更是日益凸显,它不仅去掉了代码的丑陋,而且减少了开发量,带来的益处不少。同时由此我们也可以看出来Android的不成熟,他们为我们大型工程提供的方案还是太少,这可能也有源自手机平台本身的局限性吧,我们期待Android市场走向更强大,技术走向更强悍。
相关文章
- app产品设计流程_APP流程图
- Android AB升级(二) - Demo APP应用流程
- android开发笔记之 Android代码混淆打包
- android okio使用方法,Android 开源框架 Okio 原理剖析「建议收藏」
- Android源码学习「建议收藏」
- android app 抓包
- uni-app APP地图移动时获取地图中心点经纬度坐标
- android app 退出功能,Android 完美退出 App (Exit)
- android手机指纹识别_屏下指纹缺点
- android系统中toast是什么_Android个人资料简单布局
- android触摸屏事件,Android Touch事件分析
- Android Services Library_android freeware
- Android 13带来了哪些新功能?需要哪些适配工作?
- android.support.v4.app.Fragment$InstantiationException问题解决
- 一种基于Android、iOS系统的移动端身份证识别技术,手机拍照识别提取身份证信息
- 2018最新苹果APP上架App Store流程(超详细)
- 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑥ ( 进入 ijkplayer-android/android 目录 | 执行 compile-ijk.sh 脚本完成编译 )
- 【Android Gradle 插件】LintOptions 配置 ② ( abortOnError 配置 | 手动执行 lint 检查并生成 lint-result.html 检查报告 )
- 【Android Gradle 插件】PackagingOptions 配置 ④ ( pickFirsts、merges、excludes 属性配置 Set<String> 类型属性值常用配置方法 )
- 【错误记录】Android Studio 编译报错 ( Could not resolve com.android.tools.build:gradle:7.4.2. )
- Android NFC 漏洞可被黑客拿来传播植入恶意软件
- MySQL在App开发中的应用(app开发mysql)
- 构建App端Mysql数据库,打造智能体验(app mysql数据库)
- Android点亮屏幕或屏幕解锁和锁定以及其他相关权限实现代码
- android下拉刷新ListView的介绍和实现代码