项目中要集成其他项目由于集成项目庞大不想机械的copy,就想将集成的项目做成项目库,这样以后集成项目升级,本项目里面升级扩展也方便。

集成步骤和方法: 1.库项目的结构 一个库项目是一个包含了源码和资源的项目,它可以被其他的项目引用,从而让其他项目使用它包含的代码和资源。多个Android应用程序项目可以引用同一个库项目,同一个Android应用程序项目也可以引用多个库项目。

2.库项目创建和使用

库项目就是一个完整的android项目我们只需要配置一下他的lib属性就可以了就可以作为一个lib项目来使用。步骤:右键需要作为lib的项目---》Properties---》android----》

Library----在isLibrary的前面勾选复选框即可。

引用外部项目库笔记" src="https://img.it610.com/image/info8/8317d6bdb5dc4dc0a2d19670e1a987ae.jpg" alt="Android 引用外部项目库_第1张图片" name="image_operate_92621348032965607" width="360" height="360" style="border:1px solid black;">

我们在其它android的项目中怎么使用库项目了?,也很简单:

跟上面的步骤一样,只是在Library中不是选择Is Library 而是 add 添加一个Lib项目

例:

引用外部项目库笔记" src="https://img.it610.com/image/info8/5b96e310e9644f7393cbec080546443e.jpg" alt="Android 引用外部项目库_第2张图片" name="image_operate_35471348032975980" width="360" height="360" style="border:1px solid black;">

 

lib项目中使用的过程中需要注意的事

在使用库项目的时候,因为Android项目结构及编译工具的特殊性,我们需要注意一些要点,列举如下:

1.工作项目和库项目的资源名称,如果名称重复,编译器会优先使用工作项目(也称为子项目)的资源,这个特点在项目中也可以利用,比如自己想要替换资源文件的东西,只需要命名相同就可以了;

2.无法将一个库项目导出为一个jar文件;

3.库项目的Android系统版本必须等于或低于工作项目的系统版本;

4.每一个库项目都会生成一个R文件,工作项目被编译时,将会合并工作项目和库项目的R文件,如果R文件中有常量同名,将使用工作项目R文件中的常量;如果引用了多个库项目,库项目中的R文件有常量重名,将根据库项目被引用的顺序来确定常量的使用优先级。

 

库项目使用的场景

库项目确实为重复代码代码带来了很大的好处。但是并不是什么情况下都是适用的,就像前面提到的适合做一些特定逻辑上的处理,比如新浪微博我们开发新浪的一些功能可以使用新浪微我们提供的lib项目,它里面主要封装了一些接口的操作。我们只需要调用就可以了,这种场景库项目来对指定的接口完成指定的事情。如果使用同一个lib项目时接口有很大的改变就不适合使用lib,因为在lib项目中封装的逻辑处理是不能改变的包括接口的调用。和异常的一些处理。我们必须之前做好足够的设计。在对各种android的控件定义格式的尽量使用style来完成,来方便不同子项目来调用同一个库项目修改控件属性的修改性。

 

最后说一下资源冲突问题有上面注意点:

1.工作项目和库项目的资源名称,如果名称重复,编译器会优先使用工作项目(也称为子项目)的资源,这个特点在项目中也可以利用,比如自己想要替换资源文件的东西,只需要命名相同就可以了;

我们知道本项目的优先级最高。但要注意一点的是string里面的国际化问题。一般集成的项目都很完善国际化分辨率什么的都支持,自然自己的项目就支持了这些功能,这样就会出现你在string里面定义了一个key跟项目库里面的key一样但结果值缺以项目库的为准的现象,为什么?因为手机去找value-zn(一般手机默认是语言是中文)的资源了,由于你本来项目里面没有国际化,所以自然去项目库里面找资源了,最容易出现的问题就是app_name总是项目库的名字。

  还有一点要提醒的是 在清单文件中声明库组件 在应用项目的清单文件中,你必须加入应用使用、从库项目输出的所有组件的声明。例如,你必须声明全部的,等等,及,和类似的元素。 必须通过它们的包全名来声明引用的库组件。简单的说就是 AndroidManifest.xml文件是要从项目库里面都copy过来的。copy过来的activity等标签包名要写全名例如: android:name="org.sipdroid.sipua.ui.InCallScreen" android:excludeFromRecents="true" android:label="@string/app_name" android:launchMode="singleInstance" android:taskAffinity="" >

更多相关文章

  1. [Android(安卓)之美] 那些你不知道的APK 瘦身,让你的APK更小
  2. android/NDK开发assets资源中文名打包问题
  3. g1安装android软件详细攻略
  4. 如何访问android的asset目录和res目录下的文件
  5. Android(安卓)热补丁技术——资源的热修复
  6. 无标题文浅入浅出 Android(安卓)安全 (三) Android(安卓)本地用户
  7. Android(安卓)拼接两个图片
  8. Android热修复(一):底层替换、类加载原理总结 及 DexClassLoader类
  9. Android换肤的两种思路

随机推荐

  1. C# 数据操作系列 - 11 NHibernate 配置和
  2. 【asp.net core 系列】2 控制器与路由的
  3. C# 数据操作系列 - 13 SqlSugar 初探
  4. 【Java Spring Cloud 实战之路】- 2 创建
  5. C# 数据操作系列 - 14 深入探索SqlSugar
  6. 【asp.net core 系列】3 视图以及视图与
  7. C# 数据操作系列 - 15 SqlSugar 增删改查
  8. 【asp.net core 系列】4. 更高更强的路由
  9. 【Java Spring Cloud 实战之路】- 使用Na
  10. C# 数据操作系列 - 16 SqlSugar 完结篇