2021-09-18 15:35:32
创建 Android 库
Android 库在结构上与 Android 应用模块相同。它可以提供构建应用所需的一切内容,包括源代码、资源文件和 Android 清单。不过,Android 库将编译到您可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,而不是在设备上运行的 APK。与 JAR 文件不同,AAR 文件可以包含 Android 资源和一个清单文件,这样,除了 Java 类与方法外,您还可以捆绑布局和可绘制对象等共享资源。
库模块在以下情况下非常有用:
构建使用某些相同组件(例如 Activity、服务或 UI 布局)的多个应用。
构建存在多个 APK 变体(例如免费版本和付费版本)的应用并且需要在两种版本中使用相同的核心组件。
在任何一种情况下,只需要将您希望重用的文件移动到库模块中,然后以依赖项的形式为每个应用模块添加库。本页面将说明如何执行这两个操作。
创建库模块
要在您的项目中创建一个新的库模块,请按以下步骤操作:
1、点击** File > New > New Module。**
2、在出现的 Create New Module 窗口中,依次点击** Android Library 和 Next。还存在一个用于创建 Java 库的选项,可以构建传统的 JAR 文件。尽管 JAR 文件在大多数项目中都非常实用(尤其在您希望与其他平台共享代码时),但这种文件不允许您包含 Android 资源或清单文件,而后者对于 Android 项目中的代码重用非常有用。**因此,本指南将侧重论述创建 Android 库。
3、为您的库命名,并为库中代码选择一个最低的 SDK 版本,然后点击 Finish。
在 Gradle 项目同步完成后,库模块将显示左侧的 Project 面板中。如果您未看到新模块文件夹,请确保将视图切换为 Android 视图。
将应用模块转换为库模块
如果您现有的应用模块包含您希望重用的所有代码,则可以按照以下步骤将其转换为库模块:
1、打开现有应用模块的 build.gradle 文件。您应在顶部看到以下内容:
2、按照下面所示更改插件分配:
3、点击 Sync Project with Gradle Files。
就这么简单。模块的整个结构仍然相同,但是现在它将作为 Android 库运行,构建也将创建一个 AAR 文件,而不是 APK。
生成aar
在Android Studio1.4中,New project,先默认新建一个Applicaton module,接后File > New > New Module,选择Androd Library > Next,指定Library Name和Module Name。
新建的Library与正常的Application最大区别是module build.gradle中是**apply plugin: ‘com.android.library’ **而不是 apply plugin: 'com.android.application'
Build > Make project,自动生成aar文件。
以依赖项形式添加您的库
要在另一个应用模块中使用您的 Android 库的代码,请按以下步骤操作:
1、通过两种方式之一将库添加到您的项目(如果您是在相同项目中创建的库模块,则该模块已经存在,您可以跳过此步骤):
添加已编译的 AAR(或 JAR)文件:
1、点击 File > New Module。
2、依次点击 Import .JAR/.AAR Package 和** Next**。
3、输入 AAR 或 JAR 文件的位置,然后点击 Finish。
将库模块导入到您的项目中:
1、点击** File > New > Import Module。**
2、输入库模块目录的位置,然后点击 Finish。
库模块将复制到您的项目中,因此您可以尽管编辑库代码。如果您希望维护一个版本的库代码,则此方法可能不是您想要的,您应按照上文所述导入编译的 AAR 文件。
2、确保库列在您 settings.gradle 文件的顶部,如下面名为“my-library-module”的库所示:
3、打开应用模块的 build.gradle 文件,并向 dependencies 块中添加一行新代码,如下面的片段所示:
4、点击 Sync Project with Gradle Files。
在上面的示例中,名为 my-library- module 的 Android 库模块成为 build.gradle 文件所在模块的构建依赖项。
您的应用模块现在可以访问 Android 库中的任何代码和资源,库 AAR 文件在构建时已捆绑到您的 APK 中。
不过,如果希望单独共享 AAR 文件,则可以在 项目名称/模块名称/build/outputs/aar/ 中找到它,也可以通过点击 Build > Make Project 的方式重新生成此文件。
选择要设为公开的资源
库中的所有资源在默认情况下均处于公开状态。要将所有资源隐式设为私有,您必须至少将一个特定的属性定义为公开。资源包括您项目的 res/ 目录中的所有文件,例如图像。要阻止您的库用户访问仅供内部使用的资源,您应通过声明一个或多个公开资源的方式来使用这种自动私有标识机制。
要删除某个公开资源,请将一个声明添加到您的库的 public.xml文件中。如果您之前尚未添加公开资源,则需要在您的库的 res/values/目录中创建public.xml 文件。
下面的示例代码可以创建两个名称分别为 mylib_app_name和 mylib_public_string 的公开字符串资源:
android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.txt'
}
...
}
dependencies {
debugCompile project(path: ':library', configuration: 'debug')
releaseCompile project(path: ':library', configuration: 'release')
}
android {
...
publishNonDefault true
}```
不过请注意,设置 publishNonDefault会增加构建时间。
为了确保您的库的 ProGuard 规则不会将意外的压缩副作用施加到应用模块,请仅包含适当规则,停用不适用于此库的 ProGuard 功能。尝试协助开发者的规则可能会与应用模块或它的其他库中的现有代码冲突,因此不应包含这些规则。例如,您的库的 ProGuard 文件可以指定在应用模块的压缩期间需要保留的代码。
注:Jack 工具链仅支持 ProGuard 的部分压缩和模糊选项。
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