web-dev-qa-db-fra.com

Android Gradle 3.0.0-alpha2 plugin, impossible de définir la valeur de la propriété en lecture seule 'outputFile'

j'utilisais ce code

applicationVariants.all { variant -> 
    variant.outputs.each { output ->
        def SEP = "_"
        def flavor = variant.productFlavors[0].name
        def buildType = 
        variant.variantData.variantConfiguration.buildType.name
        def version = variant.versionName
        def date = new Date()
        def formattedDate = date.format('ddMMyy_HHmm')
        def newApkName = PROJECT_NAME + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
        def file = new File(newApkName)
        output.outputFile = file
    }
}


changer le nom du fichier apk quand je construis un nouvel apk, mais depuis que j'utilise le Android Studio 3.0 Canary 2 cette erreur apparaît:
Impossible de définir la valeur de la propriété en lecture seule 'outputFile' ....

79
Mohamd Ali

Comme Guide de migration du plugin Android 3.0 suggère:

  • Utilisez all() au lieu de each()
  • Utilisez outputFileName au lieu de output.outputFile si vous ne modifiez que le nom du fichier (c'est votre cas)

Exemple du guide:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
Android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}
196
Paweł Nadolski

Voir ci-dessous:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def newApkName = applicationId + "-" + variant.versionName + "(" + variant.versionCode + ")" + ".apk";
        outputFileName = new File("${project.projectDir}/../outputs/apks/" + variant.name, newApkName);
    }
}
6
Golan Shay

Le code ci-dessous fonctionne pour moi sur le studio Android canary 3.0.0-alpha3

Android.applicationVariants.all {
    variant.outputs.all {
        def newApkName
        newApkName = "APPLICATION_NAME-" + defaultConfig.versionName + "-" + defaultConfig.versionCode".apk"
        outputFileName = newApkName;
    }
}

Cela change le nom du fichier apk

4

C'est l'exemplecompletde cette question.

Seulement vous devez coller dans votre gradle 3.0+ after productavoules

    Android.applicationVariants.all { variant ->
    variant.outputs.all {

        def SEP = "_"
        def flavor = variant.productFlavors[0].name
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def version = variant.versionName
        def versionCode = variant.versionCode
        def date = new Date();
        def formattedDate = date.format('ddMMyy_HHmm')

        outputFileName = "${flavor}${SEP}${buildType}${SEP}${version}${SEP}${versionCode}${SEP}${formattedDate}.apk"
    }
    }
2
Pabel

Cela fait un an et demi que la question a été posée mais peut-être que cela aidera quelqu'un (comme moi) qui découvre ce poste en premier Je crois que la réponse pour changer le nom du fichier et le répertoire a été répondu ici .

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                     .relativize(rootDir.toPath()).toFile()
            output.outputFileName = new File( "$relativeRootDir/release", newOutputName)
        }
    }
0
Hendercine

J'ai eu le même problème. Erreur "Impossible de définir la valeur de la propriété en lecture seule 'outputFile' ...." "

J'ai donc modifié la version du référentiel de plugins Android en 2.3.3 dans la fenêtre Structure du projet. Cela fonctionne maintenant et l'erreur a disparu.

Structure du projet

Plus tard, nettoyez et reconstruisez pour le projet et c'est tout

J'espère que cela vous sera utile.

0
user3287093

J'ai fondé Gradle 3.0 n'est plus un travail. lien source

Cependant, les tâches plus complexes impliquant l'accès aux objets outputFile ne fonctionnent plus. En effet, les tâches spécifiques aux variantes ne sont plus créées lors de la phase de configuration. Cela a pour conséquence que le plug-in ignore toutes ses sorties à l'avance, mais cela signifie également des temps de configuration plus rapides.

puis j'ai utilisé la commande gradlew pour compiler project.and cple résultat apk sur mon chemin spécifié

Dans Execute Shell, j'ai mis la commande ci-dessous.

./gradlew clean assembleDebug
cp $WORKSPACE/app/build/outputs/apk/debug/*.apk $WORKSPACE/JenkinsApk
0
Better