对于android库项目,<uses-sdk>在清单中是有意义的?

这在标题中都很相似。 尽pipe我看到在所有示例库项目的AndroidManifest.xml指定的<uses-sdk> ,但我觉得这是无关紧要的。

实际上,我怀疑<uses-permission>也是不相关的,除了package之外, <manifest>所有属性都是如此。

谁能确认?

Solutions Collecting From Web of "对于android库项目,<uses-sdk>在清单中是有意义的?"

截至ADT r20预览版3

库清单可以与主应用程序清单合并。 这是通过指定属性在Ant构build中启用的

 manifestmerger.enabled=true 

[我不知道如何在其他(如maven)版本中启用它; 请在这里评论,如果你弄明白了。 我猜测它转化为aapt命令行参数。]

各种规则支配冲突和压倒一切的行为。

相对于这里提出的具体问题(合并<uses-sdk>和<uses-permission>),<uses-sdk>的规则是:

  • minSdkVersion:目标清单中包含的值小于lib值时出错; 保留目标值是相同或大于lib值,只有在没有指定目标值的情况下,才在目标中存储lib值(如果未指定,则默认为1)。
  • targetSdkVersion:如果目标清单包含小于lib值的值,则警告; 保留目标值是相同或大于lib值,只有在没有指定的情况下才在目标中存储lib值(如果未指定,则默认合并minSdkVersion值)。

<uses-permission>的规则是:将库权限添加到目标,如果它们不在那里。 如果同时有两个权限是可以的。

如果您使用的是ADT r20 preview 2或更早版本,则适用以下情况:

我创build了一个小testing库项目和一个使用它的testing应用程序,以便深入了解这一点。 我在库项目的清单中提供了一个<uses-sdk>和一个<uses-permission>,并从应用程序的清单中省略了两个。

结果是库项目的<uses-sdk>和<uses-permission>值在构build时未被合并到应用程序中,这通过使用AppXplore工具检查我的设备上安装的应用程序来certificate 。

我的testing代码可以在https://github.com/adennie/android-library-project-manifest-test中find

我的结论是,在Android库项目的清单中指定<uses-sdk>和<uses-permission>对消费应用程序的合并清单没有任何影响。

清单在图书馆项目中的可能用途:

  1. 你试过纤维吗? 它可以警告你,如果你的项目使用的新类/方法不能在你在清单上设置的min-sdk上工作。 想看看吗? 只需按下sdkpipe理器附近的V-checkboxbutton,如下所示: http : //tools.android.com/tips/lint/lint-toolbar.png?attredirects=0

  2. 清单可以为其他人提供项目所需要的东西的线索。

  3. 你也可以添加一些testing活动,在这个testing活动中可以让你快速的将项目从库项目切换到普通项目,并对其进行一些testing。

  4. 正如谷歌以前所build议的那样,图书馆项目可能会在将来与所有使用图书馆项目的人合并使用。

总之,这个清单并不意味着什么。 它可以帮助你很多。

如果你的库项目不依赖于特定的Android版本,那么你可以省略这个标签。

因为uses-sdk将定义sdk版本等。

根据文件 ,它说<uses-sdk>

属性 android:minSdkVersion肯定是必需的,如果你没有通过任何,那么它将需要1意思 – 应用程序将支持所有的Android的api版本,然后你将不得不让你的应用程序支持所有这些,如果你不通过任何静态。

警告:如果您不声明此属性,则系统将默认值为“1”,表示您的应用程序与所有Android版本兼容。 如果您的应用程序与所有版本不兼容(例如,它使用API​​ Level 3中引入的API),并且您尚未声明适当的minSdkVersion,那么当安装在API级别小于3的系统上时,应用程序将在运行时试图访问不可用的API。 为此,请确保在minSdkVersion属性中声明适当的API级别。

android:maxSdkVersion 属性 android:maxSdkVersion理解android:maxSdkVersion说,

警告:不build议声明该属性。 首先,不需要将属性设置为阻止应用程序部署到新版Android平台上的方式。 按照devise,新版本的平台完全向后兼容。 您的应用程序应该在新版本上正常工作,只要它使用标准API并遵循开发最佳实践。 其次,请注意,在某些情况下,声明该属性可能导致应用程序在系统更新到更高API级别后从用户设备中删除。 大多数安装应用程序的设备都将定期收到系统更新,因此在设置此属性之前,应考虑其对应用程序的影响。

和,

未来版本的Android(超越Android 2.0.1)将不再在安装或重新validation期间检查或强制执行maxSdkVersion属性。 但Google Play将继续使用该属性作为filter,但向用户展示可供下载的应用程序时。

这个警告是为了表明如果你声明这个属性可能会发生的负面点。但是当你看着对方如果你正在开发任何支持一些特定的Android版本,那么ATTRIBUTE对你来说是最有用的。

删除该属性所采取的步骤是鼓励开发人员使其应用程序支持所有不同(较新)的版本。

只有当你使用2.0.1版本开发^那么你可以说它不需要写,但如果你写谷歌paly将使用该filter呈现用户

所以我的结论和build议

使用具有至less一个属性android:minSdkVersion <uses-sdk>元素