在为Android开发应用程序时,Min和Target SDK版本有什么不同?Eclipse不允许我创建新项目,除非最小版本和目标版本相同!


当前回答

android:minSdkVersion和android:targetSdkVersion都是Integer值,我们需要在android manifest文件中声明,但两者都有不同的属性。

android:minSdkVersion:这是运行android应用程序所需的最低API级别。如果我们将在较低的API版本上安装相同的应用程序,解析器将出现错误,应用程序不支持的问题将出现。

android:targetSdkVersion: Target sdk version用于设置应用程序的Target API级别。如果manifest中没有声明这个属性,minSdk version将是你的TargetSdk version。这总是正确的,“应用程序支持安装在所有更高版本的API,我们声明为TargetSdk版本”。要使应用程序有限的目标,我们需要声明maxSdkVersion在我们的manifest文件…

其他回答

如果你得到一些编译错误,例如:

<uses-sdk
            android:minSdkVersion="10"
            android:targetSdkVersion="15" />

.

private void methodThatRequiresAPI11() {
        BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Config.ARGB_8888;  // API Level 1          
                options.inSampleSize = 8;    // API Level 1
                options.inBitmap = bitmap;   // **API Level 11**
        //...
    }

你会得到编译错误:

字段要求API级别11(当前最小值为10): # inBitmap android.graphics.BitmapFactory美元选项

自从第17版的Android开发工具(ADT),有一个新的和非常有用的注释@TargetApi,可以很容易地修复这个问题。将它添加到包含有问题声明的方法之前:

@TargetApi
private void methodThatRequiresAPI11() {            
  BitmapFactory.Options options = new BitmapFactory.Options();
      options.inPreferredConfig = Config.ARGB_8888;  // API Level 1          
      options.inSampleSize = 8;    // API Level 1

      // This will avoid exception NoSuchFieldError (or NoSuchMethodError) at runtime. 
      if (Integer.valueOf(android.os.Build.VERSION.SDK) >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        options.inBitmap = bitmap;   // **API Level 11**
            //...
      }
    }

现在没有编译错误,它将运行!

EDIT:这将导致API级别低于11的运行时错误。在11或更高版本上,它运行起来没有问题。因此,必须确保在版本检查保护的执行路径上调用此方法。TargetApi只允许你编译它,但是你要自担风险。

对于那些想要总结的人,

android:minSdkVersion

是应用程序支持的最低版本。如果您的设备是低版本的android,应用程序将无法安装。

同时,

android:targetSdkVersion

是API级别,直到你的应用程序被设计运行。这意味着,你的手机系统不需要使用任何兼容性行为来保持向前兼容性,因为你已经测试了这个API。

你的应用仍然会运行在高于给定targetSdkVersion的Android版本上,但Android兼容性行为将开始。

免费的东西- - - - - -

android: maxSdkVersion

如果你的设备的API版本更高,应用程序将无法安装。Ie。这是你允许你的应用程序安装的最大API。

ie。对于MinSDK -4, maxSDK - 8, targetSDK - 8我的应用程序至少在1.6上工作,但我也使用了仅在2.2中支持的功能,如果安装在2.2设备上,这些功能将可见。此外,对于maxSDK - 8,这个应用程序将不会安装在使用API > 8的手机上。

在我写这个答案的时候,Android文档并没有很好地解释这个问题。现在已经解释得很清楚了。点击这里查看

Target sdk是你想要的目标版本,而min sdk是最小的一个。

android:minSdkVersion和android:targetSdkVersion都是Integer值,我们需要在android manifest文件中声明,但两者都有不同的属性。

android:minSdkVersion:这是运行android应用程序所需的最低API级别。如果我们将在较低的API版本上安装相同的应用程序,解析器将出现错误,应用程序不支持的问题将出现。

android:targetSdkVersion: Target sdk version用于设置应用程序的Target API级别。如果manifest中没有声明这个属性,minSdk version将是你的TargetSdk version。这总是正确的,“应用程序支持安装在所有更高版本的API,我们声明为TargetSdk版本”。要使应用程序有限的目标,我们需要声明maxSdkVersion在我们的manifest文件…

如果你正在制作需要危险权限的应用程序,并将targetSDK设置为23或更高,你应该小心。如果你在运行时不检查权限,你会得到一个SecurityException,如果你在一个try块中使用代码,例如open camera,如果你不检查logcat,就很难发现错误。