本页面介绍了使用 Android Gradle 插件 (AGP) 准备发布您的 Android 库项目所需的属性和选项。即使您在创建库时就设置了其中一些属性,也请查看以下指南以优化您的设置。
选择命名空间
Android 库需要声明一个命名空间,以便在编译其资源时生成唯一的 R 类。此命名空间应与库的根类包紧密匹配,以避免用户从库及其 R 类导入常规类时产生混淆。
从 AGP 7.0 开始,您可以在应用的 build.gradle 文件中设置命名空间,如以下代码示例所示
Groovy
android { namespace = 'com.example.library' }
Kotlin
android { namespace = "com.example.library" }
命名空间是库面向开发者的属性。它与应用身份无关,应用身份是使用 applicationId 属性设置的。
在 AGP 的先前版本中,applicationId 属性(用于应用)和 namespace 属性(用于库)都可以通过清单的 package 属性设置,这导致了混淆。
选择 minSdkVersion 值
为您的库选择 minSdkVersion 是发布您的库的重要方面。minSdkVersion 应反映您的代码可以支持的 Android 最低版本。
选择 minSdkVersion 时请注意以下注意事项:
选择较低的
minSdkVersion通常可以使您的库获得更广泛的分发。除非应用明确调用,否则库的代码通常不会执行。如果库对于核心应用功能并非必不可少,应用仍然可以在低于库依赖项要求的 Android 版本上运行——通过在调用库之前进行运行时检查。因此,将您的库的
minSdkVersion设置得足够低,以便它可以嵌入到应用中,并在可能时被调用,以帮助覆盖更多用户。选择较高的
minSdkVersion可能会阻止应用程序包含该库。清单合并器(AGP 中的一个步骤,用于合并来自应用及其依赖项的清单文件)强制要求没有任何依赖项的
minSdkVersion高于应用。选择较高的
minSdkVersion可能会促使应用开发者禁用清单合并器安全检查,从而在构建过程后期导致问题。因为清单合并器阻止应用项目包含
minSdkVersion高于应用本身的库,所以应用开发者可能会禁用清单合并器的安全检查,以尽量减少构建错误。然而,这会带来下游真正不兼容问题的风险。在特殊情况下,如果库的清单包含广播接收器或其他使其代码自动触发的机制,则可能需要选择较高的
minSdkVersion。在这些情况下,选择较高的
minSdkVersion可以确保代码能够运行。或者,您可以禁用自动行为,以便应用可以在进行正确的检查后选择执行库。
为了允许嵌入到应用中,请在您的库中使用 RequiresApi 注解,以向其调用者指示他们需要进行运行时检查。Android Lint 使用 RequiresApi 信息进行检查。有关使用注解改进您的 API 代码和 API 的更多资源,请参阅使用注解改进代码检查。
设置 AAR 元数据
Android 库以 Android Archive (AAR) 文件的形式打包。AAR 元数据包含有助于 AGP 使用库的属性。如果您的库被不兼容的配置使用,并且设置了 AAR 元数据,则会向用户显示错误消息以帮助他们解决问题。
选择 minCompileSdk 值
从 4.1 版开始,AGP 支持 minCompileSdk。这表示使用项目的最低 compileSdk。如果您的库包含利用较新平台属性的清单条目或资源,则需要设置此值。
minCompileSdk 值可以在模块级 build.gradle 文件中的 defaultConfig{}、productFlavors{} 和 buildTypes{} 块中设置
Groovy
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { foo { ... aarMetadata { minCompileSdk = 30 } } } }
Kotlin
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { register("foo") { ... aarMetadata { minCompileSdk = 30 } } } }
如果您在多个位置设置了 minCompileSdk,Gradle 会在构建过程中按以下顺序确定设置的优先级:
buildTypes{}productFlavors{}defaultConfig{}
在前面的示例中,minCompileSdk 在 defaultConfig{} 和 productFlavors{} 中都有定义,productFlavors{} 具有更高的优先级,minCompileSdk 设置为 30。
要了解有关 Gradle 在合并代码和资源时如何确定设置优先级的更多信息,请参阅使用源集构建。
启用测试夹具
测试夹具通常用于设置被测试的代码或促进组件的测试。从 7.1 版开始,AGP 除了为应用程序和动态功能项目创建测试夹具外,还可以为库项目创建测试夹具。
当发布库供他人使用时,请考虑为您的 API 创建测试夹具。测试夹具可以在模块级 build.gradle 文件中开启
Groovy
android { testFixtures { enable = true } }
Kotlin
android { testFixtures { enable = true } }
当您开启测试夹具时,Gradle 会自动创建一个 src/testFixtures 源集,您可以在其中编写测试夹具。
有关更多信息,请参阅 Gradle 关于使用测试夹具的文档。