Что такое /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. Этот файл генерируется по разным причинам. Я нашел некоторые из них, которые могут не перечислять все варианты использования, но вот список:

  1. создается, когда Generate Signed APK выполнена
  2. создается для .

    • Я лично пытался 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 при синхронизации. Вместо этого захват информации о выходных данных сборки непосредственно из процесса сборки.