无法使用Android Studio 3.1.3为ApkVariantOutputImpl_Decorated设置只读属性'outputFile'的值

时间:2018-08-15 10:55:54

标签: android android-proguard android-studio-3.1.3

  

你好朋友,   
当在新的Android Studio版本中使用proguard规则为3.1.3时,app.gradle文件面临一个问题。它可以在旧Studio版本2.3.3上正常工作。
我的完整错误Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.

App.Gradle文件:
android { ..................... buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk")) } } } } }

感谢,

2 个答案:

答案 0 :(得分:2)

对于Gradle 3.0 + **

android {
...
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        applicationVariants.all { variant ->
            variant.outputs.all {
                def formattedDate = new Date().format('yyyyMMddHHmmss')
                def flavor = variant.name
                def versionName = variant.versionName
                outputFileName = "AppName_${versionName}_${flavor}_${formattedDate}.apk"
            }
        }
    }
}
...
}

结果:

AppName_release_1_20200121175123.apk

答案 1 :(得分:0)

variant输出不再提供outputFile属性。您应该能够像这样得到它:

def variantOutput = ...
def outputFile

try
{
    outputFile = variantOutput.outputFile
}
catch (Exception ex)
{
    def packageTask = variantOutput.packageApplication
    outputFile = packageTask.outputFile
}