整体报错信息如下:
groovy.lang.MissingMethodException: No signature of method:
org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar.getPath() is applicable for argument types: () values: []
Possible solutions: getAt(java.lang.String), getClass(), get(), getType(), each(groovy.lang.Closure), iterator()
发生报错的原因是升级Gradle到3.6.2后,部分API改变,无法获取到APK打包的文件目录。报错部分代码如下:
//APK输出名称
applicationVariants.all { variant ->
//apk生成目录。此行报错,outputDirectory.getPath()不再适用
def apkDirectoryPath = variant.packageApplicationProvider.get().outputDirectory.getPath()
//项目目录
def projectPath = projectDir.getPath()
//若apk生成目录不在app/下,则根据项目配置生成apk名称。
//加上这个判断的目的是避免开发阶段中,每次运行生成新的apk名称,导致build/有大量apk文件
if (!apkDirectoryPath.startsWith(projectPath)) {
variant.outputs.each { output ->
output.outputFileName = createApkName(appName, appVersionName, appVersionCode, gradleProp)
}
}
}
将报错行代码做以下修改即可解决:
def apkDirectoryPath = variant.packageApplicationProvider.get().outputDirectory.get().toString()
其实报错log已有提示,但是outputDirectory.get()
返回不是String
类型,导致后续if
判断出错,浪费了一些解决时间,记录一下
网友评论