Aff*_*ian 51 android gradle android-library
我有一个项目,里面有几个模块,其中一个是名为(很差)的Android库sdk.当我构建项目时,它输出一个名为的AAR sdk.aar.
我无法在Android或Gradle文档中找到允许我更改AAR输出名称的任何内容.我希望它有一个基本名称+版本号,就像Jar任务一样,但我无法弄清楚如何为AAR做同样的事情,因为它的所有配置似乎都隐藏在android.library插件中.
在此阶段重命名模块不是一个选项,仍然不会将版本号添加到最终的AAR.
如何更改com.android.libraryGradle中生成的AAR的名称?
Gradle解决方案
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
versionCode 4
versionName '1.3'
testFunctionalTest true
project.archivesBaseName = "Project name"
project.version = android.defaultConfig.versionName
}
Run Code Online (Sandbox Code Playgroud)
qix*_*qix 83
正如下面的评论和另一个答案所述,这里的原始答案不适用于Gradle 3+.根据文档,以下内容应该有效:
使用Variant API来操作变量输出会被新插件破坏.它仍然适用于简单的任务,例如在构建时更改APK名称,如下所示:
// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${variant.versionName}.apk"
}
}
Run Code Online (Sandbox Code Playgroud)
老答案:
我无法使用Android Studio 0.8.13/Gradle 2.1获取archivesBaseName和版本.虽然我可以在defaultConfig中设置archivesBaseName和version,但它似乎不会影响输出名称.最后,将以下libraryVariants块添加到我的android {}范围最终对我有用:
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
def fileName = "${archivesBaseName}-${version}.aar"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
Run Code Online (Sandbox Code Playgroud)
dev*_*evz 21
对于使用Gradle 4的Android Studio 3和Gradle 3.0.0的Android插件,您必须将qix的答案更改为以下内容:
android {
...
libraryVariants.all { variant ->
variant.outputs.all { output ->
if (outputFile != null && outputFileName.endsWith('.aar')) {
outputFileName = "${archivesBaseName}-${version}.aar"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
lig*_*igi 12
使用build-plugin 1.5.0,现在可以在defaultConfig中使用archivesBaseName
Spe*_*o83 11
对于最新版本的 Gradle 5+,这是@frouo 回答后的最佳回答:
defaultConfig {
...
versionName "some-version-name-or-number"
setProperty("archivesBaseName", "${archivesBaseName}-$versionName")
...
}
Run Code Online (Sandbox Code Playgroud)
AAR 扩展将自动添加。
Mar*_*fer 10
除了qix在这里回答您可以通过常规字符串通过此方法添加多个输出路径的信息:
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
def fileName = "${archivesBaseName}-${version}.aar"
output.outputFile = new File(outputFile.parent, fileName)
output.outputFile = new File("/home/pepperonas/IdeaProjects/Libraries/Base/testapp/libs", fileName)
}
}
}
Run Code Online (Sandbox Code Playgroud)
(Upvotes属于qix - 我只是因为可读性而将其写为答案).
小智 8
在我的情况下,$ {version}导致“未指定”,最后我发现$ {defaultConfig.versionName}有效。
android {
...
libraryVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${defaultConfig.versionName}.aar"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20095 次 |
| 最近记录: |