J'ai récemment remarqué un nouveau fichier généré à <module>/release/output.json
par Android Studio 3 Canary 1 chaque fois que j'exécute Build
-> Generate Signed APK...
, dont le contenu ressemble à ce qui suit.
Quelqu'un peut-il également confirmer avoir vu ce comportement? Ou est-ce dû à une configuration locale sur mon ordinateur portable?
Et quelqu'un peut-il expliquer le but de ce fichier? Est-il sûr d'ajouter à .gitignore
?
[{
"outputType": {
"type": "APK"
},
"apkInfo": {
"type": "MAIN",
"splits": [],
"versionCode": 32
},
"outputFile": {
"path": "/path/to/the/generated/release/filename.apk"
},
"properties": {
"packageId": "com.example.Android",
"split": ""
}
}]
Android studio 3.0 est responsable de ce fichier. Vous n'avez pas à vous soucier du fichier output.json.
Permettez-moi de vous expliquer ceci:
Pour les versions plus anciennes, ce que Android Studio a fait était de générer un APK signé et de le placer dans le dossier "sortie". Même si vous aviez plusieurs dimensions de saveur pour votre APK, elles pouvaient toutes être situées à le même répertoire, qui était le dossier de sortie. Depuis la dernière version de Android Studio 3.0 (canari et stable), ils ont organisé cette structure de fichiers. Pour chaque dimension de saveur, chaque fois que vous signez un APK , il contiendra un dossier séparé contenant un fichier output.json correspondant. Ce fichier n'est en fait qu'une description de l'APK source. Comme vous pouvez le voir, le fichier que vous avez partagé ici décrit l'APK publié.
Le fichier ouput.json
Est une sorte de fichier de métadonnées pour votre fichier APK généré. Ce fichier est généré pour diverses raisons. J'en ai trouvé certains, qui pourraient ne pas énumérer tous les cas d'utilisation, mais voici la liste:
Generate Signed APK
Est exécutéGénéré pour le fichier AndroidManifest.xml
Sous
{module}/build/intermediates/manifest/androidTest/debug/ouput.json
Il est pas généré pour les tests unitaires, mais uniquement généré pour AndroidTests (qui dépend de Android framework à exécuter)
output.json
Généré pour AndroidManifest.xml
À l'emplacement spécifié ci-dessus est légèrement différent de celui généré pour APK comme vous l'avez mentionné .output.json
Sont très similaires aux propriétés que nous spécifions habituellement dans notre fichier build.gradle
, Donc elles doivent être utilisées et requises pour que le processus de construction fonctionne correctement (ou il peut être généré à la suite d'une construction réussie et de l'extraction des propriétés requises de build.gradle
).Sur cela, nous pouvons conclure que cela dépend sûrement de Android framework à générer et il est lié à la description des détails/informations sur le APK ou Manifest fichier.
J'ai personnellement essayé de Google et de trouver une bonne réponse à cela même sur Android, mais il semble que rien ne soit documenté en détail sur ce fichier.
J'ai vérifié plusieurs projets sur GitHub et vérifié le fichier .gitignore
Pour le même, je n'ai trouvé aucun fichier output.json
Similaire dans aucun des projets hébergés sur GitHub. Il devrait donc être judicieux de les exclure de vos validations.
En bref, ce fichier est un fichier descriptif contenant des métadonnées importantes sur le projet. Il doit être là pour une raison. Je vous suggère de ne pas jouer avec, car nous ne savons pas ce que cela peut entraîner.
Pour tous ceux qui souhaitent désactiver cette fonctionnalité, voici mon astuce.
Il suffit de supprimer output.json
après génération.
applicationVariants.all { variant ->
variant.assemble.doLast {
def buildType = variant.buildType.name
def outputPath = ""
// If you use separated output path for both condition.
if (buildType == "debug") {
outputPath = "${buildDir}/outputs/apk"
}
if (buildType == "release") {
outputPath = "${rootDir}/apk"
}
println "outputPath:" + outputPath
delete "${outputPath}/yourFlavor1/${buildType}/output.json"
delete "${outputPath}/yourFlavor2/${buildType}/output.json"
delete "${outputPath}/yourFlavor.../${buildType}/output.json"
}
}
En réponse à la réponse élaborée de @wonsuc, vous pouvez demander à gradle de supprimer le fichier lors d'une génération réussie en ajoutant le code suivant à la section Android
:
Android {
...
applicationVariants.all { variant ->
variant.assemble.doLast {
variant.outputs.each { output ->
delete "${output.outputFile.parent}/output.json"
}
}
}
}