DefaultFilePropertyFactory$Defau

2020-06-06  本文已影响0人  不收敛的柯西

整体报错信息如下:

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判断出错,浪费了一些解决时间,记录一下

上一篇下一篇

猜你喜欢

热点阅读