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

我试图学习Android开发,最初我被Eclipse和Android Studio之间的不同项目结构所困惑。 这使得很难遵循为Eclipsedevise的教程。 谁能让我知道为什么这些差异存在? 他们应该存在吗?

例如,如果我要在两个不同的IDE中findR.java文件,path将如下所示:

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

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

为什么这些path不同? 为什么我的R.java位于Android Studio的debugging文件夹中? 这在一开始就会导致一些错误,如果有人对这些差异有所了解,我将不胜感激。

神秘:Android Studio的项目结构和构build系统

我不知道这是否是因为Gradle Build System(我敢打赌),但是我会告诉你我到目前为止已经理解了什么。

更新4: BuildTypes添加了BuildTypesFlavorsVariants BuildTypes (我终于有信心写这个:D)
更新3: 2014/09/11更新了比较工作空间和项目
更新2: 2014/04/17增加了AS项目结构的更多细节
更新1: 2013/07/29增加了IntelliJ项目结构

IntelliJ的Project结构(显示在最后)是用于IntelliJ与android插件。 然而,Android Studio有一个像这样划分的项目结构:

结构:项目和模块

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

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

从文档 (Android Studio基于Intellij IDEA):

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

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

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

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

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

结构:文件夹结构

Android Studio项目结构

顶级文件夹

1.主要项目

这将是整个项目的上下文Eclipse土地:像你的工作空间,但只限于与你的项目有关)。 例如: HelloWorldProject如果你给的应用程序的名称是HelloWorld

2. .idea

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

3.项目模块

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

4. gradle

这是gradle构build系统的jar包装的地方,也就是这个jar是AS如何与Windows中安装的gradle进行通信的(操作系统在我的情况下)。

5.外部图书馆

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

[ 附注:在Eclipse Land中,我们许多人用来删除引用的库和修复项目属性以修复引用错误,请记住?]

详细的项目文件夹

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

build立

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

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

2.库

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

3. src

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

模块说明:

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

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

新build筑体系

用于新的生成系统的用户指南

口味和构buildtypes等的解释 – 什么是hullabaloo?

CheatSheet的风味和buildTypes

BuildType: debugrelease是所有项目默认可用的buildTypes 。 它们用于编译/编译相同的代码来生成不同的APK。 例如,在release APK上,你需要运行proguard(模糊处理),使用你的密钥(与debugging密钥相对)签名,运行优化(也许通过proguard或其他工具),使用略有不同的packageNames (我们使用com.company.product for releasecom.company.product.debug for debug )等。我们也使用一个debugging标志( BuildConfig.DEBUG )closures日志logging到logcat(因为它使应用程序变慢)。 这使得在开发过程中更快的debug版本,而且还有一个优化的release版本,以便玩游戏。

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

BuildVariant: buildVariant是生成的APK实际对应的内容。 它们被命名为(按顺序) Product Flavor + Build Type = Build Variant
例1:如果你有两种口味的freepaid 。 你会得到的构build变种是:
免费 – debugging
免费发布
付费 – debugging
付费释放
所以这是4个可能的APKconfiguration。 一些configuration在特定项目中可能没有意义,但是它们可用的。

示例2 🙁对于新项目/无风味)您有2个buildVariants或APKs可用,因为默认flavor是无名/空白:
debugging
发布

比较这与Intellij的项目结构如果有帮助:

Intellij项目结构快照

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

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

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

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

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

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

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

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

为什么这些path不同? 为什么我的R.java位于Android Studio的debugging文件夹中? 这在一开始就会导致一些错误,如果有人对这些差异有所了解,我将不胜感激。

简而言之,Android Studio被configuration为在您的系统上构build一个debugging版本types

Eclipse / ADT被devise为一次支持一个构build(从我所知道的)。 新build系统的主要目标之一( 来自用户指南 ):

 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文件夹中,因为默认情况下,新的构build系统支持debugrelease构buildtypes。 如果您更改了构build变体(AS,左下angular的button)以释放AS,则会在release目录中生成R.java

这对于简单的项目来说可能并不意味着什么,但是构build变体的支持意味着大大简化了许多开发人员的构build过程,包括我正在开发的项目。

我们的项目支持4种风格,2种构buildtypes(debugging和发布),共支持8种不同的APK组合。 而且每个组合都有略微不同的configuration,所以这个构build系统真的为我们工作。 我的android工作室安装在不同的机器上,但是如果内存正确地为我服务, R.java文件就存在于build/source/<flavor>/r/<build type>/package/R.java 。 当我们的CI服务器构buildAPK文件时,它使用这些R.java文件中的每一个来生成单独的包。

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

所以最好只适用于Android Studio的 Android开发工具,仅适用于Android M的所有未来支持—