本文主要介绍在android工程中如何将共用代码建成公共包方便其他工程引用、引用后的工程结构分析、library引入方式的优缺点

自己也写了一些android公共的库,有兴趣的可以参考TrineaAndroidCommon GoogleCode或(TrineaAndroidCommon Git),欢迎交流

1、java中公共库的创建和引入

熟悉java的朋友都知道在java中可以将公用代码提取出来新建工程,打包成jar包,然后通过外部依赖或是maven依赖加入其他工程使用。

2、android中公共库的创建和引入

使用android提供的is library功能创建公共库,android adt提供了公共库的创建方法,下面逐一介绍

a. 新建android工程

这一步同一般的android工程创建方法,如下

Android 公共库的建立方法_第1张图片

b. 设置工程属性为library

右击工程->properties->Android,将工程设置为是library,如下

Android 公共库的建立方法_第2张图片

c. android公共库的引入方法

右击需要引入library的工程->properties->Android,在library中添加之前新建的common,如下

Android 公共库的建立方法_第3张图片

这样我们就成功引入library了,对于引入后的工程结构分析可以参见本文下面第三部分介绍。引入后我们可以正常的引入java类,对于资源可以像在同一个工程中引入即可,因为library的资源被并入了工程中。

PS:如果这个时候工程编译出错,则可能是因为工程和公用library中资源的冲突问题,在后面的分析中我们可以知道引入library后,对于工程的资源会进行合并。比如library中现在含有icon.png的drawable资源,若调用者资源中也含有icon.png则会编译报错,这个时候我们可以将library中的icon资源删除,对于library来说尽量不要放这些drawable资源,我们甚至可以如下图红圈所示删除所有drawable资源文件夹,防止冲突发生。

Android 公共库的建立方法_第4张图片

当然删除icon后同时需要修改相应的引用资源的文件,如这里AndroidManifest.xml中的android:icon

Android 公共库的建立方法_第5张图片

3、引用后的工程结构分析

引入library的工程目录结构如下

Android 公共库的建立方法_第6张图片

从上图三个黄色标记的地方我们可以发现library的资源被并入了工程中,同时生成了两个一样的资源文件R.java。这样做的话,对于工程来说可以方便的调用library中的资源,跟在同一个工程中调用资源无甚区别。

a、library的资源被并入调用者工程中,并且相同资源值被覆盖

library中存在strings.xml内容如下

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="hello">HelloWorld,AndroidCommon!</string>
  4. <stringname="app_name">AndroidCommon</string>
  5. </resources>

调用者同样存在strings.xml,内容如下

Java代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="app_name">TESTPROJECT</string>
  4. <stringname="string2">testString</string>
  5. </resources>

最终R.java中的string我们可以看到同时存在hello、app_name、string2三个变量,即资源被合并。并且app_name的值为TESTPROJECT,即资源值被覆盖。

b. 资源一致性

修改上面红色标记的AndroidCommon_src中的AndroidCommon的内容,会发现library中的内容也会被相应修改

c. 编译一致性

修改library的资源进行编译会发现调用者工程也会同时被编译。

4.library引入方式的优缺点

通过library方式成功引入了公用库

a.提高了代码的复用率减少了开发量

b.可以使得项目模块化以及更好的扩展

同时对于这种工程方式的引入还是觉得有一些不妥的地方

a. 通过源码引入,而不是通过类似jar包引入,从而对于library的修改导致所有引入该library都需要同时编译过于麻烦

更多相关文章

  1. Android Studio2.3+AndroidSDK安装【图文教程】附资源链接
  2. Android入门教程(四)之-------->Android工程目录结构介绍
  3. Android文件系统的提取方法(一)
  4. Android 资源简介(四) ClipDrawable
  5. Android获取webView快照与屏幕截屏的方法

随机推荐

  1. Android应用程序中执行二进制命令
  2. Android push 极光通信
  3. Android Animation 框架
  4. Android SDK: adb shell 命令的使用(am、p
  5. RTC搭建android下三层应用程序访问服务器
  6. Android 绑定数据到界面控件
  7. 转发---Android(安卓)DRM
  8. android M 指纹api小示例
  9. Android 官方博客 - Android应用程序的内
  10. Android 学习笔记之 SQLite基础用法