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
添加了BuildTypes
, Flavors
和Variants
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系统不是很好。
结构:文件夹结构
顶级文件夹
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
文件夹对应的java
和res
文件夹。 这是非常欢迎简化恕我直言。
模块说明:
模块就像Eclipse Land项目一样。 这里的想法是你有一个应用程序项目(上面的模块#3)和几个库项目(作为独立的模块在全球项目文件夹(上面的列表#1)),应用程序项目依赖。 这些库项目如何在其他应用程序中重用,我还没有发现。
[ 注意:整个重组有一些好处,如src文件夹中的简化,但太多的复杂性。 复杂性主要是由于这个新的项目布局非常稀薄的文档。]
新build筑体系
用于新的生成系统的用户指南
口味和构buildtypes等的解释 – 什么是hullabaloo?
CheatSheet的风味和buildTypes
BuildType: debug
和release
是所有项目默认可用的buildTypes
。 它们用于编译/编译相同的代码来生成不同的APK。 例如,在release
APK上,你需要运行proguard(模糊处理),使用你的密钥(与debugging密钥相对)签名,运行优化(也许通过proguard或其他工具),使用略有不同的packageNames
(我们使用com.company.product
for release
和com.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:如果你有两种口味的free
和paid
。 你会得到的构build变种是:
免费 – debugging
免费发布
付费 – debugging
付费释放
所以这是4个可能的APKconfiguration。 一些configuration在特定项目中可能没有意义,但是它们是可用的。
示例2 🙁对于新项目/无风味)您有2个buildVariants
或APKs可用,因为默认flavor是无名/空白:
debugging
发布
比较这与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系统支持debug
和release
构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的所有未来支持—
- 如何在Android Studio中创build库项目以及使用库项目的应用程序项目
- 通过命令行构buildAndroid Studio应用程序
- 如何为CTRL + Y而不是CTRL + Shift + ZconfigurationintelliJ / Android Studio重做操作
- 运行Android Studio时出错
- 如何在Android Studio中停止执行Gradle任务?
- Android Studio Google Map V2片段呈现
- 如何在Android Studio中添加链接的源文件夹?
- 如何在AndroidStudio中设置Java SDKpath?
- 快速search文件名Android工作室