Android的工程依赖

来源:互联网 发布:公务员考试经验知乎 编辑:程序博客网 时间:2024/05/23 18:39

在开发java工程时,一个大的项目可能分为多个模块,为了实现模块间的解耦和独立,提高模块的复用性,通常将该项目按模块分为多个java工程进行开发,最后通过jar包等工程依赖的方式实现系统集成,提高模块的解耦和复用。

        现在开发android项目,通过实践开发的总结,发现这种方式特别有必要。比如,开发一个android端视频应用,肯定有播放和下载模块,之前放在一个工程里,不断添加新的功能,产品里的每一个研发都不断改动和添加功能,最后维护越来越难,bug越来越多,并相互推诿。这种方式能避免这种情况,此为第一优点。

        其二,下载模块是很多app都会用到的模块,独立出来,并不断完善和优化,可以变成一个通用组件,给不同的app使用,这就是提高了模块和代码的解耦,提高了复用性,提高了工作效率。现在很多公司都是这样做的。

        比如,下拉刷新,android没有提供下拉刷新,很多项目为了实现android的下拉刷新,为集成开源的下拉刷新android项目。

        那么,如果实现这种设计和需求呢?即已经有一个 Android工程 A 。  现在的工程 B 中 需要集成A工程作为一个模块?

        首先想到 B工程中能否直接  包含 A的apk文件, 发现不可行。然后又想着将其中一个项目(含有res资源)打包成jar包,另一个 项目来引用。但是多次尝试总是发现找不到资源。

         这是因为android的特殊性,android不仅有java文件还有res文件,需要研究如何将资源以及activity文件打包成jar文件供其他项目调用,最终多方尝试,找到如下方案。

    

    第一步,把普通的android project设置成库项目

     库项目也是一个标准的android项目,因此你先创建一个普通的android项目。 这个项目可以起任何的名称,任何的报名,设置其他需要设置的字段等,如图1所示。

接着把项目设置成库项目,步骤如下

  1. Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
  2. Properties 窗口, 选择"Android" ,Library属性显示在右下边.
  3. 把"is Library" 单选框选择上,再点击 Apply.
  4. 点击 OK 关闭Properties 窗口.

     这时,这个项目就变成库项目了。

     当然,java项目也可以让其变成一个库项目,非常简单,执行上面的四步。其他程序项目就可以引用库项目了。

    图 1.使一个项目为库项目

    创建manifest文件

    一个库项目的manifest文件也和标准的android应用程序一样,声明所有共享的组件。

    比如APIDemo中的TicTacToeLib 这个例子,库项目声明了Activity GameActivity:

<manifest>  ...  <application>    ...    <activity android:name="GameActivity" />    ...  </application></manifest>

    第二步 引用库项目

    如果你开发的应用程序想要包括库项目中的代码和资源,非常简单,引用步骤如下

  1. Package Explorer中, 鼠标右键项目文件夹,点击 Properties.
  2. Properties 窗口, 选择"Android" ,Library属性显示在右下边.
  3. 点击Add ,打开了Project Selection对话框.
  4. 从可用库项目列表选择一个项目,然后点击 OK.
  5. 对话框关闭之后点击 Apply (在Properties窗口).
  6. 点击 OK 关闭Properties 窗口.

    完成以上六步,Eclipse 会重建项目,把库项目中的内容包含进去。 如图2所示

      图 2.让项目引用一个库项目

      如果你想增加多个库项目的引用,使用up和down可以设置他们的相对的优先级和合并顺序。工具在合并引用的库的时候顺序是从低优先级(列表的下面)到高优先级(列表的上面)。 如果不只一个库定义了相同的资源ID,这个工具选择资源时会选择高优先级的资源。应用程序自身拥有最高的优先级,自身的资源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.

 

      在menifest文件中声明库中的组件

      在manifest文件中必须增加对在当前程序中用到的库项目中的所有的组件。比如,你必须声明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>,和其他类似的元素。

声明库项目中的组件时,必须使用包含包名的类全名。

      在TicTacToeMain例子中,声明库Activity GameActivity :

<manifest>  ...  <application>    ...    <activity android:name="com.example.android.tictactoe.library.GameActivity" />    ...  </application></manifest>


 

1 0
原创粉丝点击