cod*_*123 495 sdk android android-build android-gradle-plugin
我已经看了看文档与摇篮建设,但我仍然不知道什么之间的差异compileSdkVersion
,并targetSdkVersion
为.
它只是说:
该
compileSdkVersion
属性指定编译目标.
那么,"汇编目标"是什么?
我看到两种可能的解释方式:
compileSdkVersion
在构建应用程序所使用的编译器的版本,同时targetSdkVersion
是"API级别的应用程序的目标".(如果是这种情况,我认为compileSdkVersion
必须大于或等于targetSdkVersion
?我看到之前已经问过这个问题,但是一个答案只引用了文档,这对我来说是不清楚的.
Jef*_*xon 524
这compileSdkVersion
是应用程序编译的API的版本.这意味着您可以使用该API版本中包含的Android API功能(以及所有以前的版本).如果您尝试使用API 16功能但设置compileSdkVersion
为15,则会出现编译错误.如果设置compileSdkVersion
为16,只要应用程序的执行路径不尝试调用特定于API 16的任何API,您仍然可以在API 15设备上运行该应用程序.
这targetSdkVersion
与您的应用程序的编译方式或可以使用的API无关.这targetSdkVersion
应该表明您已经测试了您的应用程序(可能是最多包括)您指定的版本.这更像是一个认证或签名,你给Android操作系统作为一个提示,它应该如何处理你的应用程序的操作系统功能.
例如,正如文档所述:
例如,将此值设置为"11"或更高允许系统在Android 3.0或更高版本上运行时将新的默认主题(Holo)应用于您的应用程序...
Android OS 在运行时可能会根据此值更改应用程序在操作系统上下文中的样式化或执行方式.还有一些受此值影响的其他已知示例,该列表可能只会随着时间的推移而增加.
出于所有实际目的,大多数应用程序都希望设置targetSdkVersion
为最新发布的API版本.这将确保您的应用在最新的Android设备上看起来尽可能好.如果未指定targetSdkVersion
,则默认为minSdkVersion
.
Jim*_*ane 142
作为一个oneliner指南:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
Run Code Online (Sandbox Code Playgroud)
理想的情况是:
minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)
Run Code Online (Sandbox Code Playgroud)
小智 33
本compileSdkVersion
应该是最新的稳定版本.的targetSdkVersion
应完全测试和小于或等于 compileSdkVersion
.
Aus*_*n D 25
在游戏的后期..并且上面有几个很好的答案 - 基本上,这compileSdkVersion
是应用程序编译的API的版本,而targetSdkVersion
表示应用程序被测试的版本.
我想用以下注释补充这些答案:
targetSdkVersion
为23或更高,则应用程序会在运行时请求用户的权限.targetSdkVersion
为22或更低,则系统会要求用户在用户安装应用程序时授予权限.如果该compileSdkVersion
值高于应用程序声明的版本targetSdkVersion
,系统可能会启用兼容性行为,以确保您的应用程序继续以您期望的方式工作.(参考)
每个新的Android版本......
targetSdkVersion
应该递增以匹配最新的API级别,然后在相应的平台版本上彻底测试您的应用程序compileSdkVersion
另一方面,除非您添加新平台版本独有的功能,否则无需更改 targetSdkVersion
通常(最初)小于compileSdkVersion
,但看到维护良好/已建立的应用程序并不罕见targetSdkVersion > compileSdkVersion
我compiledSdkVersion
在之前的答案中看到了很多不同之处,因此我将在这里按照android的网页进行一些澄清.
答 - Android说的是什么
根据https://developer.android.com/guide/topics/manifest/uses-sdk-element.html:
选择平台版本和API级别在开发应用程序时,您需要选择要编译应用程序的平台版本.通常,您应该针对应用程序可以支持的最低版本的平台编译应用程序.
所以,根据Android,这将是正确的顺序:
compiledSdkVersion = minSdkVersion <= targetSdkVersion
B - 其他人也说了什么
有些人更喜欢总是使用可用的最高编译的SDDVersion.这是因为他们将依赖代码提示来检查他们是否使用比minSdkVersion更新的API功能,因此要么更改代码以不使用它们,要么在运行时检查用户API版本以有条件地使用它们与旧API版本的回退.
有关弃用用途的提示也会出现在代码中,让您知道某些内容在较新的API级别中已弃用,因此您可以根据需要做出相应的反应.
所以,根据其他人的说法,这将是正确的顺序:
minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)
该怎么办?
这取决于你和你的应用程序.
如果您计划在运行时根据用户的API级别提供不同的API功能,请使用选项B.您将获得有关编码时使用的功能的提示.只需确保在运行时没有检查用户API级别就不会使用比minSdkVersion更新的API功能,否则您的应用程序将崩溃.这种方法还有一个好处,就是在编码时学习新的东西和旧的东西.
如果您已经知道新的或旧的,并且您正在开发一个肯定永远不会更新的一次性应用程序,或者您确定不会有条件地提供新的API功能,那么请使用选项A.您将不会受到打扰使用已弃用的提示,即使您有诱惑,也永远无法使用较新的API功能.
小智 5
编译SdkVersion: compileSdkVersion 定义 gradle 将使用哪个 Android SDK 版本来编译您的应用程序。
\n例如: \n在 Android 12 中,因此在 SDK 版本 31 中,引入了新的闪屏 API,这使我们能够轻松实现闪屏。\n如果您想在应用程序中使用该 API,则必须将compileSdkVersion 更新为 31您的应用程序。\n只有这样您才能在代码中使用这个新的启动屏幕 API,否则您将收到编译错误。
\n\xe2\x80\x99t 当然意味着您只能使用这个新 API,而忘记那些拥有旧版 Android 版本(该 API 不可用)的用户。\n您还必须提供另一种方法来显示启动屏幕较旧的设备通过使用版本检查条件。
\n*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n\n// New Splash screen API\n\n} else {\n\n// Old splash screen approach\n\n}*\n
Run Code Online (Sandbox Code Playgroud)\n同样,某些方法或属性可能在此 Android SDK 版本中被弃用,其中一些甚至被删除。\n这就是为什么一旦您在应用中更新了compileSdkVersion,您经常会在编译过程中看到一些警告和错误。
\n但单独更改compileSdkVersion实际上并不会改变应用程序在Android设备上运行时的行为。\n那么Android系统如何知道它是否可以在您的应用程序中使用新功能呢?targetSdkVersion 发挥作用的\xe2\x80\x99s。
\ntargetSdkVersion : targetSdkVersion 告诉系统应用程序是针对哪个 Android 版本设计和测试的。
\n例如: \n在 Android 12 中,自定义通知的外观已更改。\n如果您的 targetSdkVersion 低于 31,系统将假定您尚未\xe2\x80\x99t 测试该功能\n并将以旧方式显示通知以最大程度地降低风险该通知将无法正确显示。\n只有在将目标 SDK 版本更新到 31 后,才会使用新的通知外观。
\n并非新 Android 版本中引入的所有更改都是有针对性的并使用这些向后兼容机制。\n对于每个 Android 版本版本,在文档中,您可以看到更改分为两组:
\n-> 针对特定 Android 版本的应用程序的行为更改
\n-> 以及所有应用程序的更改,无论它们定义哪个 targetSdkVersion。
\n后者的一个示例可能是 Android 11 中引入的一次性权限。\n当设备使用 Android 版本 11 或更高版本并且应用程序请求位置权限时,\n用户可以授予对该数据的临时访问权限,并且应用程序必须正确处理这种情况,无论它是否针对 SDK 版本 30。
\n编译版本和目标SDK版本之间的关系:
\n-> targetSdkVersion 不能高于compileSdkVersion,因为我们不能针对编译过程中我们一无所知的东西。
\n-> 理想情况下,compileSdkVersion 和 targetSdkVersion 应该相同,并且都指向最新的 SDK。
\n 归档时间: |
|
查看次数: |
186652 次 |
最近记录: |