我在我的应用程序中有一个关于框,它显示关于应用程序、电话和它使用的数据的信息。当用户遇到问题时,它非常有用。我可以通过"android.os.Build.VERSION.SDK_INT“获取手机的SDK版本。然而,我还没有找到一种方法来获取"CompileSdkversion“的值,该值表示应用程序编译时使用的SDK版本。这是在build.gradle文件中设置的值。
发布于 2021-11-11 21:43:21
虽然安卓操作系统的版本因用户而异,但compileSdkVersion
并非如此。对于应用程序的X.Y.Z
版本,compileSdkVersion
是您在编译该应用程序版本时所说的任何内容。只要你的about框包含应用程序版本,你就知道你使用了什么compileSdkVersion
,如果你跟踪它的话(例如,检查它在你的版本控制系统中是什么)。
但是,如果您真的想让它在运行时可用,您有两个选择。
如果您的minSdkVersion
是31
或更高版本,您可以使用use compileSdkVersion
on ApplicationInfo
。然而,最有可能的是,如果你在2026年之前阅读这篇文章,你的minSdkVersion
会低于那个数字。
对于比Android12更老的设备,你可以为它添加一个BuildConfig
字段,至少在新版本的Android Gradle插件中是这样的:
android {
compileSdk 31
defaultConfig {
applicationId "com.commonsware.android.myapplication"
minSdk 23
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField "int", "COMPILE_SDK_VERSION", "$compileSdk"
}
// other stuff goes here
}
这将获取您为compileSdk
定义的值,并将其提升到BuildConfig.COMPILE_SDK_VERSION
中,以便您可以在运行时引用它。这是使用一个废弃的北极福克斯项目,使用Android Gradle插件的Gradle 7.0.2和7.0.3进行测试的。
发布于 2021-11-12 01:32:34
下面是这三个值之间的关系:
minSdkVersion (尽可能低) <= targetSdkVersion == compileSdkVersion (最新的SDK)
CompileSdkVersion与设备可以和不能运行你的应用程序无关。通常,您将其设置为Android SDK的最新版本。
targetSdkVersion应该经过全面测试,小于或等于compileSdkVersion。(这取决于你的应用程序)
如果您使用的是API级别26的功能,那么您需要使用compileSdkVersion 26,较低的版本会给您一个错误。Android支持向后兼容(即在26上编译的应用程序也可以在API级别为26或更低的手机上运行)。
发布于 2021-11-11 21:35:56
考虑到您的用例,显示当前应用程序版本不是更好的方法吗?如果你知道版本,你可以查询它是如何/何时创建的(例如,通过git标签),然后找出编译它时使用的SDK版本。
https://stackoverflow.com/questions/69935139
复制相似问题