Android studio:为啥在 AndroidManifest.xml 和 build.gradle 中都指定了 minSdkVersion 和 targetSdkVersion?
Posted
技术标签:
【中文标题】Android studio:为啥在 AndroidManifest.xml 和 build.gradle 中都指定了 minSdkVersion 和 targetSdkVersion?【英文标题】:Android studio: why are minSdkVersion and targetSdkVersion specified both in AndroidManifest.xml and build.gradle?Android studio:为什么在 AndroidManifest.xml 和 build.gradle 中都指定了 minSdkVersion 和 targetSdkVersion? 【发布时间】:2013-11-28 15:15:04 【问题描述】:我刚刚发现了一些关于 android Studio 的奇怪之处:它在 build.gradle
文件中有一些配置选项覆盖了 AndroidManifest.xml
文件中指定的内容。
例如,我在build.gradle
中有以下几行:
android
compileSdkVersion 18
buildToolsVersion "18.1.1"
defaultConfig
minSdkVersion 10
targetSdkVersion 10
...
它覆盖了AndroidManifest.xml
中的相应标签:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8"/>
我真的不喜欢将相同的设置分布在两个不同的文件中,所以我想知道是否可以安全地将其从 build.gradle
或 AndroidManifest.xml
中删除,以及保留它更有意义的位置。
【问题讨论】:
【参考方案1】:Gradle 会覆盖清单值,我更喜欢更新 build.gradle
文件而不是清单。可能这是使用 Gradle 的正确方法。 Gradle 支持可以通过 IDE 控制的产品风格,这些产品风格可以更改我们清单中的许多内容,例如包名称、版本代码、版本名称、目标 SDK 等。然后在 Android Studio 中一键更改许多属性并生成另一个 apk。
您可以保留清单原样并在build.gradle
中进行所有配置。您可以安全地删除
<uses-sdk></uses-sdk>
来自清单以及版本代码。
【讨论】:
对于任何想知道的人,如果您使用 apktool 解压缩这样构建的 APK,您实际上不会在 AndroidManifest 中看到 minSdkVersion。我不知道它去了哪里,但它确实做了正确的事情(我通过上传到 Google Play 确认)! 奇怪。谷歌似乎通过我们的应用调用的 API 来决定 minSDK。尽管我的 app/build.gradle 将 minSDK 指定为 Android 2.2,但在 Google Play 中它说 minSDK = Android 1.6。是的,反编译的 AndroidManifest.xml 不包含 minSDK 信息。我认为这是一个问题,因为它“迫使”我们也支持 Android 1.6 设备。 这里的侧边栏:developer.android.com/guide/topics/manifest/… 表明 Play 仍然以某种方式使用清单。也许它是在 APK 构建之前由 gradle 在幕后重新插入的? 这就是它的工作原理。 Gradle 将在编译期间将缺失的信息插入到清单中。 @sancho21 这是 Google Play 商店在 alpha 和 beta 测试期间的一个已知错误。当您推动产品时,它应该会解决。不是权威来源,但请参阅answers.unity3d.com/questions/683972/…【参考方案2】:来自 Android 文档:
注意:如果您的应用直接在元素中定义应用版本,则 Gradle 构建文件中的版本值将覆盖清单中的设置。此外,在 Gradle 构建文件中定义这些设置允许您为应用程序的不同版本指定不同的值。为了获得更大的灵活性并避免在合并清单时可能被覆盖,您应该从元素中删除这些属性,并改为在 Gradle 构建文件中定义您的版本设置。
https://developer.android.com/studio/publish/versioning.html#appversioning
【讨论】:
我认为那部分是在谈论versionCode
。你应该在Specify API level requirements
部分引用下一个以上是关于Android studio:为啥在 AndroidManifest.xml 和 build.gradle 中都指定了 minSdkVersion 和 targetSdkVersion?的主要内容,如果未能解决你的问题,请参考以下文章