关于SO的压倒性建议是编译SDK通常应与目标SDK匹配。
同样,建议将此[compileSdk]与目标sdk版本匹配。
... CompileSDK(通常等于目标SDk版本)版本。
但明确的advice here是:
通常,您应该针对应用程序可以支持的最低版本的平台编译您的应用程序。
我总是编译sdk匹配目标sdk,但是因为阅读我意识到我,以及许多SO答案是错误的。
我的问题是,使它们匹配会有什么危害,或者相反,你可以使用最低版本的sdk版本有什么好处?
答案 0 :(得分:6)
关于SO的压倒性建议是编译SDK通常应与目标SDK匹配。
真的?我认为在新创建的项目之外,很少有生产Android应用程序如此配置,新项目向导倾向于为这些项目设置相同的值。
使它们匹配的危害是什么
使它们匹配没有特别的危害。使它们不匹配没有特别的危害。这一切都取决于你在写什么以及你想要什么行为。
例如,Android 6.0引入了一个新的运行时权限模型,您必须向应用添加代码,以便从WRITE_EXTERNAL_STORAGE
到READ_CONTACTS
的所有内容请求用户的危险权限。但是,仅当targetSdkVersion
为23或更高时才使用此选项。如果您现在无法处理该代码更改,则应将targetSdkVersion
置于更低的位置,例如22。
但是,与此同时,您可能希望使用v23版本的关键Android支持库,例如appcompat-v7
。一般来说,您希望您的compileSdkVersion
与您正在使用的支持库的主要版本相匹配,因为它们可能引用了仅在compileSdkVersion
中可用的类,方法,常量等。
因此,您可能会特别希望compileSdkVersion
与targetSdkVersion
匹配。
使用最低版本的sdk版本可以获得什么样的优势?
如今,恕我直言,几乎没有任何优势。
早在2008 - 2011年,一个常见的(虽然有缺陷)建议是compileSdkVersion
匹配minSdkVersion
(或者,事实上,他们的Eclipse / Ant等价物,因为Android Studio不存在然后)。这是因为我们缺少工具来自动告诉我们我们是否使用了compileSdkVersion
(例如11)中有效的内容,但是我们的minSdkVersion
一直无法使用(例如,4)。将这两个值设置为相等意味着如果您尝试使用比minSdkVersion
更新的东西,则会出现编译器错误。缺点是你被minSdkVersion
的功能集困住了,无法逐步增强你的应用程序,以利用新设备上的新功能。
如今,如果您尝试使用compileSdkVersion
中有效且但不能一直回到minSdkVersion
的内容,那么构建工具(特别是Lint)会对您大喊大叫,所以你知道进行适当的Build.VERSION.SDK_INT
检查,以确保您只在较新的设备上使用较新的内容,并在较旧的设备上正常降级。