Android Studio 项目结构(与 Eclipse 项目结构相比)

Posted

技术标签:

【中文标题】Android Studio 项目结构(与 Eclipse 项目结构相比)【英文标题】:Android Studio Project Structure (v.s. Eclipse Project Structure) 【发布时间】:2013-06-30 04:33:02 【问题描述】:

我正在尝试学习 android 开发,最初我对 Eclipse 和 Android Studio 之间的不同项目结构感到困惑。这使得学习为 Eclipse 设计的教程变得很困难。谁能让我知道为什么存在这些差异?它们应该存在吗?

例如,如果我要在两个不同的 IDE 中找到 R.java 文件,路径将如下所示:

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

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

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

【问题讨论】:

我试图在这个问题中发布图片,但我至少需要 10 个声望。一旦我符合条件,我将编辑帖子以包含图像。 你为什么不使用 Eclipse,这样你只解决 Android 特定的问题而不是 IDE 的东西(尤其是当 Android Studio 处于早期访问预览时)? 同意。除非您有至少一年的 Android 开发经验,否则恕我直言,在 Android Studio 离开“早期访问预览”模式之前,您不应该乱用它。 我要补充一点,您可以改用 IntelliJ IDEA,因为它非常稳定。此外,一旦 Android Studio 更加稳定,迁移到它将会非常容易,因为它们是相同的 IDE(AS 仅提供增强的 Android 集成)。 我在使用 Eclipse 的 Android 开发方面有 3 年的经验,我发现使用 A.Studio 很困难。我希望有人能直接回答,因为人们搬家了;我已经搬家了。我不想在开发过程中凭直觉工作。 【参考方案1】:

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

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

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

IntelliJ 的项目结构(显示在末尾)适用于带有 android 插件的 IntelliJ。然而,Android Studio 的项目结构是这样划分的:

结构:项目和模块

Android Studio 中的

module 类似于 Eclipse

中的 项目 Android Studio 中的

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

来自the documentation(Android Studio 基于 Intellij IDEA):

无论您在 IntelliJ IDEA 中做什么,都是在 项目。项目是一个组织单位,代表一个 完整的软件解决方案。

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

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

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

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

结构:文件夹结构

***文件夹

1。主要项目

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

2。 .idea

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

3。项目模块

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

4。分级

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

5。外部库

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

[旁注:这就是我们在 Eclipse Land 中的许多人用来删除引用的库并修复项目属性来修复引用错误的地方,还记得吗?]

项目文件夹详情

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

1。构建

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

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

2。库

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

3。源代码

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

模块注意事项:

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

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

新的构建系统

User Guide for the new Build System

flavors 和 buildTypes 等的解释 - hullabaloo 是关于什么的?

风味和构建类型的备忘单

BuildType: debugreleasebuildTypes 在所有项目中默认可用。它们用于构建/编译 SAME CODE 以生成不同的 APK。例如,在release APKs 上,您需要运行 proguard(用于混淆),用您的密钥签名(相对于调试密钥),运行优化(可能通过 proguard 或其他工具),使用略有不同的 packageNames(我们使用com.company.product 表示releasecom.company.product.debug 表示debug)等。我们还使用调试标志(BuildConfig.DEBUG)在release 构建上关闭对logcat 的日志记录(因为它会使应用程序变慢) .这使得开发过程中的debug 构建速度更快,同时也优化了release 构建以放入游戏商店。

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

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

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

如果有帮助,请将此与 Intellij's Project Structure 进行比较:

.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 包。

【讨论】:

非常感谢您比较 Eclipse 和 Android Studio 项目结构!是的,关于这个项目结构以及它如何在日常开发中使用的文档是不存在的。 "3.src这里,你只看到java和res文件夹..." 更准确的说,javaressrc/main下面。 这里是一些关于 Android Studio 文件夹结构的文档:developer.android.com/sdk/installing/studio-build.html【参考方案2】:

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

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

简单地说,Android Studio 被配置为在您的系统上构建一个调试 Build Type

Eclipse/ADT 旨在一次支持单个构建(据我所知)。新构建系统的主要目标之一 (from the user guide):

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 将在 release 目录中生成 R.java

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

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

【讨论】:

【参考方案3】:

Google Discontinue the support 用于 Android 开发者工具 根据我们的公告,Eclipse 中的 (ADT) 即将结束。你应该迁移 尽快将您的应用开发项目转移到 Android Studio。 有关过渡到 Android Studio 的更多信息,请参阅迁移 到 Android Studio。

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

【讨论】:

面向 Android 开发者的 Eclipse - eclipse.org/downloads/packages/…【参考方案4】:

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

Android O 最新版 Android 自动 Android 的东西 Android 穿戴 Android 电视 C++ 支持 Kotlin 支持

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

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

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

更新您的 Android Studio 3.0.1 01_2018:

工具提示:

【讨论】:

以上是关于Android Studio 项目结构(与 Eclipse 项目结构相比)的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 项目结构(与 Eclipse 项目结构相比)

ANDROID STUDIO系列教程二--基本设置与运行

移动端--基于Android Studio的项目文件结构

Android Studio目录结构和Gradle构建Android项目

Android studio导入eclipse项目且不改变目录结构

Android Studio系列教程二--基本设置与运行