/release/output.json généré par Android Studio?'/> /release/output.json généré par Android Studio?'/> /release/output.json généré par Android Studio?'/> Qu'est-ce que le <module> /release/output.json généré par Android Studio? | abulletproofidea.com

Question Qu'est-ce que le /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 je cours Build -> Generate Signed APK..., qui a le contenu qui ressemble à suivre.

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 sécuritaire 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": ""
  }
}]

35
2018-05-26 12:54


origine


Réponses:


Le studio Android 3.0 est responsable de ce fichier. Vous n'avez pas besoin de vous soucier du fichier output.json.

Laissez-moi vous expliquer ceci:

Pour les anciennes versions, Android Studio a généré un APK signé et l'a mis dans le dossier "output". Même si vous aviez plusieurs dimensions de saveur pour votre APK, elles pouvaient toutes se trouver dans le même répertoire, qui était le dossier de sortie. Depuis la dernière version d'Android Studio 3.0 (canary et stable), ils ont organisé cette structure de fichiers. Pour chaque dimension de saveur, chaque fois que vous signez un fichier APK, celui-ci contient un dossier distinct contenant un fichier output.json correspondant. Ce fichier n'est en réalité rien d'autre qu'une description de l'APK source. Comme vous pouvez le voir, le fichier que vous avez partagé ici décrit l'APK publié.


11
2017-11-07 06:13



ouput.json fichier 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'ai trouvé certains d'entre eux, qui pourraient ne pas lister tous les cas d'utilisation, mais voici la liste:

  1. Généré quand Generate Signed APK est exécuté
  2. Généré pour AndroidManifest.xml déposer sous

    {module}/build/intermediates/manifest/androidTest/debug/ouput.json
    
  3. C'est ne pas généré pour les tests unitaires, mais généré uniquement pour AndroidTests (qui dépend du framework Android à exécuter)

  4. Le fichier output.json généré 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 voir les propriétés décrites par output.json fichier est très similaire aux propriétés que nous spécifions habituellement dans notre build.gradle fichier, il doit donc être utilisé et requis pour que le processus de génération fonctionne correctement (ou il peut être généré à la suite d'une génération réussie et de l'extraction des propriétés requises à partir de build.gradle).

À ce sujet, nous pouvons conclure que cela dépend sûrement de la structure Android à générer et il est lié à décrire les détails / informations sur le APK ou Manifeste fichier.

  • J'ai personnellement essayé de trouver Google et de trouver une réponse appropriée à ce problème, même sur le site Web des développeurs Android, mais il semble que rien ne soit documenté en détail à propos de ce fichier.

  • J'ai vérifié plusieurs projets sur GitHub et vérifié .gitignore déposer pour le même, je ne pouvais pas trouver de semblable output.json fichier dans l'un des projets hébergés sur GitHub. Donc, il devrait être une bonne pratique de les exclure dans vos commits.

  • 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 vous en mêler car nous ne savons pas ce que cela peut donner.


3
2017-11-07 09:54



Pour ceux qui veulent désactiver cette fonctionnalité, voici mon truc.
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"
    }
}

1
2018-04-08 02:03



En réponse à la réponse élaborée de @wonsuc, vous pouvez supprimer progressivement le fichier en cas de réussite en ajoutant le code suivant au fichier. android section:

android {
    ...
    applicationVariants.all { variant ->
        variant.assemble.doLast {
            variant.outputs.each { output ->
                delete "${output.outputFile.parent}/output.json"
            }
        }
    }
}

1
2018-04-12 06:26



J'ajoute ../../ au début du outputFileName, et le fichier APK est mis dans le output dossier

android{
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            output.outputFileName =   "../../output_name.apk"
        }
    }
}

-1
2017-11-29 05:43



Avec les versions précédentes d’Android Studio, j’avais tenté de nommer automatiquement l’apk de sortie en fonction de la sortie de git describe. Cependant, alors que "Synchroniser un projet avec des fichiers Gradle", Android Studio exécutait une fois le script de gradation et capturait la configuration de construction, y compris le nom de fichier de sortie, puis supposait que chaque génération continuerait à utiliser le même nom.

Donc, chaque fois que j'ai créé un nouveau commit, le nom du fichier de sortie réel changerait. Mais Android Studio installait l'ancienne version ou échouait si elle avait été nettoyée.

Je crois que output.json a été ajouté pour permettre à Android Studio de charger tout ce qu'il doit savoir sur la dernière version, même si vous avez personnalisé votre script de gradation pour modifier quelque chose de manière inattendue.

Ce changement n’est pas spécifiquement mentionné dans les notes de version du plugin gradle (https://developer.android.com/studio/releases/gradle-plugin.html#3-0-0). Bien qu'ils aient apporté des changements radicaux pour des raisons de performance. Il est logique pour moi qu'ils préfèrent exécuter moins de votre script de gradation lors de la synchronisation. Au lieu de cela, capturez les informations sur la sortie directement depuis le processus de génération.


-1
2018-03-20 02:38