首页 > 解决方案 > 从同一个模块构建 AAR 和 APK

问题描述

我需要根据不同的构建风格从同一模块生成 AAR 和 APK。

但是 APK 需要一个 applicationId,而 library 不需要。我必须在 build.gradle 中添加 if-case。有没有更好的方法来达到同样的结果?

我当前的gradle文件:

productFlavors {
 generateAar {
  versionCode buildVersionCode()
  versionName getPackageName()
 }

 generateApk {
  if (!library) {
    applicationId "appId"
  }
  versionCode buildVersionCode()
  versionName getPackageName()
 }

标签: androidgradleandroid-gradle-pluginaar

解决方案


模块可以是库或应用程序,不能同时是两者。

您可能应该考虑将所有代码包装到应用程序模块可以使用的库模块中(仅清单和启动器资源可绘制)

这样,您的逻辑可以从库中打包为 aar 工件,如果在同一个项目中,您的应用程序模块可以直接使用它,如果在单独的项目中,则可以作为打包的工件使用。

PS:当使用本地 aar 时,需要在依赖它的应用程序模块中明确定义对工件的传递依赖。

此外,根据您的用例,您可能需要考虑如何通过功能或层(数据、域、演示文稿等)实现项目的模块化


推荐阅读