1.6 创建Android库

Android库在结构上与Android应用模块相同。它可以提供构建应用所需的一切内容,包括源代码、资源文件和Android清单。不过,Android库将编译到可以用作Android应用模块依赖项的Android归档(AAR)文件,而不是在设备上运行的APK。与JAR文件不同,AAR文件可以包含Android资源和一个清单文件,这样除了Java类与方法外,还可以捆绑布局和可绘制对象等共享资源。

库模块在以下情况下非常有用:

• 构建使用某些相同组件(例如Activity、服务或UI布局)的多个应用。

• 构建存在多个APK变体(例如免费版本和付费版本)的应用并且需要在两种版本中使用相同的核心组件。

就像公司有10多个App,可以把所有App都需要用的东西封装到库模块中,例如网络请求、在线加载图片等。

这10多个项目都依赖这个库,而不是10多个项目都写一遍网络请求的代码,并且用库的方式方便修改。

当访问网络的代码有bug的时候,只需要修改这个库文件的代码就好了。

1.6.1 创建库模块

要在项目中创建一个新的库模块,需要进行以下操作:

步骤01点击File→New→New Module。

步骤02在出现的Create New Module对话框中,依次点击Android Library和Next。

提 示

还存在一个用于创建Java库的选项,可以构建传统的JAR文件。尽管JAR文件在大多数项目中都非常实用(尤其在希望与其他平台共享代码时),但这种文件不允许包含Android资源或清单文件,而后者对于Android项目中的代码重用非常有用。根据需求决定。

步骤03为你的库命名,并为库中代码选择一个最低的SDK版本,然后点击Finish。在Gradle项目同步完成后,库模块将显示在左侧的Project面板中。

1.6.2 将库模块导入到项目中

有时我们的项目要用别人项目中依赖的库,手动复制过来太麻烦,Android Studio支持导入库文件。

步骤01点击File→New→Import Module。

步骤02选择库模块目录的位置,然后点击Finish。

库模块的代码将会复制到你的项目中,也可以修改库代码。

1.6.3 将应用模块转换为库模块

如果希望把应用模块转换为库模块,可以采用以下步骤:

步骤01打开现有应用模块的build.gradle文件。在顶部看到以下内容:

    apply plugin: 'com.android.application'

步骤02修改成下面这行代码:

    apply plugin: 'com.android.library'

步骤03点击Sync Project with Gradle Files。

将应用模块转换为库模块就是这么简单,只需要修改一行代码。模块的结构是一样的,改了之后构建的是AAR文件,而不是可以运行在手机上的APK文件。

1.6.4 开发库模块的注意事项

在开发库模块和相关应用时,需要注意以下行为和限制。

将库模块引用添加至你的Android应用模块后,可以设置它们的相对优先级。构建时,库会按照一次一个的方式与应用合并,并按照从低到高的优先级顺序进行。

• 资源合并冲突:构建工具会将库模块中的资源与相关应用模块的资源合并。如果在两个模块中均定义了给定资源ID,将使用应用中的资源。

如果多个AAR库之间发生冲突,将使用依赖项列表首先列出(位于dependencies块顶部)库中的资源。

为了避免常用资源ID的资源冲突,请使用在模块(或在所有项目模块)中具有唯一性的前缀或其他一致的命名方案。

• 库模块可以包含JAR库:可以开发一个自身包含JAR库的库模块。不过,需要手动编辑相关应用模块的构建路径,并添加JAR文件的路径。

• 库模块可以依赖外部JAR库:可以开发一个依赖于外部库(例如Maps外部库)的库模块。在这种情况下,相关应用必须针对包含外部库(例如Google API插件)的目标构建。需要注意的是,库模块和相关应用都必须在其清单文件的元素中声明外部库。

• 库模块不得包含原始资源:工具不支持在库模块中使用原始资源文件(保存在assets/目录中)。应用使用的任何原始资源都必须存储在应用模块自身的assets/目录中。

• 应用模块的minSdkVersion必须大于或等于库定义的版本:库作为相关应用模块的一部分编译,因此,库模块中使用的API必须与应用模块支持的平台版本兼容。

• 每个库模块都会创建自己的R类:在构建相关应用模块时,库模块将先编译到AAR文件中,然后添加到应用模块中。因此,每个库都有其自己的R类,并根据库的软件包名称命名。

• 从主模块和库模块生成的R类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。

1.6.5 AAR文件详解

AAR文件的文件扩展名为.aar,Maven工件类型也应当是.aar。文件本身是一个包含以下强制性条目的zip文件:

• /AndroidManifest.xml

• /classes.jar

• /res/

• /R.txt

此外,AAR文件可能包含以下可选条目中的一个或多个:

• /assets/

• /libs/名称.jar

• /jni/abi名称/名称.so(其中abi名称是Android支持的ABI之一)

• /proguard.txt - /lint.jar