在android项目和库中使用支持库(Android Studio)

Posted

技术标签:

【中文标题】在android项目和库中使用支持库(Android Studio)【英文标题】:Use support library in android projects and library (Android Studio) 【发布时间】:2013-05-11 02:53:54 【问题描述】:

我正在使用新的 android Studio,我正在寻找一种方法来使用来自多个项目的支持库。基本上我有一个项目使用ActionBarSherlock 这个项目需要支持库。所以我在this question 中添加了一个参考。

现在我遇到的问题是我的主项目也使用了支持库,所以我让它以某种方式包含了两次。如果我从两个项目之一中删除该库,我会收到一些与支持库相关的类未知的错误,这对我来说很清楚,但如果我在两个项目中都有参考,我将面临此错误:

Android Dex: [ProjectName] UNEXPECTED TOP-LEVEL EXCEPTION:
Android Dex: [ProjectName] java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ShareCompat$ShareCompatImplJB;
Android Dex: [ProjectName] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
Android Dex: [ProjectName] at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
Android Dex: [ProjectName] at com.android.dx.command.dexer.Main.processClass(Main.java:490)
Android Dex: [ProjectName] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
...

知道如何解决这个问题吗?

【问题讨论】:

我猜你必须从旅游项目中删除 jar 并尝试。 @Raghunandan 您是否注意到这一点:"[...] 如果我从两个项目之一中删除该库,我将收到一些与支持库相关的类未知的错误[.. .]" 【参考方案1】:

我通过进入File > Project Structure... 并选择Modules 然后单击模块的Dependencies 选项卡来解决此问题。然后在图书馆旁边,我将范围从Compile 更改为Provided

这意味着模块仍然可以使用它,但它没有达到编译,因为我假设你已经在你的主项目中使用了那个 JAR。

希望这会有所帮助!

【讨论】:

Provided 不再是 Android Studio 0.4.0 中的选项。有没有办法在 Gradle 文件中指定这种行为? @Greg 更改 compile 'source' 以提供 'source'【参考方案2】:

我也遇到过类似的问题。在项目选项卡/栏/任何内容中选择actionbarsherlock(在左侧,因此您可以看到项目树)。点击F4打开模块设置。 确保您在 actionbarsherlock 和您的项目中没有两次使用相同的依赖项。 还要确保您使用的是 android-studio sdk (android-studio/sdk/extras/android) 中的支持库版本。

最后,如果您像我一样,请确保您没有意外地使 actionbarsherlock 依赖于自身,从而以这种方式加载库两次! >.

看看这些显示我的模块偏好的图像: http://imgur.com/a/JupWp

另外,不要忘记确保libs 没有隐藏任何相同的!

【讨论】:

【参考方案3】:

这曾经是一个 Eclipse 项目吗?如果是这样,请尝试进入 Eclipse,清理项目,退出,在 IntelliJ 中重建。我相信这是一个状态问题,而不是配置问题。

【讨论】:

我需要一小时来修复有线 Eclipse 错误。但是这不起作用。【参考方案4】:

我没有将 android 支持库作为 jar 导入,而是将 build.gradle 中的库(在我的情况下为 facebook sdk)依赖项更改为:

dependencies 
    compile 'com.android.support:support-v4:13.0.0'
 

【讨论】:

以上是关于在android项目和库中使用支持库(Android Studio)的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio中的混淆

Android 仅使用支持库中的 ViewPager

(Ruby,Rails)模块和库中SELF的上下文......?

使用 Android 设计支持库中的浮动操作按钮的浮动操作菜单实现 [关闭]

Android 使用命名空间作为库中属性的前缀

Android 硬件支持的密钥库中的 PublicKey 有多安全?