Что такое /release / output.JSON, созданный Android Studio
недавно я заметил новый файл, сгенерированный в <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": ""
}
}]
6 ответов
за этот файл отвечает Android studio 3.0. Вам не нужно беспокоиться о выходе.файл json.
позвольте мне объяснить вам это:
для более старых версий, что сделала Android Studio, это создать подписанный APK и поместить его в папку "выход". Даже если у вас было несколько размеров вкуса для вашего APK, все они могли быть расположены в одном каталоге, который был выходной папкой. Из последней версии Android Studio 3.0 (canary и stable) у них есть организовал эту файловую структуру. Для каждого измерения вкуса, когда вы подписываете APK, у него будет отдельная папка с соответствующим выходом.файл json в нем. Этот файл на самом деле ничего, кроме описания source APK. Как вы можете видеть, файл, который вы поделились здесь, описывает выпущенный APK.
ouput.json
файл-это своего рода файл метаданных для сгенерированного APK. Этот файл генерируется по разным причинам. Я нашел некоторые из них, которые могут не перечислять все варианты использования, но вот список:
- создается, когда
Generate Signed APK
выполнена -
создается для .
Я лично пытался Google и найти правильный ответ на это даже на веб-сайте разработчиков Android, но, похоже, ничего не документировано об этом файле в деталь.
Я проверил несколько проектов на GitHub & checked
.gitignore
файл для того же самого, я не мог найти ничего подобногоoutput.json
файл в любом из проектов, размещенных на GitHub. Поэтому рекомендуется исключить их в ваших коммитах.короче говоря, этот файл является описательным файлом, содержащим важные метаданные о проекте. Это должно быть причина. Я бы посоветовал вам не связываться с ним, поскольку мы не знаем, что это может привести.
для тех, кто хочет отключить эту функцию, вот мой трюк.
Это просто удалить 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 вы можете удалить файл gradle после успешной сборки, добавив следующий код в :
android {
...
applicationVariants.all { variant ->
variant.assemble.doLast {
variant.outputs.each { output ->
delete "${output.outputFile.parent}/output.json"
}
}
}
}
добавить ../../
в начало outputFileName
, и файл APK помещается в output
папку
android{
applicationVariants.all { variant ->
variant.outputs.all { output ->
output.outputFileName = "../../output_name.apk"
}
}
}
с предыдущими версиями Android Studio я попытался автоматически назвать выходной apk на основе вывода git describe
. Однако, в то время как" синхронизация проекта с файлами Gradle " Android Studio будет запускать скрипт gradle один раз и захватывать конфигурацию сборки, включая выходное имя файла, а затем предположить, что каждая сборка будет продолжать использовать то же имя.
поэтому всякий раз, когда я создавал новую фиксацию, фактическое имя файла вывода менялось. Но Android Studio либо установите старую версию или сбой, если она была очищена.
Я считаю, что выход.json был добавлен, чтобы позволить Android Studio загружать все, что ему нужно знать о последней сборке, даже если вы настроили свой скрипт gradle, чтобы изменить что-то неожиданным образом.
Это изменение не в Gradle в плагин выпуске (https://developer.android.com/studio/releases/gradle-plugin.html#3-0-0). Хотя они куча радикальных изменений по причинам производительности. Для меня имеет смысл, что они предпочли бы запускать меньше вашего скрипта gradle при синхронизации. Вместо этого захват информации о выходных данных сборки непосредственно из процесса сборки.