Cela ne fonctionne pas pour Gradle 2.2.1+ versions: > Pas de telle propriété: outputFile pour la classe: com.android.construire.gradle.interne.l'api.ApplicationVariantImpl_Decorated Cela ne fonctionne pas pour Gradle 4.1: Impossible de définir la valeur de propriété en lecture seule 'outputFile' Avec Gradle 4.1 :- 1. au lieu de "variante.les sorties.chaque" utilisation "de la variante.les sorties.tous les" et 2. au lieu de "variante.outputFile" utilisation "de la variante.outputFileName" Impossible de définir le répertoire avec outputFileName, pouvez-vous? vous ne pouvez pas définir un répertoire/dossier avec outputFileName Cependant, vous pouvez utiliser des chemins relatifs (.e.g. "..\\..\\${buildType}\\${variante.flavorName}.apk"
J'ai trouvé la solution qui fonctionne avec le dernier plugin Gradle:
def archiveBuildTypes = ["release", "debug"];
applicationVariants.all { variant ->
variant.outputs.each { output ->
if (variant.buildType.name in archiveBuildTypes) {
//Update output filename
if (variant.versionName != null) {
String name = "MY_APP-${variant.versionName}-${output.baseName}.apk"
output.outputFile = new File(output.outputFile.parent, name)
}
//Move output into DIST_DIRECTORY
def taskSuffix = variant.name.capitalize()
def assembleTaskName = "assemble${taskSuffix}"
if (tasks.findByName(assembleTaskName)) {
def copyAPKTask = tasks.create(name: "archive${taskSuffix}", type: org.gradle.api.tasks.Copy) {
description "Archive/copy APK and mappings.txt to a versioned folder."
print "Copying APK&mappings.txt from: ${buildDir}\n"
from("${buildDir}") {
include "**/mapping/${variant.buildType.name}/mapping.txt"
include "**/apk/${output.outputFile.name}"
}
into DIST_DIRECTORY
eachFile { file ->
file.path = file.name //so we have a "flat" copy
}
includeEmptyDirs = false
}
tasks[assembleTaskName].finalizedBy = [copyAPKTask]
}
}
}
}
Sur quelle version est-ce pris en charge? Dernière gradle 4.1 les rapports de propriété inconnue 'archivedBuildTypes'. Et la prochaine est propriété en lecture seule 'outputFile' Mon build gradle a échoué avec l'erreur: Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=oneOfMyVariantDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl Je pense que vous avez de la faute de frappe. Il n'est pas archivedBuildTypes mais archiveBuildTypes
Cela ne fonctionne pas pour Gradle 4.1: Impossible de définir la valeur de propriété en lecture seule 'outputFile'. Gradle 4.1 sauve les APK dans des sous-dossiers nommés d'après la variante.
Cette solution est de travailler pour classpath 'com.android.tools.build:gradle:3.1.2' et distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip. Placez le code suivant à l'intérieur de votre android champ d'application de niveau build.gradle fichier. Lorsque vous utilisez la commande ./gradlew assembleDebug ou ./gradlew assembleRelease, le dossier de sortie sera copié dans le distFolder.
//Change all of these based on your requirements
def archiveBuildTypes = ["release", "debug"];
def distFolder = "/Users/me/Shared Folder(Personal)/MyApplication/apk/"
def appName = "MyApplication"
applicationVariants.all { variant ->
variant.outputs.all { output ->
if (variant.buildType.name in archiveBuildTypes) {
//Update output filename
if (variant.versionName != null) {
String name = "$appName-${variant.versionName}-${output.baseName}.apk"
outputFileName = new File(name)
}
def taskSuffix = variant.name.capitalize()
def assembleTaskName = "assemble${taskSuffix}"
if (tasks.findByName(assembleTaskName)) {
def copyAPKFolderTask = tasks.create(name: "archive${taskSuffix}", type: org.gradle.api.tasks.Copy) {
description "Archive/copy APK folder to a shared folder."
def sourceFolder = "$buildDir/outputs/apk/${output.baseName.replace("-", "/")}"
def destinationFolder = "$distFolder${output.baseName.replace("-", "/")}"
print "Copying APK folder from: $sourceFolder into $destinationFolder\n"
from(sourceFolder)
into destinationFolder
eachFile { file ->
file.path = file.name //so we have a "flat" copy
}
includeEmptyDirs = false
}
tasks[assembleTaskName].finalizedBy = [copyAPKFolderTask]
}
}
}
}
c'est un travail pour moi:
ou pour Gradle 2.2.1+
mais "nettoyer" la tâche ne sera pas tomber que apk, de sorte que vous devrait s'étendre propre tâche comme ci-dessous:
totalité de l'échantillon:
Cela ne fonctionne pas pour Gradle 4.1: Impossible de définir la valeur de propriété en lecture seule 'outputFile'
Avec Gradle 4.1 :- 1. au lieu de "variante.les sorties.chaque" utilisation "de la variante.les sorties.tous les" et 2. au lieu de "variante.outputFile" utilisation "de la variante.outputFileName"
Impossible de définir le répertoire avec outputFileName, pouvez-vous?
vous ne pouvez pas définir un répertoire/dossier avec outputFileName Cependant, vous pouvez utiliser des chemins relatifs (.e.g. "..\\..\\${buildType}\\${variante.flavorName}.apk"
OriginalL'auteur gerbit
J'ai trouvé la solution qui fonctionne avec le dernier plugin Gradle:
Mon build gradle a échoué avec l'erreur:
Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=oneOfMyVariantDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl
Je pense que vous avez de la faute de frappe. Il n'est pas archivedBuildTypes mais archiveBuildTypes
OriginalL'auteur goRGon
Pour Gradle version 2.2.1 +, vous pouvez le faire:
OriginalL'auteur Prerak Sola
Cette solution est de travailler pour
classpath 'com.android.tools.build:gradle:3.1.2'
etdistributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
. Placez le code suivant à l'intérieur de votre android champ d'application de niveaubuild.gradle
fichier. Lorsque vous utilisez la commande./gradlew assembleDebug
ou./gradlew assembleRelease
, le dossier de sortie sera copié dans ledistFolder
.OriginalL'auteur HendraWD