Android Studio中的Android库

22
有人知道在Android Studio中如何使用Android库吗?
我还没有找到任何相关文档(Android开发者网站上的文档非常简略),我发现根据我创建库项目的方式不同,结果完全不同。
如果我从Eclipse导入库(按照网站上先导出为Gradle的建议),我会得到一个包含库项目的新项目+模块。这似乎不太对(intellij项目= eclipse工作区),尝试在intellij中进行编译/构建会导致许多错误(库项目找不到android支持库)。
如果我从头开始创建一个带有库模块的新项目,则会得到一个带有build.gradle文件的Android库项目。
如果我在项目内部创建新模块(右键单击项目),则会使用Ant构建Android库。这很奇怪,肯定不是我们应该在Android Studio中使用Ant来构建Android库的意图吧?顺便说一下,使用File> New Module创建新库模块似乎行不通,它只会创建一个新应用程序。
有人了解这方面的信息吗?我也没有找到任何地方可以指定哪些库应该在哪些应用程序模块中使用。我知道这是预览版,但我难以相信像Android库这样的核心功能支持如此之差。我错过了什么吗?
更新于2014-04-09:
所以我本周使用Android Studio进行了新一轮尝试。虽然问题现在不同于我最初写这篇文章时,但这仍是一个大问题——令人难以置信。我仍然没有找到在AS中在多个项目中使用Android库(包括嵌套库)的好方法。我看到有些建议是将代码复制到多个位置——这完全违背了拥有库的初衷。

我真的不明白谷歌在 Android Studio 上在想什么... 这很遗憾,因为看起来这是一个很棒的工具,但是缺乏对像代码重用这样基础的操作进行直观处理,对我来说是一个很大的问题(更别提与不断改进的跨平台开发工具相比,专门为 Android 编码变得越来越不吸引人了)。


1
文件->项目结构->模块->依赖项 - ADK
好的,Gradle插件用户指南(http://tools.android.com/tech-docs/new-build-system/user-guide)包含了一些关于Android Studio的使用意图的有用信息,但它仍然没有解释如何使用AS,例如每个项目一个应用程序、一个项目多个应用程序、在哪里放置iml文件(不同的向导以不同的方式操作)等。 :/ - Michael A.
我没有使用Gradle,只是将模块导入项目,然后添加库和自定义依赖。 - ADK
ADK的评论对我有用:文件->项目结构->模块->依赖项(然后单击错误,这些错误将展开它们,每个错误旁边,将鼠标悬停在第一个小图标上,当您悬停时,工具提示中会出现“修复”字样,右键单击“修复”图标,然后执行“添加到依赖项...”) - Stephan Branczyk
这个问题有任何后续吗?现在已经是2015年2月了,但我似乎仍无法将外部模块链接到我的AS项目中, 而不是作为子模块完整地复制进去。一些帖子建议在settings.gradle文件中声明你的外部项目,然后在build.grade中添加它,但对于我来说并没有用。 - ticofab
我已经发布了适合我的答案,以防其他人出现这种情况。不幸的是,外部子模块解决方案是我找到的唯一可行的解决此问题的方法。虽然很糟糕,但这是我们目前最好的选择。 :/ - Michael A.
6个回答

12

如果您想在Android Studio项目中使用额外的库:

  1. 将您的.jar库复制到项目中的libs文件夹中
  2. 右键单击库并选择"Add as library"
  3. build.gradle中替换

    compile files('libs/android-support-v4.jar')

使用

compile fileTree(dir: 'libs', include: '*.jar')
如果仍然无法正常工作,使用我们的终端导航到项目的根文件夹,并运行gradlew clean命令。

谢谢你的回答。但我遇到的问题与Android库有关(我使用了很多库)。 - Michael A.
在我的情况下,我不需要右键单击库并选择“添加为库”。如果我这样做了,我将不得不删除此单击添加的行:compile files('libs / xxx.jar')。"compile fileTree(dir:'libs',include:'*.jar')"会处理libs中的所有jar。 - Hong

2

Intellij与Eclipse不同,它的“工作区”只适用于一个“项目”。每个项目由多个模块组成。这些模块本身可以是自己的“项目/应用程序/库”。

因此,一个模块有点像Eclipse项目的等效物。

转到:文件->项目结构->模块

将Android库添加为模块,您可以声明它在Android库中,并将其作为您的“项目”(应用程序模块)的依赖项。


1
我也遇到了同样的问题,这真的让我很沮丧 - 或许你可以帮帮我。我已经以各种可能的方式将jar文件添加为库和依赖项 - 我能做到的最远的是让库与应用程序一起编译,但我仍然会收到“NoClassDefFoundError”异常...这是我的库设置的样子: http://i.imgur.com/hbuzeA1.pnghttp://i.imgur.com/O6J3kDn.png - Jonah H.
2
好的,“library”可以是一个jar文件,但“Android Library”不是一个jar文件。请使用正确的术语。 - Blundell
谢谢。我知道这个问题,但它仍然没有解决。我怀疑这与Gradle的设置有关,尽管我已经查看了Android构建系统文档和自动生成的代码,但我没有发现任何明显的错误。 - Michael A.
此外,我不会像ADK建议的那样在Android Studio中使用Ant。对我来说,直接转向Android Studio而不迁移到Gradle(这将成为未来“官方”构建系统)似乎毫无意义。 - Michael A.
是的,我基本上得出了相同的结论。我看到他们刚刚发布了一个新版本,所以我很快就会下载并查看是否更好,但在那之前,我还是坚持使用Eclipse。 - Michael A.
显示剩余2条评论

1

多项目设置 是你要找的东西。我认为一开始不需要太关注Android Studio的内容。重点是正确编写gradle文件,然后“同步”模块以更新Android Studio。(有时我不得不重新启动它,以便“构建变体”部分可以更新到新的风味)。

@Xav在Google+回复中建议如下:

高级项目用于添加新模块(库项目)。第一次创建一个具有单个模块的顶级项目比创建平面项目更容易,并在添加模块时进行转换。

需要指出两件主要事情,在您的settings.gradle文件中,您将列出:app和library模块;还应该使用'android-library'插件来处理库模块,而使用'android'插件来处理应用程序。

如果您能够在命令行中执行"./gradlew assemble",那么下次打开项目或同步时,Android Studio应该会自动更新正确的设置。

谢谢。我还没有时间研究这个问题(时间有限),但我会尝试先导入顶层项目而不是低级项目(这是我采取的方向)。我认为先让简单的东西工作起来会更容易,而不是从一开始就尝试导入具有多个子库的项目。 - Michael A.

0

将 Android 库附加到 Android Studio。如果您对库有任何想法,则可以直接添加,例如:

(这是 Picasso 库的示例)

compile 'com.squareup.picasso:picasso:2.3.2'

如果您想创建自己的库,请按照以下步骤操作。

  1. 单击文件菜单
  2. 选择新模块并选择Android库。

  3. 声明库名称和包名称。

现在,您的库已经创建完成,可以轻松使用。

  1. 单击文件,然后单击项目结构
  2. 在小窗口内单击依赖项选项卡,然后单击绿色加号按钮。

  3. 选择模块依赖项,您可以看到您的库文件。

  4. 选择库并单击确定


0
目前,您需要配置您的build.gradle文件以使用Android Studio中的jars,否则您将在运行时遇到可怕的NoClassDefException。请参阅我的此处的答案,了解有关使jar库工作的一些提示。您还可以直接将Maven依赖项定义到build.gradle中,这非常方便。

谢谢,但问题不在外部ja库上 - 而是在Android库中。然而,似乎问题出在Android Studio上 - 最新版本据说已经修复了一些问题(尽管我还没有检查过),更多的修复也将会到来。 - Michael A.

0
为了帮助任何遇到这个问题的人,我分享一下我用来“解决”这个问题的方法。在我的看法中,这个方法远非优雅,但是它是我在使用 Git 管理 Android Studio 中的问题(重复使用 Android 库)时找到的最好的解决方案。
基本思路是使用 Git 子模块。每个库都有自己的 Git 仓库。
1. 创建 myLibrary 作为一个模块,然后将其提交到一个仓库中。 2. 在项目根目录仓库中,使用 git submodule add 命令获取该库。 3. 在 settings.gradle 文件中添加:include ':myLibrary',并同步项目。 4. 在 Module Settings >> Dependencies >> + Module Dependency 中添加适当的依赖项。
虽然这种方法与在 Eclipse 中处理 Android 库的简单优雅相去甚远,但它可以勉强工作。需要注意以下几点:
- 记得经常使用 git pull 命令,以获取更改(然后提交主项目以同步子模块更改)。 - 如果你已经对库进行了更改,请记得从模块目录中使用 git push 命令将更改推送到远程仓库。

内置的版本控制系统应该能够帮助解决这个问题,但是对我来说一直非常不稳定,所以现在我更喜欢自己从终端操作。

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接