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' ....
Comme Guide de migration du plugin Android 3.0 suggère:
all()
au lieu de each()
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"
}
}
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);
}
}
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
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"
}
}
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) } }
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.
Plus tard, nettoyez et reconstruisez pour le projet et c'est tout
J'espère que cela vous sera utile.
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 cp
le 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