Android笔记之:App模块化及工程扩展的应用

2016-02-19 10:08 29 1 收藏

下面是个Android笔记之:App模块化及工程扩展的应用教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!

【 tulaoshi.com - 编程语言 】

1.需求
    无论是在.net还是java平台,合理的分层架构是最普遍的模块化思路之一。
    dll,jar文件无不风靡盛行,无处不在。
    一天,tx团队和我说,我们现在要做android上做三个论坛的客户端,一个是新闻论坛,一个是文学论坛,一个是音乐论坛。除了数据,界面和很少的模块不一样,其他的都一摸一样。
    jar是我第一刻就想到的东西,但是共用的jar文件无法方便的共享资源或者覆盖资源。
    而我们也不会傻傻的单独做三个客户端的吧,也不会傻傻的做3个客户端再傻傻的copy3份,依次修改吧。

2.问题
   在Android工程中如何开发一个共用Framework,能共用资源,代码,但是也能扩展? 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

3.使用硬编码判断
   有人提出了一种方案, 在代码里面判断:
代码如下:

if(新闻论坛) {
   //加载新闻论坛的资源
   //执行新闻论坛的代码
   //显示新闻论坛的效果
}else if(文学论坛) {
   //加载文学论坛的资源
   //执行文学论坛的代码
   //显示文学论坛的效果
}else if(音乐论坛) {
   //加载音乐论坛的资源
   //执行音乐论坛的代码
   //显示音乐论坛的效果
}
PS:这是一种很无奈的办法,代码丑陋,扩展性差,有没有更好的办法呢?

4.使用Android Library分离工程
    Android Library提供了一个类似于其他平台的库的概念,这个库不仅能公用代码,还能共用资源,还能覆写资源。
    Android Library是以工程的颗粒来复用,引用它的工程,其实就是引用它的代码,然后生成R.java和主工程需要的资源,而剔除Library中被覆盖的资源。其中Library中的AndroidManifest.xml不能复用,也就是说主工程必须重新定义AndroidManifest.xml,这个也很容易理解,AndroidManifest.xml本来就是工程的一个配置文件,一般来说不具备共用的库的通用性。
    步骤如下:
    第一步:新建Android工程common。
    第二步:右键common,选择Properties,在Android标签页,选中"Is Library" ,如下图。
 
    第三步: 新建主工程新闻论坛tianxianews。
    第四步: 右键tianxianews,选择Properties,在Android标签页,点击Add,选中common。如下图。
    查看最后的工程结构:
    此时此刻,common工程天衣无缝成了tianxianews工程的一部分。
    我们展开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.小结
    Android Library为Android模块化和工程扩展提供了一个很好的工具或者方式。随着项目的增大,资源的共享,模块化和扩展的这种需求更是日益凸显,它不仅去掉了代码的丑陋,而且减少了开发量,带来的益处不少。同时由此我们也可以看出来Android的不成熟,他们为我们大型工程提供的方案还是太少,这可能也有源自手机平台本身的局限性吧,我们期待Android市场走向更强大,技术走向更强悍。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1593537.html

延伸阅读
标签: Web开发
    实想重提下那个话题,一直都在忙这忙那的没时间。好不容易到一个周末了,原定安排是去D2的但是因为时间安排不过来,所以能抽空写写。早前的讨论不了了之,其实这一点都不是Twinsen的风格。 名字,你看名字多重要,我不太清楚。我写书的话我的书被人改变名称去误导别人我是不喜欢的。这是我一直说的作为一个技术人员应当遵...
Android的广告平台是很多的,各市场对各平台的接受程度是不一样的,Android的开发者如果想集成广告基本要考虑下面两个问题: (1)集成什么广告,会赚钱? (2)集成什么广告,不会被市场拒绝? 最终的结果往往是折中的。 第一个问题是广告平台的判断问题,我没有发言权去评论,本文主要是针对第二个问题展开。 解决方案就是打包应用的不同广告平台...
标签: Web开发
引子: 今天在蓝点看了Yang的博客《CSS样式表中继承关系的空格与不空格》,思考了一下,本来想写《CSS样式的复合定义与复合调用及简单的模块化设计》,但是内容太大,还是来点简单的实惠。所以改叫《CSS样式从空格谈起》吧。 一、空格运算符 (1)CSS语言     简单地说,CSS语言类似JS语言,是通过客户端下载后,通过本地...
标签: Web开发
      一、空格运算符       (1)CSS语言       简单地说,CSS语言类似JS语言,是通过客户端下载后,通过本地浏览器解析。而CSS语言又是非常低级的“弱类型”语言,离JS这种基于对象的比较完善的“弱类型”语言,还差相当一段距离。要知道CSS样式是定义出来的...

经验教程

421

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部