如何确定为我的Android应用设置哪个minSDKVersion

17

我该如何确定我的项目使用的最低 API 级别或最高 API 级别?有没有办法确定我的项目中哪部分代码使用了哪个 API 级别?

在 Android Studio 中有没有一种方法可以确定项目中使用的最低 API 级别和最高 API 级别?例如,是否有像“TODO”跟踪所有任务等功能,来确定 Android Studio 中使用的最低 API 级别和最高 API 级别?

我是新手,请多包涵。


欢迎来到Stack Overflow :) 我已经更新了您的问题,删除了您询问工具实现此操作的部分,因为询问工具或离线资源可能会导致您的问题被关闭,因为我们不允许在这里提出有关离线资源的问题,但是您问题的其余部分是可以的。 - a_local_nobody
非常抱歉,我之前不知道这个问题,但我认为我应该问一下,在Android Studio中是否有任何方法可以确定我的项目所使用的最低API级别。例如,“待办事项”跟踪所有任务等,我们在Android Studio中是否有任何功能来确定最低API级别。非常感谢您更新我的问题。 - Gemma
如果你想将问题具体化为与Android Studio相关的内容,请随意编辑你的问题。 - a_local_nobody
谢谢。我已经更新了问题 :) - Gemma
6个回答

4

对于当前应用程序状态/版本实际可设置的绝对minSdkVersion(如您在评论中所说),您可以使用暴力方法来确定:

  1. 将minSdkVersion设置为1
  2. 构建项目。
  3. 如果它能够构建,则当前的minSdkVersion是绝对minSdkVersion,否则它将给出一个错误,告诉一些依赖项到另一个SdkVersion,现在将minSdkVersion设置为anotherSdkVersion - 转到步骤2。

3

要确定最小SDK和最大SDK,请查看Gradle脚本中的build.gradle(Module: app)。请参考项目结构:

  • compileSdkVersion是最大SDK。
  • minSdkVersion是最小SDK。
  • targetSdkVersion是最大SDK测试版本。
android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "app.id"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
}

1
我不确定你是否在询问这个,但这是我的做法。我也经常忘记在哪里找到这些信息。
步骤如下:文件 > 项目结构,然后在模块下选择你的模块(可能是app),然后在flavors选项卡下,你可以看到最小sdk和目标sdk。没有最大值,因为很多事情随着时间而改变。
或者你可以去gradle文件,在app范围下找到相关信息。
来源:

https://abhiandroid.com/androidstudio/change-api-sdk-level-android-studio.html


这会自动评估我的项目中使用的最低 API 级别并显示结果吗? - Gemma
你是在说Gradle文件吗?无论是文件还是项目结构的任何更改都会触发对整个代码的评估,就像Android Studio已经在当前级别中所做的那样。 - J.J.Enrik
3
我不是在询问如何更改最低SDK或目标SDK的“方式”,而是在问,如果我继续开发并完成项目后,如何知道我的项目的最低SDK要求?我该如何跟踪哪些代码使用了什么API级别,并且在我的项目中任何代码使用的最小API级别是什么? - Gemma

1
这个问题在一定程度上给了min SDK版本错误的思维定势。这个参数的真正用途是指定应用程序编码运行的最低Android平台版本。版本越低,应用程序可以运行的平台范围就越广。这意味着应用程序适用于更大的设备市场份额。如果您需要将minSDK设置为较低的API级别,以满足市场份额覆盖计划,那么请将其设置为该级别。编译器会告诉您是否有任何明显的编码错误,并且您需要进行更正。话虽如此,有时您可能愿意接受应用程序在较小的设备集上部署,因为较新版本的SDK提供了您不想为其提供自己的替代编码的功能。
Muhammed的解决方案在某种程度上回答了Gemma的问题,但是如果你仔细观察那个算法,它只能回答这个问题:我如何确定可以将minSDK设置为最低级别,以便应用程序能够编译而不出错?这可能是Gemma的问题所关注的,但我的观点是这种方法是不正确的。请注意,仅仅因为你可以编译你的代码而没有错误,并不意味着你的应用程序能够在你指定的SDK范围内运行。记住,还有targetSDK。targetSDK是你已经测试并验证你的应用程序在其上正常工作的最新API版本。targetSDK可以大于compileSDK。如果是这种情况,如果你尝试使用任何大于你的compileSDK的新功能,编译器将会报错,因为编译器会将该新功能视为未定义。问题在于,如果你使用了自从compileSDK引入以来被弃用或删除的功能,你将不会收到任何错误提示。构建过程不知道SDK在你编译的SDK之外的情况。这就是为什么targetSdk被定义为你已经测试过的最新版本。如果你在targetSdk平台上彻底测试了你的应用程序,那么你也已经验证了你没有使用在大于你编译的SDK版本中引入的被弃用或删除的功能。
如果你有兴趣的话,你可以查看你编译的SDK位置,并找到你正在编译的平台目录,你会找到一个名为"api-versions.xml"的文件。每个SDK版本都有这个文件。如果你仔细查看它,你会看到自版本1以来所有SDK功能的添加、弃用和删除的完整历史记录。显然,这就是构建工具用来向你报告潜在的SDK错误和警告的依据。
最后,还有一个质量保证的问题。假设您将minSDK指定为14,compileSdk指定为33,targetSDK指定为34,那么您应该在哪些平台下测试您的代码呢?显然,我们知道您必须在34 api平台下测试它,因为这就是targetSdk的含义。不在targetSdk下进行测试将是一个无效的产品声明。那么,对于API 14、15、16、...、33的平台呢?您应该在所有平台上进行测试还是只在其中一些平台上进行测试?最高水平的质量保证是您在每个平台上测试了应用程序,否则您如何声称它在所有这些平台上都按设计工作呢?也许这有些过于热衷,但这仍然是一个合理的质量保证问题或关注点。这个问题回到了我关于min SDK版本的陈述上。当您开发一个应用程序时,您应该仔细决定您希望应用程序在哪些平台上运行。如果您指定的范围大于您的目标市场,那么您肯定会增加QA测试的时间。

0
我也在想是否有一种不那么繁琐的方法来做这件事。 显然,在build.gradle中将minSdkVersion设置为“1”,并在应用程序上运行gradle lint任务,可以通过在第一个不兼容的库上停止并指示所需版本来实现半自动化。 此外,在这里也有描述: Easy way to detect android:minSdkVersion automatically?

0
我经常使用14或16,但如果你的应用程序有库不支持最低SDK版本,那就将其设置得更高一些,或者在Google文档或其他地方找到解决方法,比如Flutter等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接