【问题标题】:How to create the best Android app project structure with Android Studio and Gradle?如何使用 Android Studio 和 Gradle 创建最佳的 Android 应用项目结构?
【发布时间】:2013-06-11 19:48:06
【问题描述】:

我正在尝试切换到 Android Studio 和 Gradle,但在集成到 Studio 和使用 Gradle 构建时遇到了很多问题。

  • 我有一个依赖于多个库的应用。
  • 我想使用 Android Studio 和 Gradle 构建系统。
  • 我正在使用 git
  • 我的大部分库都直接来自其 github 位置的 git cloned

目前,我拥有的是:

Main Project
 ├── GH Lib 1
 │     ├── <some stuff from the lib>
 │     └── library
 │           ├── AndroidManifest.xml
 │           ├── res
 │           └── src
 ├── GH Lib 2
 │     └── <same structure as the lib 1>
 ├── GH Lib 3
 │     └── <same structure as the lib 1>
 │── GH Lib 4
 │     └── <same structure as the lib 1>
 └── My App folder
       └── AndroidManifest.xml
       └── res
       └── src
       └── libs

“GH Lib X”目录中的每一个都是来自 GitHub 的 git 克隆的结果(例如:ActionBarSherlock)。
“我的应用文件夹”直接包含ressrcAndroidManifest.xmllibs(带罐子)等。

第一个问题

我想了解如何将所有这些功能与 Gradle 集成到 Studio 中。目前每个库都是一个模块,并包含一个 build.gradle 文件。我的应用程序还包含一个 build.gradle 文件,但是我无法引用其他文件夹中的依赖项,因为它们位于父文件夹中,而 Gradle 无法完成此 AFAIK。

这种结构会更好吗?

My App Folder
  │── AndroidManifest.xml
  │── res
  │── src
  │── libs
  └── dependencies
        │── GH Lib 1
        │── GH Lib 2
        │── GH Lib 3
        │── GH Lib 4
        └── My App folder

我的第二个问题与此相关的是与 git 的集成。目前所有的库都是 git 子模块,这是个好主意吗?

【问题讨论】:

标签: android gradle android-studio


【解决方案1】:

您应该查看文档中附加的布局的多项目示例。

http://tools.android.com/tech-docs/new-build-system

http://docs.google.com/viewer?a=v&pid=sites&srcid=YW5kcm9pZC5jb218dG9vbHN8Z3g6NDYzNTVjMjNmM2YwMjhhNA

本质上,您需要一个将所有部分联系在一起的顶级 settings.gradle。理想情况下,它们应该在一个 git repo 中,以使您的生活更轻松。但是,您可能可以使用符号链接将它们绑定到包含顶级 settings.gradle 的通用构建存储库中。

【讨论】:

  • 我没有注意到文档中捆绑了示例。我肯定会非常仔细地观察它们,尤其是多项目的。非常感谢!
  • 关于你对 git 的评论:git 子模块不是为那种东西而设计的吗?请参阅我的问题:stackoverflow.com/questions/16951165/…
  • 我还没有尝试过使用 git 子模块,所以我不确定它是如何工作的。
  • 好的。我现在(从 Studio 内部)收到:Gradle: FAILURE: Could not determine which tasks to execute. * What went wrong: Task 'assemble' not found in root project 'MyMine'. * Try: Run gradle tasks to get a list of available tasks.。我确实在 shell 中运行了$ ./gradlew assemble,它成功了……在工作室再次运行,仍然没有工作。
  • 你是否也有一个顶级的 build.gradle 并从顶级构建它?例如构建 lib1 ./gradlew :lib1:assemble Studio 还不能很好地处理多项目/模块。我自己也在为此苦苦挣扎。
【解决方案2】:

这种结构可以正常工作。我在 Ubuntu 13.04 和 Android Studio 130.729444 中有类似的结构并且一切正常。 您应该在根项目中提供settings.gradle 文件,其中包含应构建的每个模块的引用(基本上是相对路径)。

include ':my-app', ':gh-lib-1:library', ':gh-lib-2:library'

build.gradle 文件应包含所有项目通用的任务/配置。更多关于多项目设置的信息可以在这里找到:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Multi-project-setup

现在您的源目录位置不符合默认的 Android Studio 设置。您可以移动您的srcres 目录或在build.gradle 中设置sourceSets 配置。每个项目都应该这样做。更多项目结构:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure

完成这些步骤后,您可以尝试通过在“导入项目”对话框中选择根 build.gradle 文件来将项目导入 Android Studio。

由于Task 'assemble' not found in root project 错误,一开始您可能无法在 IDE 中构建项目。这是 Android Studio 中的 bug。幸运的是,有一个解决方法 - 只需在所有“根”项目的 build.gradle 文件中包含 task assemble{}

【讨论】:

  • 您所说的那个错误已修复。只是想对此发表评论。
猜你喜欢
  • 1970-01-01
  • 2017-08-13
  • 2020-04-11
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多