如果<code>targetSdkVersion
我的应用程序< code>targetSdkVersion是27版本,我运行在< code>8.0.0[26]设备上。我得到了下面链接中描述的< code > IllegalStateException ,因为我使用了一个对话框< code>Activity。
只有全屏不透明的活动才能请求方向
有两个建议的选项。从AndroidManifest.xml
中删除android:在屏幕上定位="肖像"
或将Target etSdkVersion
更改为26。这两个解决方案都适合我。
但是我的问题是关于将目标SdkVersion
更改为26。当我们将目标SdkVersion
从27降低到26并且设备操作系统为26时,应用程序的行为将如何变化?由于设备在26中运行并且目标SdkVersion
为27,我认为没有应用任何兼容模式。我的理解是,当设备操作系统版本大于目标SdkVersion
时,应用了兼容模式。
那么,当我们在这里更改<code>targetSdkVersion</code>时,应用程序的行为会发生怎样的变化?
是的,您的应用程序可能会以不同的方式运行。将 targetSDKVersion
设置为 27 时,将针对 API 27 SDK 编译应用,并与 API 27 库链接。如果较新的 SDK 和库包含应用代码不允许的更改,则你的应用可能会例外。降低 targetSDKVersion
意味着应用是针对早期的 SDK 构建的,你不需要为以后的 SDK 更改修改代码,因此没有例外。但是,您将无法使用更高版本的 SDK 的新功能,并缩短了应用在 Play 商店中的停留时间,因为较旧的 API 最终会被删除。
请记住,targetSDKVersion
与设备API支持无关。它是SDK编译版本。如果未使用任何API 27功能,则26的targetSDKVersion
将在支持API 27的设备上运行。如果未使用API 27功能,(解决方法是使用新功能的支持库版本,如果已提供,有时新的API功能不会出现在支持库中)。
是的,Android文档提到了< code>targetSdkVersion改变时的行为变化。例如,在API 19中,我们被告知Android 4.4的WebView在针对API 19级和更低级别的应用程序中以“古怪模式”运行,并且< code>AlarmManager和< code>ContentResolver对此类应用程序保留了一些旧的行为。我们还被告知Android 6中wifi配置的一个小变化,它检查< code>targetSdkVersion是否为20或更低,如果< code>targetSdkVersion为23或更低,则在Android 7中链接到非NDK平台库的操作会暂时停止。更引人注目的是Android 8的一系列行为变化,其中一些会在给你新行为之前检查< code>targetSdkVersion是否为26或以上。基本上,他们希望你阅读每一个新出现的API的“行为改变”部分。