我在Android 9上遇到问题:
org.apache.http.HttpEntity org.apache.http.HttpResponse.getEntity()
这是因为SDK不支持此功能
添加
useLibrary 'org.apache.http.legacy'
或
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
无法解决问题
在这种情况下,我有一个不同的问题:
我可以像下面的代码一样吗?
compileSdkVersion
我有28,但targetSdkVersion
22
compileSdkVersion 28
defaultConfig {
applicationId "myApp"
minSdkVersion 21
targetSdkVersion 22
versionCode 2
versionName "2.0"
useLibrary 'org.apache.http.legacy'
}
在这种情况下,该应用程序将运行
我强调该应用程序非常简单,并且不使用新版SDK中的任何内容
这种解决方案的风险是什么,威胁是什么,利弊是什么?
这是我可以在快速摘要中解释的内容。
compileSdkVersion
compileSdkVersion是应用程序针对的API版本。这意味着您可以使用该版本API(显然包括所有先前版本)中包含的Android API功能。如果尝试使用API 16功能,但将compileSdkVersion设置为15,则会出现编译错误。如果将compileSdkVersion设置为16,只要您应用的执行路径不尝试调用任何特定于API 16的API,您仍然可以在API 15设备上运行该应用。
targetSdkVersion
targetSdkVersion与您的应用程序的编译方式或可以使用的API无关。 targetSdkVersion应该表明您已经在您指定的版本上(大概包括以下)测试了您的应用程序。这更像是认证或注销,您是在向Android操作系统提示如何在操作系统功能方面处理您的应用。
Android操作系统在运行时可能会基于此值更改应用程序的样式化或在操作系统的上下文中执行的方式。还有其他一些受此值影响的示例,并且该列表可能只会随时间增加。
出于所有实际目的,大多数应用程序都希望将targetSdkVersion设置为API的最新发行版。这将确保您的应用在最新的Android设备上看起来尽可能好。如果未指定targetSdkVersion,则默认为minSdkVersion。