创建一个新配置并为Android gradle中的模块设置其BuildTypeAttr

问题描述 投票:0回答:1

按照这个堆栈溢出答案构建Android库时出错:不支持直接本地.aar文件依赖项为了解决我原来的问题,在我的模块上我创建了一个包含以下内容的build.gradle文件:

configurations.maybeCreate("default")
artifacts.add("default", file('[nameOfTheAar].aar'))

到目前为止,一切都很好。 然后我想扩展它,以便在调试和发布时使用 2 个不同的 aar。我试过:

configurations.maybeCreate("debug")
configurations.maybeCreate("release")
artifacts.add("debug", file('[nameOfTheAar]-debug.aar'))
artifacts.add("release", file('[nameOfTheAar]-release.aar'))

但是配置名称不足以允许自动选择,并且出现以下错误:

Could not determine the dependencies of task ':[moduleName]:buildCMakeDebug[arm64-v8a]'.
> Could not resolve all task dependencies for configuration ':realsense:debugCompileClasspath'.
   > Could not resolve project :[submoduleName].
     Required by:
         project :[moduleName]
      > No matching configuration of project :[submoduleName] was found. The consumer was configured to find a library for use during compile-time, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'com.android.build.api.attributes.AgpVersionAttr' with value '8.3.1', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but:
          - Configuration 'debug':
              - Other compatible attributes:
                  - Doesn't say anything about com.android.build.api.attributes.AgpVersionAttr (required '8.3.1')
                  - Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'debug')
                  - Doesn't say anything about its component category (required a library)
                  - Doesn't say anything about its target Java environment (preferred optimized for Android)
                  - Doesn't say anything about its usage (required compile-time)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'androidJvm')
          - Configuration 'release':
              - Other compatible attributes:
                  - Doesn't say anything about com.android.build.api.attributes.AgpVersionAttr (required '8.3.1')
                  - Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'debug')
                  - Doesn't say anything about its component category (required a library)
                  - Doesn't say anything about its target Java environment (preferred optimized for Android)
                  - Doesn't say anything about its usage (required compile-time)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'androidJvm')

所以它看起来需要一个 BuildTypeAttr 设置类型的属性,我已经尝试了以下内容,但它不是正确的语法/它不起作用:

configurations.maybeCreate("debug").attributes { it.attribute(BuildTypeAttr, "debug")}
configurations.maybeCreate("release").attributes { it.attribute(BuildTypeAttr, "release")}
artifacts.add("debug", file('librealsense-debug.aar'))
artifacts.add("release", file('librealsense-release.aar'))

在配置上设置构建类型属性的正确方法是什么(使用 kotlin 脚本语言)?

android gradle gradle-kotlin-dsl android-module
1个回答
0
投票

这是[子模块]上需要的build.gradle,用于根据构建类型自动选择不同的aar文件:

import com.android.build.api.attributes.*

configurations.maybeCreate("debug").attributes { attribute(BuildTypeAttr.ATTRIBUTE, project.objects.named(BuildTypeAttr.class,"debug")) }
configurations.maybeCreate("release").attributes { attribute(BuildTypeAttr.ATTRIBUTE, project.objects.named(BuildTypeAttr.class,"release")) }

artifacts.add("debug", file('[nameOfTheAar]-debug.aar'))
artifacts.add("release", file('[nameOfTheAar]-release.aar'))

这允许您的[模块]中只有一行导入[子模块]

implementation(project(":[submodulename]"))

要点是:

© www.soinside.com 2019 - 2024. All rights reserved.