最近<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": ""
}
}]
Android Studio 3.0がこのファイルを担当します。 output.jsonファイルについて心配する必要はありません。
これについて説明します。
古いバージョンの場合、Android Studioは署名されたAPKを生成し、それを「出力」フォルダーに入れました。APKに複数のフレーバーディメンションがあったとしても、それらはすべて出力フォルダーであった同じディレクトリ。Android Studio 3.0(カナリアおよび安定版)の最新リリースから、彼らはこのファイル構造を整理しました。すべてのフレーバーディメンションに対して、APKに署名するたびにこのファイルは、実際にはソースAPKの説明に過ぎません。ご覧のとおり、ここで共有したファイルはリリースされたAPKを説明しています。
ouput.json
ファイルは、生成されたAPKのメタデータファイルの一種です。このファイルはさまざまな理由で生成されます。私はそれらのいくつかを見つけました、それはすべてのユースケースをリストしないかもしれませんが、ここにリストがあります:
Generate Signed APK
が実行されたときに生成されますAndroidManifest.xml
ファイル用に生成
{module}/build/intermediates/manifest/androidTest/debug/ouput.json
not単体テスト用に生成されますが、AndroidTests用にのみ生成されます(Android実行されるフレームワークに依存します)
output.json
に対して生成されたAndroidManifest.xml
ファイルは、前述の[〜#〜] apk [〜#〜]に対して生成されたファイルとはわずかに異なります。output.json
ファイルで説明されているプロパティは、build.gradle
ファイルで通常指定するプロパティと非常に似ているため、ビルドプロセスが正常に機能するために使用する必要があります(または、ビルドが成功し、build.gradle
から必要なプロパティが抽出された結果として生成されます。これにより、生成されるフレームワークAndroidフレームワークに確実に依存しており、[〜#〜] apk [〜 #〜]またはマニフェストファイル。
私は個人的にグーグルを試み、Android Developers websiteでもこれに対する適切な答えを見つけましたが、このファイルについて詳しくは何も文書化されていないようです。
GitHubでいくつかのプロジェクトをチェックし、同じものについて.gitignore
ファイルをチェックしましたが、GitHubでホストされているプロジェクトで同様のoutput.json
ファイルを見つけることができませんでした。したがって、コミットから除外することをお勧めします。
要するに、このファイルはプロジェクトに関する重要なメタデータを含む記述ファイルです。理由があるはずです。結果がどうなるかわからないので、混乱させないことをお勧めします。
この機能を無効にしたい人のために、ここに私のトリックがあります。
生成後に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"
}
}
@wonsucによる詳細な回答に応じて、次のコードをAndroid
セクションに追加することにより、ビルドの成功時にgradleにファイルを削除させることができます。
Android {
...
applicationVariants.all { variant ->
variant.assemble.doLast {
variant.outputs.each { output ->
delete "${output.outputFile.parent}/output.json"
}
}
}
}