web-dev-qa-db-fra.com

Quel est le <module> /release/output.json généré par Android Studio

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": ""
  }
}]
43
Sah

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é.

19
Wubbalubbadubdub

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:

  1. Généré lorsque Generate Signed APK Est exécuté
  2. Généré pour le fichier AndroidManifest.xml Sous

    {module}/build/intermediates/manifest/androidTest/debug/ouput.json
    
  3. 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)

  4. Le fichier 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é .
  5. Comme vous pouvez le voir, les propriétés décrites par le fichier 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.

4
Sneh Pandya

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"
    }
}
3
wonsuc

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"
            }
        }
    }
}
2
Abandoned Cart