Android studio:为什么minSdkVersion和targetSdkVersion都在AndroidManifest.xml和build.gradle中指定?

mar*_*gio 99 android android-studio

我刚刚发现了一些关于Android studio的奇怪之处:它在build.gradle文件中有一些配置选项可以覆盖文件中指定的AndroidManifest.xml内容.

例如,我有以下几行build.gradle:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 10
    }
...
}
Run Code Online (Sandbox Code Playgroud)

它覆盖了相应的标签AndroidManifest.xml:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="8"/>
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢有两个不同的文件传播相同的设置,所以我想知道如果我可以放心地无论是从删除它build.gradleAndroidManifest.xml与它更有意义,保持它.

mar*_*3kk 107

Gradle会覆盖清单值,我更喜欢更新build.gradle文件而不是清单.可能这是使用Gradle的正确方法.Gradle支持可以通过IDE控制的产品风格,这些产品风格可以改变我们的Manifest中的许多东西,如包名称,版本代码,版本名称,目标SDK和许多其他东西.然后在Android Studio中单击一下即可更改许多属性并生成另一个apk.

您可以按原样保留清单并执行所有配置build.gradle.你可以安全地删除

<uses-sdk></uses-sdk>
Run Code Online (Sandbox Code Playgroud)

从清单和版本代码.

  • 奇怪.似乎Google通过我们的应用程序调用的API来决定minSDK.虽然我的app/build.gradle指定minSDK为Android 2.2,但在Google Play中它表示minSDK = Android 1.6.是的,反编译的AndroidManifest.xml不包含minSDK信息.我认为这是一个问题,因为它"迫使"我们也支持Android 1.6设备. (6认同)
  • @ sancho21这是在alpha和beta测试期间Google Play商店的一个已知错误.当你推动产品时,它应该解决.不是权威来源,但请参阅http://answers.unity3d.com/questions/683972/published-unity-android-app-has-lower-android-vers.html (5认同)
  • 多数民众赞成如何运作.Gradle将在编译期间向清单中插入缺少的信息. (4认同)
  • 对于任何想知道的人,如果你使用apktool解压缩这样构建的APK,你实际上不会在AndroidManifest中看到minSdkVersion.我不知道它在哪里,但它确实做了正确的事情(我通过上传到Google Play确认)! (3认同)