Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于android库项目,is<;使用sdk>;在舱单上有意义吗?_Android_Android Manifest_Android Library - Fatal编程技术网

对于android库项目,is<;使用sdk>;在舱单上有意义吗?

对于android库项目,is<;使用sdk>;在舱单上有意义吗?,android,android-manifest,android-library,Android,Android Manifest,Android Library,几乎都在标题里。虽然我看到了所有示例库项目的AndroidManifest.xml中指定的,但我感觉它与此无关 事实上,我怀疑也是不相关的,因为的所有属性都是不相关的,除了包 有人可以确认吗?如果您的库项目不依赖于特定的android版本,那么您可以省略此标记 因为uses sdk将根据定义sdk版本等,所以它表示for 属性android:minSdkVersion肯定是必需的,如果您没有通过任何测试,则需要1表示-应用程序将支持android的所有api版本,如果您没有通过任何静态测试,则必

几乎都在标题里。虽然我看到了所有示例库项目的
AndroidManifest.xml
中指定的
,但我感觉它与此无关

事实上,我怀疑
也是不相关的,因为
的所有属性都是不相关的,除了


有人可以确认吗?

如果您的库项目不依赖于特定的android版本,那么您可以省略此标记

因为uses sdk将根据定义sdk版本等,所以它表示for

属性
android:minSdkVersion
肯定是必需的,如果您没有通过任何测试,则需要1表示-应用程序将支持android的所有api版本,如果您没有通过任何静态测试,则必须使您的应用程序支持所有api版本

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

这个属性
android:maxSdkVersion
有点难以理解..doc说

警告:不建议声明此属性。首先,有 无需将该属性设置为阻止部署 应用程序安装到新版本的Android平台上 释放。根据设计,该平台的新版本完全可以使用 向后兼容。您的应用程序应在新服务器上正常工作 版本,前提是它只使用标准API并遵循开发流程 最佳做法。其次,请注意,在某些情况下 属性可能导致您的应用程序从用户帐户中删除 系统更新到更高API级别后的设备。上的大多数设备 您可能安装的应用程序将定期收到 系统更新的空气,所以你应该考虑他们的影响 请在设置此属性之前启动应用程序

以及

Android的未来版本(超过Android 2.0.1)将不再检查 或在安装过程中强制执行maxSdkVersion属性,或 重新验证。Google Play将继续使用该属性作为 但是,在向用户展示可用于 下载

该警告表示,如果您声明属性,则可能会出现负面影响,但当您查看另一面时,如果您正在开发任何支持特定Android版本的产品,则该属性对您最有用。

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

只有当您使用2.0.1^版本开发时,您才可以说不需要编写该版本,但如果您编写该版本,Google paly将使用该版本作为向用户演示的过滤器

因此,我的结论和建议

从ADT r20 preview 3开始,使用至少具有一个属性的元素
库清单可以与主应用程序清单合并。这是通过指定属性在ant构建中启用的

manifestmerger.enabled=true  
[我不知道如何在其他(例如maven)版本中启用它;如果您理解了,请在此处进行评论。我猜它会转换为aapt命令行参数。]

各种规则管理冲突和凌驾行为

关于此处提出的具体问题(合并和),规则如下:

  • minSdkVersion:如果目标清单包含小于lib值的值,则出错;保留目标值等于或大于lib值,仅当未在目标中指定任何值时才将lib值存储在目标中(如果未在其中任何一个中指定,则默认为1)
  • targetSdkVersion:如果目标清单包含的值小于lib值,则发出警告;保留目标值等于或大于lib值,仅当未在目标中指定lib值时才在目标中存储lib值(如果未在其中任何一个中指定,则默认为合并的minSdkVersion值)
的规则是:如果目标尚未存在库权限,则将库权限添加到目标。如果两个应用程序中的权限相同,则可以

如果您使用的是ADT r20 preview 2或更早版本,则以下内容适用: 我创建了一个小的测试库项目和一个使用它的测试应用程序,以便自己深入了解这个问题。我在库项目的清单中提供了和,并从应用程序的清单中省略了这两个

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

我的测试代码可以在上找到


我的结论是,在Android库项目的清单中指定and对消费应用程序的合并清单没有影响

清单在库项目中的可能用途:

  • 你试过皮棉吗?如果您的项目使用的类/方法太新,无法在清单上设置的min sdk上工作,则会发出警告。 想看看吗?只需按下sdk管理器附近的V-checkbox按钮,如下所示:

  • 清单可以为其他人提供使用项目所需的线索

  • 您还可以在其中添加一些测试活动,以便快速切换