Android Studio 生成的 <module>/release/output.json 是什么
What is the <module>/release/output.json generated by Android Studio
我最近注意到每次 运行 Build
-> Generate Signed APK...
时 Android Studio 3 Canary 1 在 <module>/release/output.json
生成了一个新文件内容如下所示。
任何人都可以确认看到这种行为吗?还是由于我的笔记本电脑上的一些本地配置?
谁能解释一下这个文件的用途?添加到 .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 并将其放在 "output" 文件夹中。即使您的 APK 有多个风格维度,它们也可能位于同一目录中,即输出文件夹。从最新发布的 Android Studio 3.0(金丝雀版和稳定版)开始,他们组织了这个文件结构。对于每个风格维度,无论何时签署 APK,它都会有一个单独的文件夹,其中包含相应的 output.json 文件。该文件实际上只是对源 APK 的描述。如您所见,您在此处共享的文件描述了已发布的 APK。
ouput.json
文件是您生成的 APK 的一种元数据文件。由于各种原因生成此文件。我找到了其中一些,可能没有列出所有用例,但这是列表:
- 执行
Generate Signed APK
时生成
为
下的 AndroidManifest.xml
文件生成
{module}/build/intermediates/manifest/androidTest/debug/ouput.json
它不是为单元测试生成的,而是只为Android测试生成的(这取决于Android框架执行)
- 在上述指定位置为
AndroidManifest.xml
生成的文件 output.json
与您提到的为 APK 生成的文件略有不同。
- 如您所见,
output.json
文件描述的属性与我们通常在 build.gradle
文件中指定的属性非常相似,因此构建过程必须使用并且需要它才能工作成功(或者它可能是由于从 build.gradle
中成功构建和提取所需属性而生成的)。
据此,我们可以得出结论,它肯定依赖于 Android 框架生成并且它与描述 details/info 关于 APK 或 清单 文件。
我个人曾尝试 Google 甚至在 Android 开发者网站上也找到了正确的答案,但似乎没有关于此文件的详细记录。
我检查了 GitHub 上的几个项目并检查了 .gitignore
文件是否相同,我在任何文件中都找不到任何类似的 output.json
文件在 GitHub 上托管的项目数。因此,在您的提交中排除它们应该是一个好习惯。
简而言之,这个文件是一个包含项目重要元数据的描述性文件。它一定是有原因的。我建议你不要搞砸它,因为我们不知道它会导致什么。
我在outputFileName
开头添加../../
,APK文件放入output
文件夹
android{
applicationVariants.all { variant ->
variant.outputs.all { output ->
output.outputFileName = "../../output_name.apk"
}
}
}
使用以前版本的 Android Studio,我曾尝试根据 git describe
的输出自动命名输出 apk。然而,虽然 "Syncing Project with Gradle Files" Android Studio 会 运行 gradle 脚本一次并捕获构建配置,包括输出文件名,然后假设每个构建都将继续使用一样的名字。
所以每当我创建一个新的提交时,实际的输出文件名都会改变。但是 Android Studio 要么会安装旧版本,要么会在清理后失败。
我相信已添加 output.json 以允许 Android Studio 加载它需要了解的有关上次构建的所有信息,即使您自定义了要更改的 gradle 脚本意想不到的方式。
此更改未在 gradle 插件发行说明 (https://developer.android.com/studio/releases/gradle-plugin.html#3-0-0) 中具体提及。尽管出于性能原因,他们确实进行了一系列重大更改。对我来说,他们更愿意在同步时 运行 少你的 gradle 脚本是有道理的。而是直接从构建过程中捕获有关构建输出的信息。
对于想要禁用此功能的任何人,这是我的技巧。
它只是在生成后删除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
部分来在成功构建后删除文件:
android {
...
applicationVariants.all { variant ->
variant.assemble.doLast {
variant.outputs.each { output ->
delete "${output.outputFile.parent}/output*.json"
}
}
}
}
在 Android Studio 4.0 中,成功构建(apk 或 aab)后会出现一个新文件:app/release/output-metadata.json
。为了不在 Git
中惹恼它,只需添加到 <project>/.gitignore
:
# Metadata created after successful build.
/app/release/output-metadata.json
我最近注意到每次 运行 Build
-> Generate Signed APK...
时 Android Studio 3 Canary 1 在 <module>/release/output.json
生成了一个新文件内容如下所示。
任何人都可以确认看到这种行为吗?还是由于我的笔记本电脑上的一些本地配置?
谁能解释一下这个文件的用途?添加到 .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 并将其放在 "output" 文件夹中。即使您的 APK 有多个风格维度,它们也可能位于同一目录中,即输出文件夹。从最新发布的 Android Studio 3.0(金丝雀版和稳定版)开始,他们组织了这个文件结构。对于每个风格维度,无论何时签署 APK,它都会有一个单独的文件夹,其中包含相应的 output.json 文件。该文件实际上只是对源 APK 的描述。如您所见,您在此处共享的文件描述了已发布的 APK。
ouput.json
文件是您生成的 APK 的一种元数据文件。由于各种原因生成此文件。我找到了其中一些,可能没有列出所有用例,但这是列表:
- 执行
Generate Signed APK
时生成 为
下的AndroidManifest.xml
文件生成{module}/build/intermediates/manifest/androidTest/debug/ouput.json
它不是为单元测试生成的,而是只为Android测试生成的(这取决于Android框架执行)
- 在上述指定位置为
AndroidManifest.xml
生成的文件output.json
与您提到的为 APK 生成的文件略有不同。 - 如您所见,
output.json
文件描述的属性与我们通常在build.gradle
文件中指定的属性非常相似,因此构建过程必须使用并且需要它才能工作成功(或者它可能是由于从build.gradle
中成功构建和提取所需属性而生成的)。
据此,我们可以得出结论,它肯定依赖于 Android 框架生成并且它与描述 details/info 关于 APK 或 清单 文件。
我个人曾尝试 Google 甚至在 Android 开发者网站上也找到了正确的答案,但似乎没有关于此文件的详细记录。
我检查了 GitHub 上的几个项目并检查了
.gitignore
文件是否相同,我在任何文件中都找不到任何类似的output.json
文件在 GitHub 上托管的项目数。因此,在您的提交中排除它们应该是一个好习惯。简而言之,这个文件是一个包含项目重要元数据的描述性文件。它一定是有原因的。我建议你不要搞砸它,因为我们不知道它会导致什么。
我在outputFileName
开头添加../../
,APK文件放入output
文件夹
android{
applicationVariants.all { variant ->
variant.outputs.all { output ->
output.outputFileName = "../../output_name.apk"
}
}
}
使用以前版本的 Android Studio,我曾尝试根据 git describe
的输出自动命名输出 apk。然而,虽然 "Syncing Project with Gradle Files" Android Studio 会 运行 gradle 脚本一次并捕获构建配置,包括输出文件名,然后假设每个构建都将继续使用一样的名字。
所以每当我创建一个新的提交时,实际的输出文件名都会改变。但是 Android Studio 要么会安装旧版本,要么会在清理后失败。
我相信已添加 output.json 以允许 Android Studio 加载它需要了解的有关上次构建的所有信息,即使您自定义了要更改的 gradle 脚本意想不到的方式。
此更改未在 gradle 插件发行说明 (https://developer.android.com/studio/releases/gradle-plugin.html#3-0-0) 中具体提及。尽管出于性能原因,他们确实进行了一系列重大更改。对我来说,他们更愿意在同步时 运行 少你的 gradle 脚本是有道理的。而是直接从构建过程中捕获有关构建输出的信息。
对于想要禁用此功能的任何人,这是我的技巧。
它只是在生成后删除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
部分来在成功构建后删除文件:
android {
...
applicationVariants.all { variant ->
variant.assemble.doLast {
variant.outputs.each { output ->
delete "${output.outputFile.parent}/output*.json"
}
}
}
}
在 Android Studio 4.0 中,成功构建(apk 或 aab)后会出现一个新文件:app/release/output-metadata.json
。为了不在 Git
中惹恼它,只需添加到 <project>/.gitignore
:
# Metadata created after successful build.
/app/release/output-metadata.json