110

I'm trying to learn android development and I am initially confused by the different project structures between Eclipse and Android Studio. This makes it difficult to follow tutorials designed for Eclipse. Could anyone let me know why these differences exist? Should they exist?

For instance, if I were to locate the R.java file in the two different IDEs, the paths would look like this:

Eclipse: app\gen\com.example.app\R.java

Android Studio: app\build\source\r\debug\com.example.app\R.java

Why are these paths different? Why is my R.java located in a debug folder in Android Studio? This lead to some errors early on, and if anyone has any insight into these differences I would appreciate them.

4

4 回答 4

204

谜底:Android Studio 的项目结构和构建系统

我不知道这是否是因为 Gradle 构建系统(我敢打赌),但我会告诉你到目前为止我所理解的。

更新 4: 2014/09/11 添加了备忘单,并且BuildTypes(我终于有信心写这篇文章了:D)更新 3: 2014/09/11 更新了比较工作区和项目以准确更新 2: 2014/04/17为 AS 项目结构添加了更多细节更新 1: 2013/07/29 添加了 IntelliJ 项目结构 FlavorsVariants


IntelliJ 的项目结构(最后显示)适用于带有 android 插件的 IntelliJ。然而,Android Studio 的项目结构划分如下:

结构:项目和模块

Android Studio中的模块就像Eclipse中的项目

Android Studio中的项目就像Eclipse中的工作区(准确地说,是一个项目相互依赖的工作区)

文档(Android Studio 基于 Intellij IDEA):

无论您在 IntelliJ IDEA 中做什么,都是在项目的上下文中执行的。项目是代表完整软件解决方案的组织单元。

您的成品可能会分解成一系列离散的、孤立的模块,但它是一个项目定义,将它们组合在一起并将它们联系成一个更大的整体。

对于 Android,这意味着每个应用程序一个项目,每个库和每个测试应用程序一个模块。

如果您尝试在同一个项目中构建多个应用程序,则会出现多个问题。这是可能的,但如果你尝试(像我一样),你会发现几乎所有的东西都是为每个项目使用一个应用程序而设计的。

例如,有一个“重建项目”的选项,这对多个应用程序没有意义,许多其他项目设置将无用,并且当您有多个存储库时,内置的 VCS 系统不是很好。

结构:文件夹结构

Android Studio 项目结构

顶级文件夹

一、主要项目

这将是整个项目上下文Eclipse Land:就像您的工作区,但仅限于与您的项目相关的内容)。例如:HelloWorldProject如果您提供的应用程序名称是HelloWorld

2.想法

Android Studio (AS) 存储项目特定元数据的位置。(Eclipse Land: project.properties文件)

3.项目模块

这是实际的项目。例如:HelloWorld如果您提供的应用程序名称是 HelloWorld

4.毕业

这是 gradle 构建系统的 jar 包装器的地方,即这个 jar 是 AS 与安装在 Windows(在我的情况下是操作系统)中的 gradle 通信的方式。

5. 外部库

这实际上不是一个文件夹,而是一个显示引用库(Eclipse Land: Referenced Libraries)的地方。这是显示目标平台的位置等。

[旁注:我们在 Eclipse Land 中的许多人曾经删除引用的库并修复项目属性以修复引用错误,记得吗?]

项目文件夹详细信息

这是上面列表中的第 3 号。有以下子目录

1. 构建

这包含make进程的所有完整输出,即 classes.dex、编译的类和资源等。

在 Android Studio GUI 中,只显示了几个文件夹。重要的部分是您的 R.java 可以在下面找到build/source/<flavor>/r/<build type(optional)>/<package>/R.java

2.库

这也是您在eclipse中看到的标准 libs 文件夹

3.源

在这里,您只能看到javaEclipse Land中的文件夹和文件res夹相对应的和文件夹。这是非常受欢迎的简化恕我直言。srcres

模块注意事项:

模块就像Eclipse Land项目。这里的想法是你有一个应用程序项目(上面列表中的模块#3)和几个库项目(作为全局项目文件夹下的单独模块(上面列表中的#1)),应用程序项目依赖于它们。这些库项目如何在其他应用程序中重用,我还没有发现。

[旁注:整个重组有一些好处,比如简化 src 文件夹,但有很多复杂性。复杂性主要是由于这个新项目布局的文档非常薄。]

新的构建系统

新构建系统用户指南

口味和构建类型等的解释 - 喧嚣是什么?

风味和构建类型的备忘单

BuildType: debug默认情况下在所有项目中releasebuildTypes可用。它们用于构建/编译相同的代码以生成不同的 APK。例如,在releaseAPKs 上你会想要运行 proguard(用于混淆),用你的密钥签名(相对于调试密钥),运行优化(可能通过 proguard 或其他工具),使用略有不同packageNames(我们使用com.company.productforreleasecom.company.product.debugfor debug),等等。我们还使用调试标志 ( BuildConfig.DEBUG) 来关闭release构建时对 logcat 的日志记录(因为它会使应用程序变慢)。这使得debug开发过程中的构建速度更快,但也可以优化release构建以放入 Play 商店。

产品风味:没有可用的默认风味(或者准确地说,默认风味是空白/无名)。Flavors可以是免费版本付费版本,它们有不同的代码。它们共享相同的Main代码,但一些源代码文件或资源的版本不同(或没有版本)。

BuildVariant: AbuildVariant是生成的 APK 实际对应的内容。它们的名称如下(按顺序)Product Flavor+ Build Type=Build Variant
示例 1:如果您有freepaid作为两种口味。您将获得的构建变体是:
免费 - 调试
免费 - 发布
付费 - 调试
付费 - 发布
所以这是 4 种可能的 APK 配置。一些配置在特定项目中可能没有意义,但它们可用的。

示例 2:(对于新项目/无风味)您有 2 个buildVariants或 APK 可用,因为默认风味是无名/空白:
调试
版本

如果有帮助,请将此与Intellij 的项目结构进行比较:

Intellij 项目结构快照

.idea(1)文件夹包含多个子文件夹,主要包含 IntelliJ IDEA 内部信息。

src (2)文件夹包含实现应用程序功能的 MyActivity.java (3) 文件源代码。该文件属于 com.example 包。

res (4)文件夹包含各种视觉资源。

layout/main.xml 文件 (5)定义了由各种类型的资源构成的应用程序的外观。

values 文件夹 (6)用于存储描述各种类型资源的 .xml 文件。目前,该文件夹包含一个带有字符串资源定义的 strings.xml 文件。正如您将在“添加颜色”部分看到的那样,布局文件夹还可以包含例如颜色描述符。

可绘制文件夹 (7)包含图像。

gen (8) 文件夹包含链接可视资源和 Java 源代码的R.java (9)文件。正如您将在下面的部分中看到的,IntelliJ IDEA 支持静态资源和 R.java 之间的紧密集成。只要添加或删除任何资源,R.java 中相应的类和类字段就会相应地自动生成或删除。R.java 文件也属于 com.example 包。

于 2013-07-16T18:15:02.087 回答
32

Android Studio:app\build\source\r\debug\com.example.app\R.java

为什么这些路径不同?为什么我的 R.java 位于 Android Studio 的调试文件夹中?这会在早期导致一些错误,如果有人对这些差异有任何见解,我将不胜感激。

简而言之,Android Studio 被配置为在您的系统上构建一个调试构建类型。

Eclipse/ADT 旨在一次支持单个构建(据我所知)。新构建系统的主要目标之一(来自用户指南):

Make it easy to create several variants of an application, 
either for multi-apk distribution or for different flavors of an application

因此 Eclipse/ADT 可以生成一个R.java文件,而 Android Studio 支持多个。生成R.java的文件位于debug文件夹中,因为默认情况下,新的构建系统支持debugrelease立即构建类型。如果您将构建变体(按钮,AS 的左下角)更改为发布,AS 将R.javarelease目录中生成。

这对于简单的项目可能没有任何意义,但是Build Variants的支持意味着对许多开发人员(包括我正在处理的项目)的构建过程的极大简化。

我们的项目支持 4 种风格和 2 种构建类型(调试和发布),总共支持 8 种不同的 APK 组合。这些组合中的每一个都有略微不同的配置,所以这个构建系统真的很适合我们。我的 android studio 安装在另一台机器上,但如果内存正确,该R.java文件存在于build/source/<flavor>/r/<build type>/package/R.java. 当我们的 CI 服务器构建 APK 文件时,它使用这些R.java文件中的每一个来生成单独的包。

于 2013-07-17T17:35:06.797 回答
0

根据我们的公告, Google将终止对Eclipse 中的 Android 开发人员工具 (ADT) 的支持。您应该尽快将您的应用开发项目迁移到 Android Studio。有关过渡到 Android Studio 的更多信息,请参阅迁移到 Android Studio。

因此,最适合Android Studio的 Android 开发工具仅适用于Android M的所有未来支持---

于 2015-08-10T14:48:40.003 回答
-2

对于 android Studio 3.0.1 并选择了所有功能:

  • Android O 最新版本
  • 安卓汽车
  • 安卓的东西
  • 安卓穿戴
  • 安卓电视
  • C++ 支持
  • Kotlin 支持

3.0.1 版中的结构与所有其他答案完全不同。

最近的结构如 2018 年所示,Android Studio 3.0.1 01/2018。

新手在功能子文件夹中发现了类似于可用的东西:

更新您的 Android Studio 3.0.1 01_2018:

工具提示:

于 2018-01-15T20:41:36.563 回答