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

Jes*_*sse 108 eclipse android 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的调试文件夹中?这会在早期导致一些错误,如果有人对这些差异有任何见解,我会很感激.

Dhe*_*kar 203

神秘之处:Android Studio的项目结构和构建系统

我不知道这是不是因为Gradle Build System(我打赌它是),但我会告诉你到目前为止我所理解的内容.

更新4: 2014年9月11日添加小抄为BuildTypes,Flavors和Variants(I终于感到自信地写:d)
更新3: 2014/09/11更新的比较工作区和项目要精确
更新2: 2014年4月17日向AS项目结构添加了更多细节
更新1: 2013/07/29添加了IntelliJ项目结构

IntelliJ的项目结构(最后显示)适用于带有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

gradle

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

5.外部图书馆

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

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

项目文件夹详细信息

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

建设

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

在Android Studio GUI中,仅显示几个文件夹.最重要的部分是你的R.java可以在这里找到下build/source/<flavor>/r/<build type(optional)>/<package>/R.java

2. libs

这是你在看到标准的libs文件夹月食土地太

src

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

关于模块的说明:

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

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

新建系统

新构建系统的用户指南

味道和构建类型等的解释 - 什么是hullabaloo?

用于flavor和buildTypes的CheatSheet

BuildType: debug和release是buildTypes默认可用在所有项目上.它们用于构建/编译SAME CODE以生成不同的APK.例如,在releaseAPK上你想要运行proguard(用于混淆),用你的密钥签名(与调试密钥相对),运行优化(可能通过proguard或其他工具),使用略有不同packageNames(我们使用com.company.productfor release和com.company.product.debugfor debug),我们还使用调试标志(BuildConfig.DEBUG)在release构建时关闭日志记录(因为它使应用程序变慢).这样可以debug在开发过程中实现更快的构建,同时还可以优化release构建以放置游戏存储.

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

BuildVariant: A buildVariant是生成的APK实际对应的内容.它们的命名如下(按顺序)Product Flavor+ Build Type=Build Variant.
例1:如果你有free和paid两种口味.您将获得的构建变体是:
免费 - 免费调试
- 发布
付费 - 调试
付费 - 发布
这是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)文件夹包含链接可视资源和Java源代码的R.java(9)文件.正如您将从以下部分中看到的,IntelliJ IDEA支持静态资源和R.java之间的紧密集成.只要添加或删除任何资源,就会自动生成或删除R.java中相应的类和类字段.R.java文件也属于com.example包.

  • 非常感谢您比较Eclipse和Android Studio项目结构!是的,关于这个项目结构的文档以及它在日常开发中的使用方式是不存在的. (3认同)

Joe*_*Joe 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
Run Code Online (Sandbox Code Playgroud)

因此,Eclipse/ADT可以生成一个R.java文件,Android Studio支持多个文件.生成R.java的debug文件位于该文件夹中,因为默认情况下,新的构建系统支持debug并release构建类型.如果您更改了构建变量(按钮,AS的左下角)以释放AS将R.java在release目录中生成.

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

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