在 Android Studio 中导入 Urban Airship 会产生编译问题?

Posted

技术标签:

【中文标题】在 Android Studio 中导入 Urban Airship 会产生编译问题?【英文标题】:Importing Urban Airship in Android Studio gives compile issues? 【发布时间】:2015-01-06 19:42:06 【问题描述】:

我是 android Studio 的新手,我想在我的一个项目中实现 Urban Airship。我使用 .aar 文件在他们的网站上按照示例进行操作,但最终收到此错误。

Error: [/Users/AndroidstudioProjects/MyApplication/app/build/intermediates/exploded-aar/com.urbanairship/urbanairship-lib/5.1.0/AndroidManifest.xml:8]
Invalid instruction 'overrideLibrary', valid instructions are : REMOVE,REPLACE,STRICT

如果我错了,请纠正我,但这是否意味着他们的清单文件中有问题?还是我完全出局了?如果是这样,有没有人有一个很好的例子来说明如何实现它?

【问题讨论】:

可能,安卓版本变化太快了。尝试使用 REPLACE 选项?我确信代码本身可能没问题。 是的,但是此日志中提到的文件是 urbanairship-lib 的一部分,而不是我的清单。对 /build/ 下的文件进行更改会在下一次构建时被覆盖,对吗? 啊,是的,在这种情况下,您可能只能向他们提交票证或获取源代码并自己编译 给他们发了一张票。对于应该开箱即用的东西,重新编译代码感觉没有必要。我想这是他们支持的唯一解决方案并没有给我更好的选择。还是谢谢! 我也有同样的问题。他们回复你的票了吗? 【参考方案1】:

Urban Airship SDK 基于需要 Android API 9 的 Google Play 服务构建,而 Urban Airship 与 6+ 兼容。这就是我们需要覆盖库版本的原因。您使用的是什么 android gradle 插件版本?您需要使用 13.3 或更高版本。见http://tools.android.com/tech-docs/new-build-system。

在项目 build.gradle 文件中:

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:0.13.+'
    

【讨论】:

这为我修好了,我还在 0.12。 是的!问题已回答!谢谢大家!【参考方案2】:

我刚刚遇到了同样的问题,并且能够修复它并构建我的项目:

有问题的行是 AndroidManifest.xml 的第 8 行 我刚刚删除了这一行并更改了一些 SDK 版本。

您可以使用 WinRar 打开文件 urbanairship-lib-5.1.0.aar。 导航到清单。打开它并在您最喜欢的文本编辑器中进行编辑。 保存并关闭清单。 WinRar 询问您是否要更新存档。选择是!

根据此页面,overrideLibrary 用于当您的项目中有库中的 minSDK 版本 > minSDK 版本时。因此,它允许编译不同的版本,而不会出现错误。

http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:overrideLibrary-marker

删除、替换等做一些不同的事情(也在该页面上描述 - 向上滚动)。

然后在我的项目 build.gradle 文件中,我更改了版本号以匹配我的项目:

从这里

compile 'com.android.support:support-v4:21.+'

到这里

compile 'com.android.support:support-v4:19.+'

很高兴知道 OP 的支持票的结果是什么。请随时通知我们!

【讨论】:

你会如何在 OS X 中做到这一点? 尝试将 .aar 的扩展名更改为 .zip。然后像上面一样打开并修改文件,保存新的zip然后重命名回aar。另外,请不要在我上面的帖子中做最后一步。它将有助于项目的构建,但是一旦收到推送,它就会崩溃。相反,使用 v4:21.0.0 而不是 v:21.+ 可能会选择 RC 支持包并禁止较低的构建目标。我当时没有意识到这一点:s 太棒了,您能否更新您的答案以修改以显示这一点?我几乎忽略了它,因为我依赖于 v4:21 的一些功能,所以我认为我无法实现您的解决方案。 UA Android SDK 5.1 需要v21,如果你强制使用旧版本,你会在收到推送时崩溃。需要支持 Android Lollipop 中的最新功能。解包和修补清单以删除覆盖库位应该主要工作,但我不推荐它。 'overrideLibrary' 是在 Android gradle 插件 0.13.3 中引入的,现在是完成允许较旧的 min sdk 然后是依赖项之一的唯一方法。【参考方案3】:

我在评估 5.1.0 版 Urban Airship SDK 时也遇到了这个问题。我正在使用 Android Studio Beta 0.8.14。我联系了 Urban Airship 支持,他们告诉我将 gradle 的版本增加到 0.13.3。 Android Studio 0.8.14 默认为 0.13.2。在项目 build.gradle 文件中将 gradle 的版本更改为 0.13.3 后,我能够成功编译和导入新的 SDK。

【讨论】:

以上是关于在 Android Studio 中导入 Urban Airship 会产生编译问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 中导入 Android Studio 项目?

在 Android Studio 中导入 ActionBarsherlock 时 Gradle 位置不正确错误

在android Studio中导入.aar [重复]

在 Android Studio 中导入 Google Play Services 库

如何在 Android Studio 中导入现有项目时设置 gradle home

在 Android Studio 中导入 Urban Airship 会产生编译问题?