Android Studio项目结构(v.s.Eclipse项目结构)

时间:2013-07-02 17:17:31

标签: android eclipse intellij-idea android-studio

我正在尝试学习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的调试文件夹中?这会在早期导致一些错误,如果有人对这些差异有任何见解,我会很感激。

4 个答案:

答案 0 :(得分:202)

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

我不知道这是不是因为Gradle Build System(我下注了),但我会告诉你到目前为止我所理解的内容。

更新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 中的

模块就像 Eclipse中的项目

Android Studio 中的

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

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

  

无论您在IntelliJ IDEA中做什么,都可以在以下情况下执行此操作   项目。项目是代表a的组织单位   完整的软件解决方案。

     

您的成品可能会分解成一系列离散的,   孤立的模块,但它是带来它们的项目定义   在一起并将他们联系在一起。

对于Android,它表示每个应用程序一个项目,每个库和每个测试应用程序一个模块。

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

例如,有一个选项可以重建项目",这对于多个应用程序毫无意义,许多其他项目设置将毫无用处,并且内置的VCS系统不是没有用的当你有多个存储库时很棒。

结构:文件夹结构

Android Studio Project Structure

顶级文件夹

1。主项目

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

2。 .idea

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

3。项目模块

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

4。 gradle这个

这是gradle构建系统的jar包装器,即这个jar是AS如何与Windows中安装的gradle(我的操作系统)进行通信。

5。外部图书馆

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

[旁注:这里我们很多人在Eclipse Land中用来删除引用的库和Fix Project Properties来修复引用错误,还记得吗?]

详细项目文件夹

这是上面列表中的数字#3。有以下子目录

1。构建

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

在Android Studio GUI中,只显示几个文件夹。重要的是 build/source/<flavor>/r/<build type(optional)>/<package>/R.java

你的R.java在这里

2。库

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

3。 SRC

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

关于模块的说明:

模块类似于 Eclipse Land 项目。这里的想法是,您有一个应用程序项目(上面列表中的模块#3)和几个库项目(作为应用程序项目所依赖的全局项目文件夹(上面列表中的#1)下的单独模块)。这些图书馆项目如何在其他应用程序中重复使用,我仍然没有发现。

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

新建系统

User Guide for the new Build System

香精和构造类型等的说明 - 什么是hullabaloo?

用于flavor和buildTypes的CheatSheet

所有项目默认情况下

BuildType: debugrelease buildTypes可用。它们用于构建/编译 SAME CODE 以生成不同的APK。例如,在release APK上你想要运行proguard(用于混淆),用你的密钥签名(与调试密钥相对),运行优化(可能通过proguard或其他工具),使用略有不同的{{1 (packageNames使用com.company.productrelease使用com.company.product.debug等等。我们还使用调试标记(debug)来关闭日志记录log {(因为它使应用程序变慢)在BuildConfig.DEBUG版本上。这样可以在开发过程中实现更快的release构建,还可以使用优化的debug构建来构建游戏商店。

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

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

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

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

Intellij Project Structure Snapshot

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

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

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

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

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

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

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

答案 1 :(得分:31)

  

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

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

我们的项目支持4种口味,包括2种构建类型(调试和发布),以支持总共8种不同的APK组合。而且这些组合中的每一个都有略微不同的配置,因此这个构建系统真的为我们服务。我的android工作室安装在另一台机器上,但是如果内存正确地为我提供了R.java文件,build/source/<flavor>/r/<build type>/package/R.java存在R.java。当我们的CI服务器构建APK文件时,它会使用这些{{1}}文件中的每一个来生成单独的包。

答案 2 :(得分:0)

  

Google Discontinue the support适用于Android开发人员工具   根据我们的公告,Eclipse中的(ADT)即将结束。你应该迁移   您的应用开发项目会尽快投放到Android Studio。   有关转换到Android Studio的详细信息,请参阅迁移   到Android Studio。

仅适用于Android Studio的Android开发工具Android M ---

答案 3 :(得分:-2)

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

  • Android O最新
  • Android Auto
  • Android内容
  • Android穿着
  • Android TV
  • C ++支持
  • Kotlin支持

版本3.0.1中的结构并不像所有其他答案一样。

最近的结构显示在2018年,Android Studio 3.0.1 01/2018。

Newbie kinda在功能子文件夹中找到了类似于可用的东西:

更新您的Android Studio 3.0.1 01_2018:

工具提示: