23

这几乎都在标题中。尽管我在我见过<uses-sdk>的所有示例库项目中都看到了指定,但AndroidManifest.xml我觉得这无关紧要。

事实上,我怀疑这<uses-permission>也是无关紧要的,除了 , 之外的所有属性也是<manifest>如此package

任何人都可以确认吗?

4

4 回答 4

22

自 ADT r20 预览版 3 起

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

manifestmerger.enabled=true  

[我不确定如何在其他(例如 maven)构建中启用它;如果你弄清楚了,请在这里评论。我猜它会转化为 aapt 命令行参数。]

各种规则管理冲突和压倒一切的行为。

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

  • minSdkVersion:如果目标清单包含的值小于 lib 值,则会出错;将目标值保留为等于或大于 lib 值,仅当未指定目标值时将 lib 值存储在目标中(如果两者均未指定,则默认为 1)。
  • targetSdkVersion:如果目标清单包含的值小于 lib 值,则发出警告;将目标值保留为与 lib 值相同或大于 lib 值,仅当此处未指定任何值时才将 lib 值存储在目标中(如果两者均未指定,则默认为合并的 minSdkVersion 值)。

<uses-permission> 的规则是:将库权限添加到目标,如果它们尚未存在。如果两者的权限相同,则可以。

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

我创建了一个小测试库项目和一个使用它的测试应用程序,以便自己深入了解。我在库项目的清单中提供了一个 <uses-sdk> 和一个 <uses-permission>,并从应用程序的清单中省略了它们。

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

我的测试代码可在https://github.com/adennie/android-library-project-manifest-test获得。

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

于 2012-05-01T15:55:23.403 回答
1

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

  1. 你试过皮棉吗?如果您的项目正在使用无法在您在清单上设置的 min-sdk 上运行的太新的类/方法,它会警告您。想看看吗?只需按下 sdk manager 附近的 V-checkbox 按钮,如下所示: http ://tools.android.com/tips/lint/lint-toolbar.png?attredirects=0

  2. 清单可以为其他人提供有关该项目需要什么的线索。

  3. 您还可以在其中添加一些测试活动,可以让您快速将项目从库项目切换到普通项目,并对其进行一些测试。

  4. 正如谷歌过去所建议的那样,图书馆项目将来可能会通过与所有使用图书馆项目的项目合并来使用清单。

总之,manifest并不是没有意义的。它可以帮助你很多。

于 2012-05-04T08:49:20.820 回答
0

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

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

于 2012-02-29T17:32:12.987 回答
-1

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

该属性 android:minSdkVersion肯定是必需的,如果您不传递任何属性,那么它将具有1 个含义 - 应用程序将支持 android 的所有 api 版本,然后如果您不静态传递任何属性,则必须使您的应用程序支持所有这些。

注意:如果您不声明该属性,系统会假定默认值为“1”,表示您的应用程序兼容所有版本的Android。如果您的应用程序不兼容所有版本(例如,它使用 API 级别 3 中引入的 API)并且您没有声明正确的 minSdkVersion,那么当安装在 API 级别低于 3 的系统上时,应用程序将在运行期间崩溃尝试访问不可用的 API 时的运行时。因此,请务必在 minSdkVersion 属性中声明适当的 API 级别。

该属性 android:maxSdkVersion有点难以理解..doc说,

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

和,

Android 的未来版本(Android 2.0.1 之后)将不再在安装或重新验证期间检查或强制执行 maxSdkVersion 属性。但是,在向用户提供可供下载的应用程序时,Google Play 将继续使用该属性作为过滤器。

该警告表示如果您声明该属性可能会发生负面影响但是当您查看另一面时,如果您正在开发任何支持某些特定 Android 版本的东西,那么 ATTRIBUTE 对您最有用。

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

仅当您使用 2.0.1^ 版本进行开发时,您才可以说不需要编写它,但是如果您编写Google paly 将使用它作为呈现用户的过滤器

所以我的结论和建议

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

于 2012-05-01T13:07:01.283 回答