当我使用Android Studio 3.0 时,我在project/build.gradle
中使用下一版 Android Gradle Plugin :
classpath 'com.android.tools.build:gradle:3.0.1'
它的工作正常。 在我更新到Android Studio 3.1 后,我更新了 Android Gradle插件:
classpath 'com.android.tools.build:gradle:3.1.0'
现在我的app/build.gradle
:
def releaseFileName = "${rootProject.name}_${defaultConfig.versionName}.apk"
outputFileName = new File(rootProject.projectDir.absolutePath + "/release", releaseFileName.toLowerCase())
错误:
设置输出文件名时不支持绝对路径
我需要将输出apk(app-release.apk
)放在项目的特定路径中。在文件夹MyProject/release/app-relese.apk
中。我怎么能这样做?
答案 0 :(得分:21)
如果这有帮助,这个错误意味着现在不允许在与apk的文件名相关的任何内容上有绝对路径。我可以在我之前和之后附上你以实现我所需要的(在项目/ app / build /文件夹中拥有APK:
BEFORE gradle 3.1.0
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = new File(
output.outputFile.parent,
output.outputFile.name)
}
}
IN或AFTER gradle 3.1.0
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = new File(
"./../../../../../build/",
output.outputFile.name)
}
}
答案 1 :(得分:11)
我认为使用“./../../../”是一个糟糕的解决方案......我为几个项目使用通用的gradle脚本,我想让代码从输出dir的深度独立。
经过一番研究后,我找到了gradle插件3.1.2的解决方案:
applicationVariants.all { variant ->
variant.outputs.all { output ->
def relativeRootDir = output.packageApplication.outputDirectory.toPath()
.relativize(rootDir.toPath()).toFile()
output.outputFileName = new File( "$relativeRootDir/release", newOutputName)
}
}
答案 2 :(得分:8)
我遇到了同样的问题。我没有努力弄清楚究竟发生了什么,但有一个简单的解决办法。
只需从新文件中删除root并信任该框架,即将代码更改为
outputFileName = new File("release", releaseFileName.toLowerCase())
这对我们来说已经足够了。我们不关心apk的位置,只关注特定风味的apk的名称。
答案 3 :(得分:2)
我找到了解决方案:
def releaseFileName = "${rootProject.name}_${defaultConfig.versionName}.apk"
outputFileName = "/../../../../../release/" + releaseFileName.toLowerCase()
现在在app-release.apk
MyProject/release/app-relese.apk
成功
答案 4 :(得分:1)
组装/连接新文件名:
def newFileName = "assemble-your-new-file-name"
然后简单地将其分配回来。
outputFileName = newFileName
答案 5 :(得分:1)
对于 gradle-6.5.1:
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = new File("ApkName.apk")
}
}
答案 6 :(得分:0)
使用error[E0308]: mismatched types
--> src/main.rs:3:20
|
3 | let nums: () = a
| ____________________^
4 | | .chars()
5 | | .map(|c| c.to_digit(10).unwrap())
6 | | .collect::<Vec<u32>>();
| |______________________________^ expected (), found struct `std::vec::Vec`
|
= note: expected type `()`
found type `std::vec::Vec<u32>`
来避免警告“ variantOutput.getPackageApplication()已过时”
variant.packageApplicationProvider.get().outputDirectory
答案 7 :(得分:0)
如果要附加版本名称和版本代码,请执行以下操作:
applicationVariants.all { variant ->
variant.outputs.all {
def versionName = variant.versionName
def versionCode = variant.versionCode
def variantName = variant.name
outputFileName = "${rootProject.name}" + '_' + variantName + '_' + versionName + '_' + versionCode + '.apk'
}
}