web-dev-qa-db-ja.com

Android Studioによって生成される<module> /release/output.jsonとは

最近<module>/release/output.jsonでAndroid Studio 3 Canary 1によってBuild-> Generate Signed APK...を実行するたびに生成される新しいファイルに気付きました。次のようになります。

誰でもこの動作を確認できますか?それとも、ラップトップのローカル設定によるものですか?

そして、誰でもこのファイルの目的を説明できますか? .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がこのファイルを担当します。 output.jsonファイルについて心配する必要はありません。

これについて説明します。

古いバージョンの場合、Android Studioは署名されたAPKを生成し、それを「出力」フォルダーに入れました。APKに複数のフレーバーディメンションがあったとしても、それらはすべて出力フォルダーであった同じディレクトリ。Android Studio 3.0(カナリアおよび安定版)の最新リリースから、彼らはこのファイル構造を整理しました。すべてのフレーバーディメンションに対して、APKに署名するたびにこのファイルは、実際にはソースAPKの説明に過ぎません。ご覧のとおり、ここで共有したファイルはリリースされたAPKを説明しています。

19

ouput.jsonファイルは、生成されたAPKのメタデータファイルの一種です。このファイルはさまざまな理由で生成されます。私はそれらのいくつかを見つけました、それはすべてのユースケースをリストしないかもしれませんが、ここにリストがあります:

  1. Generate Signed APKが実行されたときに生成されます
  2. AndroidManifest.xmlファイル用に生成

    {module}/build/intermediates/manifest/androidTest/debug/ouput.json
    
  3. not単体テスト用に生成されますが、AndroidTests用にのみ生成されます(Android実行されるフレームワークに依存します)

  4. 上記の指定された場所でoutput.jsonに対して生成されたAndroidManifest.xmlファイルは、前述の[〜#〜] apk [〜#〜]に対して生成されたファイルとはわずかに異なります。
  5. output.jsonファイルで説明されているプロパティは、build.gradleファイルで通常指定するプロパティと非常に似ているため、ビルドプロセスが正常に機能するために使用する必要があります(または、ビルドが成功し、build.gradleから必要なプロパティが抽出された結果として生成されます。

これにより、生成されるフレームワークAndroidフレームワークに確実に依存しており、[〜#〜] apk [〜 #〜]またはマニフェストファイル。

  • 私は個人的にグーグルを試み、Android Developers websiteでもこれに対する適切な答えを見つけましたが、このファイルについて詳しくは何も文書化されていないようです。

  • GitHubでいくつかのプロジェクトをチェックし、同じものについて.gitignoreファイルをチェックしましたが、GitHubでホストされているプロジェクトで同様のoutput.jsonファイルを見つけることができませんでした。したがって、コミットから除外することをお勧めします。

  • 要するに、このファイルはプロジェクトに関する重要なメタデータを含む記述ファイルです。理由があるはずです。結果がどうなるかわからないので、混乱させないことをお勧めします。

4
Sneh Pandya

この機能を無効にしたい人のために、ここに私のトリックがあります。
生成後にoutput.jsonを削除するだけです。

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

@wonsucによる詳細な回答に応じて、次のコードをAndroidセクションに追加することにより、ビルドの成功時にgradleにファイルを削除させることができます。

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