假设我使用gradlew
为使用以下任一Android Studio模板创建的标准Android项目构建了调试和测试APK:
./gradlew assembleDebug assembleAndroidTest
这将在以下位置创建文件:
app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
gradlew
是否以某种方式公开了这两个路径和文件名?
Android Studio docs应该描述路径的构造方式:
要启动调试版本,请调用
中创建一个名为assembleDebug
任务:gradlew assembleDebug
这样会在module_name-debug.apk
project_name/module_name/build/outputs/apk/
的APK。
但这显然与我的任何文件都不匹配,尤其是与第二个文件都不匹配。
答案 0 :(得分:1)
./gradlew
只是一个包装,但是在build.gradle
中,人们可以访问它们:
// root project build.gradle
project.ext.set('archiveBuildTypes', ['release', 'debug'])
// module-level build.gradle
android {
getRootProject().each {
applicationVariants.all { variant ->
variant.outputs.all { output ->
if (variant.getBuildType().getName() in rootProject.archiveBuildTypes) {
def buildType = variant.getBuildType().getName()
if (variant.versionName != null) {
// baseName is the base filename
def baseName = output.baseName
// perform some string-manipulation here, if required
// outputFileName is the file-name being actually used:
String fileName = "someapp_${variant.versionName}-${baseName}.apk"
outputFileName = new File(output.outputFile.parent, fileName).getName()
println(outputFileName)
}
}
}
}
}
}
如果需要使用./gradlew
获取值,则可以将其包装到自定义的Gradle任务中,然后将其名称作为命令行参数传递。似乎outputFileName
没有在该范围内定义,但在该范围内是已知的。