53 votes

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 a l'aspect suivant.

Quelqu'un peut-il confirmer avoir vu ce comportement aussi? Ou est-ce dû à une configuration locale sur mon ordinateur portable?

Et quelqu'un peut-il expliquer le but de ce fichier? Est-il prudent 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": ""
  }
}]
 

26voto

Wubbalubbadubdub Points 1070

Android studio 3.0 est responsable de ce dossier. Vous n'avez pas besoin de s'inquiéter à propos de la sortie.fichier json.

Permettez-moi d'expliquer cela:

Pour les anciennes versions, ce qui Android Studio n'a été générer un signé APK et les mettre dans la "sortie" du dossier. Même Si vous aviez plusieurs saveur dimensions pour votre APK, tous d'entre eux peut être situé dans le même répertoire, ce qui était le dossier de sortie. À partir de la dernière version d'Android Studio 3.0 (canaries et stable), ils ont organisé cette structure de fichier. Pour chaque saveur dimension, chaque fois que vous vous connectez un APK, il aura un dossier séparé avec une sortie correspondante.fichier json en elle. Ce fichier est en réalité rien d'autre qu'une description de la source APK. Comme vous pouvez le voir, le fichier que vous avez partagé ici est de décrire la sorti APK.

7voto

Sneh Pandya Points 4033

ouput.json le fichier est un fichier de métadonnées pour votre générés APK. Ce fichier est généré en raison de diverses raisons. J'ai trouvé certains d'entre eux, ce qui pourrait ne pas la liste de tous les cas d'utilisation, mais en voici la liste:

  1. Généré lors de l' Generate Signed APK est exécutée
  2. Généré pour AndroidManifest.xml le fichier sous

    {module}/build/intermediates/manifest/androidTest/debug/ouput.json
    
  3. C'est pas généré pour les tests Unitaires, mais seulement généré pour AndroidTests (qui dépend de l'Androïde cadre de l'exécution d'

  4. Le fichier output.json générée pour AndroidManifest.xml au-dessus de l'emplacement spécifié 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 output.json le fichier est très similaire pour les propriétés que nous avons l'habitude de le spécifier dans notre build.gradle le fichier, donc il doit être utilisé & nécessaire pour construire des processus de travail avec succès (ou peut-être produits à la suite de la réussite de construire et d'extraction de propriétés requises d' build.gradle).

Sur ce, nous pouvons conclure que ce n'est sûrement dépend Android-cadre doit être généré et il est lié à décrire les détails/info sur la APK ou Manifeste de fichier.

  • J'ai personnellement essayé de Google et de trouver une réponse adéquate à ce même sur Android, les Développeurs de site web, mais il semble que rien n'est documenté à propos de ce fichier dans le détail.

  • J'ai vérifié à plusieurs projets sur GitHub & vérifié .gitignore pour le même, je ne pouvais pas trouver tout de l'similaires output.json le fichier dans l'un des projets hébergés sur GitHub. Il devrait donc être une bonne pratique pour les exclure dans vos commits.

  • En bref, ce fichier est un fichier descriptif contenant des métadonnées importantes à propos du projet. Il doit être là pour une raison. Je vous suggère de ne pas jouer avec ce que nous ne savons pas ce que cela peut entraîner.

3voto

wonsuc Points 682

Pour ceux qui veulent désactiver cette fonctionnalité, voici mon astuce.
Il suffit de supprimer output.json après la 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"
    }
}
 

2voto

LoungeKatt Points 692

En réponse à la réponse élaborée de @wonsuc, vous pouvez faire en sorte que le fichier soit supprimé en cas de construction 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"
            }
        }
    }
}
 

-1voto

Jeremy Lakeman Points 391

Avec les versions précédentes d'Android Studio, j'avais tenté de nommer automatiquement la sortie apk basé sur la sortie d' git describe. Cependant, alors que la "Synchronisation du Projet avec Gradle Fichiers" Android Studio irait à l'gradle script une fois de capture et de l'accumulation de config, y compris le nom de fichier de sortie, et puis supposer que chaque génération permettrait de continuer à utiliser le même nom.

Donc à chaque fois que je créé un nouveau commit, le nom de fichier de sortie serait de changer. Mais Android Studio soit installer l'ancienne version ou l'échec si elle avait été nettoyé.

Je crois que la sortie.json a été ajoutée pour permettre à Android Studio pour charger tout ce qu'il faut savoir sur la dernière build, même si vous avez personnalisé votre gradle script pour changer quelque chose dans une manière inattendue.

Ce changement n'est pas spécifiquement mentionné dans le plugin gradle notes de publication (https://developer.android.com/studio/releases/gradle-plugin.html#3-0-0). Si ils l'ont fait faire un tas de changements drastiques pour des raisons de performances. Il me semble logique qu'ils préfèrent utiliser moins de votre gradle script lors de la synchronisation. Au lieu de saisir l'information à propos de la construire directement des résultats du processus de compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X