• Android学习系列(6)App模块化及工程扩展


    这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。

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

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

    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市场走向更强大,技术走向更强悍。

  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/qianxudetianxia/p/2030232.html
Copyright © 2020-2023  润新知