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

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

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

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

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

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

a. 新建android工程

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

b. 设置工程属性为library

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

c. android公共库的引入方法

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

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

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

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

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

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

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

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

library中存在strings.xml内容如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="hello">Hello World, AndroidCommon!</string>
  4. <string name="app_name">AndroidCommon</string>
  5. </resources>

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="app_name">TESTPROJECT</string>
  4. <string name="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都需要同时编译过于麻烦

Android 公共库的建立方法的更多相关文章

  1. 自己总结的一些android公共库

    本文主要介绍自己在android开发中总结的一些公共库,目前包括下拉刷新ListView.可以响应各个方向CompoundDrawables点击操作的TextView.图片缓存,不断更新,欢迎交流 ? ...

  2. Eclipse中Android公共库的正确建立及调用方法

    Eclipse中Android公共库的正确建立及调用方法 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享 ...

  3. Eclipse中Android公共库的正确建立及调用方法(转)

    转自http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用 ...

  4. Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)

    介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工 ...

  5. Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

    Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一 ...

  6. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库

    一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...

  7. 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

    本文转自:http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View( ...

  8. android 动态库死机调试方法 .

    原地址:http://blog.csdn.net/andyhuabing/article/details/7074979 这两种方法都不是我发明了,都是网上一些高手公共出来的调试方法,无奈找不到出处的 ...

  9. Android引入动态库so的方法

    Android引入动态库so的方法 标签(空格分隔): Android so 第三方库 为了执行效率,会将一些CPU密集性任务如音视频解码.图像处理等放入到so中,还有也会将程序关键核心部分放入到so ...

随机推荐

  1. 脱壳_01_虚拟机壳_VMP

    写在前面的话: 上一篇文章中,带领大家一起分析了简单的压缩壳ASPACK,今天,就和大家一起来揭开VMP这道神秘的面纱: [花指令]:扰乱调试器的,并不执行: [混淆]:对原指令进行拆解或等价替换,会 ...

  2. win10 损坏 bios?

    自从前几个月升级为win10后,主板莫名奇妙的就出问题了,遇到3块不同型号2块技嘉b75,1块微信ph67 技嘉b75-ds3v 技嘉b75m-d3v 微星ph67s-c43 ms-7673 1.0 ...

  3. Java数组、集合的三种遍历方式(包懂)

    1 for循环 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+" "); } 2 foreach循环,这种 ...

  4. 【Ansible 文档】【译文】网络支持

    Networking Support 网络支持 Working with Networking Devices 使用网络设备 自从Ansible 2.1开始,你现在可以使用成熟模型 - 编写 play ...

  5. 常用npm 命令

    npm 官方网站:npm的使用说明   安装模块 npm install 安装当前目录package.json文件中配置的dependencies模块   安装本地的模块文件 npm install ...

  6. 关于react的一点工作总结

    首先,react是Facebook开发的一套前端框架,仅仅是MVC中的V.核心思想是“封装组件”,组件封装后可以作为一个独立的实体被引入到新的组件中,这样新的组件就又是一个实体了,由于组件的实现了可复 ...

  7. 【2018暑假集训模拟一】Day1题解

    T1准确率 [题目描述] 你是一个骁勇善战.日刷百题的OIer. 今天你已经在你OJ 上提交了y 次,其中x次是正确的,这时,你的准确率是x/y.然而,你最喜欢一个在[0; 1] 中的有理数p/q(是 ...

  8. CentOS下iptables详解

    一:前言   防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...

  9. 20165302 程上杰 Exp2 后门原理与实践

    一,后门概念 后门就是不经过正常认证流程而访问系统的通道. 二,后门工具 1.netcat(nc.ncat) 是一个底层工具,进行基本的TCP UDP数据收发.常被与其他工具结合使用,起到后门的作用. ...

  10. ICC 常用命令

    1. 列出当前design 用到的 db 库: list_libs 2. 列出当前design 用到的 reference 库: report_mw_lib   -mw_referenc_librar ...