Der Wert der schreibgeschützten Eigenschaft „outputFile“ für ApkVariantOutputImpl_Decorated kann nicht festgelegt werden

Lesezeit: 3 Minuten

Benutzeravatar von Addev
Addev

Ich habe den folgenden Code in meinem Gradle-Skript verwendet, um die mit AndroidStudio generierten APKs umzubenennen:

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(output.outputFile.parent, defaultConfig.versionCode + "_" + output.outputFile.name)
    }
}

Es generierte also APKs mit Namen wie: 345-app-release.apkwobei 345 der Versionscode ist.

Aber nach dem Update auf AndroidStudio 3.0 gibt es den folgenden Fehler zurück:

Der Wert der schreibgeschützten Eigenschaft „outputFile“ für ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug,filters= kann nicht festgelegt werden[]}} vom Typ com.android.build.gradle.internal.api.ApkVariantOutputImpl.

Wie kann ich mit den neuen Build-Tools eine ähnliche Umbenennung erreichen.

Verwenden output.outputFileName Anstatt von output.outputFile

  • Es wurde danach ein Fehler erstellt, ich musste ihn wie hier lösen: stackoverflow.com/a/46959050/2061089

    – oli

    30. November 2017 um 13:10 Uhr

  • versuchen Sie dies stackoverflow.com/questions/46949311/…

    – Ghanshyam Nayma

    22. Mai 2018 um 9:30 Uhr

  • Dies verursacht einen Fehler: FEHLER: Keine solche Eigenschaft: Elternteil für Klasse: java.lang.String

    – IgorGanapolsky

    9. August 2019 um 12:58 Uhr

Benutzeravatar von Zumry Mohamed
Zumri Mohamed

2019 – Einfache Lösung für Gradle 3.0+** und 3.1.0

So ändern Sie den Namen der APK in Android

 android { //add inside the android {}
   ......
   applicationVariants.all { variant ->
       variant.outputs.all {
           def flavor = variant.name
           def versionName = variant.versionName
           outputFileName = "prefix_${flavor}_${versionName}.apk"
       }
   }
}

prefix_release_1.0.1.apk

  • Absolute Pfade werden nicht unterstützt, wenn ein Ausgabedateiname festgelegt wird, bei dem dieser Fehler auftritt

    – Napoleon

    6. April 2018 um 12:08 Uhr

  • @Keselme Ich senke die Version der Gradle-Tools in der Datei build.gradle der obersten Ebene ab.

    – Napoleon

    16. April 2018 um 8:22 Uhr

  • Diese Antwort könnte Ihnen helfen stackoverflow.com/questions/46949311/…

    – Ghanshyam Nayma

    22. Mai 2018 um 9:29 Uhr


  • Die unbekannte Eigenschaft „applicationVariants“ für das Objekt des Typs „com.android.build.gradle.LibraryExtension“ konnte nicht abgerufen werden.

    – MeLean

    15. August 2018 um 10:04 Uhr


  • @MeLine jetzt ausprobieren.

    – Zumry Mohamed

    18. Oktober 2019 um 9:37 Uhr

Versuchen Sie diesen Code:

buildTypes {

       applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def name = "myapp_v${variant.versionName}(${variant.versionCode}).apk"
                output.outputFileName = name
            }
        }

    }

In oder nach Gradle 3.1.0

versuchen Sie den folgenden Code

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = new File(
                    "release_build", // here you can change the name
                    output.outputFile.name)
        }
}

In meinem Fall habe ich es gelöst, indem ich mich einfach geweigert habe, auf Gradle 4.4 zu aktualisieren (in meinem Fall). Wenn Studio Sie also auffordert (beim ersten Öffnen Ihres Projekts), Gradle zu aktualisieren, um Instant Run usw. zu unterstützen, lehnen Sie einfach ab und Sie sollte gut sein.

Benutzeravatar von notyougururu
notyoururguru

Was für mich funktioniert hat, war 1. zu ändern jeder zu “alle” 2. ändern Ausgabe.Ausgabedatei zu “outputFileName” 3. Ausführen $./gradlew sauberer Build im Endgerät

Wenn Ihre Artefakte.gradle-Einstellungen beispielsweise wie folgt lauten:

android.applicationVariants.all { variant ->

variant.outputs.each { output ->
    def finalVersionCode = 10000 + versionCode
    output.versionCodeOverride = finalVersionCode
    output.outputFile = new File(
         output.outputFile.parent,       output.outputFile.name.replace(".apk","-${finalVersion}.apk"))
}

}

Dann würden Sie wollen ändere es so:

android.applicationVariants.all { variant ->

variant.outputs.all { output ->
    def finalVersionCode = 10000 + versionCode
    output.versionCodeOverride = finalVersionCode
    outputFileName = new File(
         output.outputFile.parent,
         outputFileName.replace(".apk", "-${finalVersionCode}.apk"))
}

}

Chetans Benutzer-Avatar
Chetan

Ändern Sie Ihren Code in: –

    applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(output.outputFile.parent, "${variant.applicationId}-${variant.versionName}.apk")
    }
}

1396110cookie-checkDer Wert der schreibgeschützten Eigenschaft „outputFile“ für ApkVariantOutputImpl_Decorated kann nicht festgelegt werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy