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.gradleAndroidManifest.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?的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio中的混淆

Android Studio 看不到 Android 进程

Android Studio 发展史

Logcat在Android Studio中查看android APP 日志

Android Studio导入系统源码及配置

为啥我的Android studio里面没有Preview。在View-Tool Windows