Android Studio项目结构(相对于Eclipse项目结构)


109

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


3
我试图在此问题中发布图片,但我至少需要10个声誉。合格后,我将编辑帖子以包括图像。
杰西

9
您为什么不使用Eclipse,而只解决Android特定的问题,而不解决IDE的问题(特别是因为Android Studio在 抢先体验预览中)?
Luksprog

3
同意 除非您至少有一年的Android开发经验,否则恕我直言,除非它离开“早期访问预览”模式,否则您应该不会迷惑Android Studio。
CommonsWare

2
我要补充一点,因为它非常稳定,所以可以改用IntelliJ IDEA。此外,一旦Android Studio变得更加稳定,由于它们是同一个IDE(使用AS仅提供增强的Android集成),因此向其迁移非常容易。
Free3dom

3
我在使用Eclipse的Android开发人员中有3年的经验,我发现使用A.Studio很难。我希望有人从现在开始就给我一个直接的答案。我感动了 我不想在开发过程中直觉。
Dheeraj Bhaskar

Answers:


203

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

我不知道这是否是由于Gradle Build System(我敢打赌)造成的,但是我将告诉您到目前为止我所了解的内容。

更新4: 2014/09/11为添加了备忘单BuildTypesFlavors并且Variants我终于有信心写这个:D)
更新3: 2014/09/11更新了比较工作区和项目,使其更加精确
更新2: 2014/04/17为AS项目结构添加了更多详细信息
更新1: 2013/07/29添加了IntelliJ项目结构

IntelliJ的Project结构(如最后所示)适用于带有android插件的IntelliJ。但是,Android Studio的项目结构如下所示:

结构:项目和模块

模块Android的工作室就像一个项目Eclipse中

项目Android Studio中就像是一个工作空间的Eclipse(准确地,具有相互依存的项目工作区)

文档(Android Studio基于Intellij IDEA):

无论您在IntelliJ IDEA中做什么,都可以在项目环境中进行。项目是代表完整软件解决方案的组织单位。

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

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

如果您尝试在同一项目中构建多个应用程序,则会出现多个问题。有可能,但是如果您尝试(像我一样),您会发现几乎所有内容都旨在与每个项目的单个应用程序一起使用。

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

结构:文件夹结构

Android Studio项目结构

顶级文件夹

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(本例中为OS)进行通信的方式。

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.库

这是标准的libs文件夹,你在看日食的土地

3. src

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

关于模块的注意事项:

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

[ 旁注:整个重组有一些好处,如简化src文件夹,但带来许多麻烦。造成这种复杂情况的原因主要是关于这种新项目布局的非常非常薄的文档。]

新的构建系统

新构建系统的用户指南

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

CheatSheet用于风味和buildTypes

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

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

BuildVariant: A buildVariant是生成的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文件。当前,该文件夹包含带有String资源定义的strings.xml文件。从添加颜色部分中可以看到,布局文件夹也可以包含例如颜色的描述符。

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

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


3
非常感谢您比较Eclipse和Android Studio项目的结构!是的,不存在有关该项目结构及其在日常开发中如何使用的文档。
kpsfoo 2014年

1
“3. SRC在这里,你只看到了Java和res文件夹...”更确切地说,javares正在src/main
2014年

以下是有关Android Studio文件夹结构的一些文档:developer.android.com/sdk/installing/studio-build.html
David d C e Freitas 2014年

31

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.javadebug文件位于该文件夹中,因为默认情况下,新的构建系统支持debugrelease构建类型。如果您更改了构建版本(按钮,AS的左下角)以释放AS,则会R.javarelease目录中生成。

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

我们的项目支持2种构建类型(调试和发布)的4种样式,以支持总共8种不同的APK组合。而且这些组合中的每一个都有略有不同的配置,因此该构建系统确实为我们解决了问题。我的android studio安装在另一台机器上,但是如果内存可以正确提供R.java文件,则该文件位于中build/source/<flavor>/r/<build type>/package/R.java。当我们的CI服务器生成APK文件时,它将使用这些R.java文件中的每一个生成单独的软件包。



-2

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

  • Android O最新
  • Android Auto
  • Android的东西
  • Android Wear
  • 安卓电视
  • C ++支持
  • Kotlin支持

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

最新结构如2018年Android Studio 3.0.1 01/2018中所示。

新手还可以在功能子文件夹中找到与可用类似的东西:

更新您的Android Studio 3.0.1 01_2018:

工具提示:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.