我正在尝试学习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的调试文件夹中?这会在早期导致一些错误,如果有人对这些差异有任何见解,我会很感激。
答案 0 :(得分:202)
我不知道这是不是因为Gradle Build System(我下注了),但我会告诉你到目前为止我所理解的内容。
更新4: 2014/09/11为BuildTypes
,Flavors
和Variants
添加备忘单(我终于感受到了有信心写这个:D)
更新3: 2014/09/11更新了比较工作空间和项目,以确保准确
更新2: 2014/04/17向AS项目结构添加了更多详细信息
更新1: 2013/07/29添加了IntelliJ项目结构
IntelliJ的项目结构(最后显示)适用于带有android插件的IntelliJ。但是,Android Studio的项目结构如此划分:
模块就像 Eclipse中的项目
Android Studio 中的项目就像 Eclipse 中的工作区(确切地说,是一个相互依赖的工作区)项目)
来自the documentation(Android Studio基于Intellij IDEA):
无论您在IntelliJ IDEA中做什么,都可以在以下情况下执行此操作 项目。项目是代表a的组织单位 完整的软件解决方案。
您的成品可能会分解成一系列离散的, 孤立的模块,但它是带来它们的项目定义 在一起并将他们联系在一起。
对于Android,它表示每个应用程序一个项目,每个库和每个测试应用程序一个模块。
如果您尝试在同一个项目中构建多个应用,则会出现多个问题。这是可能的,但如果你尝试(就像我一样),你会发现几乎所有东西都是为每个项目的单个应用程序而设计的。
例如,有一个选项可以重建项目",这对于多个应用程序毫无意义,许多其他项目设置将毫无用处,并且内置的VCS系统不是没有用的当你有多个存储库时很棒。
这将是整个项目背景( Eclipse Land:与您的工作区一样,但仅限于与您的项目相关的内容)。例如:HelloWorldProject
如果您提供的应用程序名称为HelloWorld
这是Android Studio(AS)存储项目特定元数据的地方。 ( Eclipse Land: project.properties
文件)
这是实际项目。例如:HelloWorld
如果您提供的应用程序名称是HelloWorld
这是gradle构建系统的jar包装器,即这个jar是AS如何与Windows中安装的gradle(我的操作系统)进行通信。
这实际上不是一个文件夹,而是显示引用库( Eclipse Land:引用的库)的地方。这里展示了目标平台等。
[旁注:这里我们很多人在Eclipse Land中用来删除引用的库和Fix Project Properties来修复引用错误,还记得吗?]
这是上面列表中的数字#3。有以下子目录
这具有make
进程的所有完整输出,即classes.dex,已编译的类和资源等。
在Android Studio GUI中,只显示几个文件夹。重要的是 build/source/<flavor>/r/<build type(optional)>/<package>/R.java
这是您在 eclipse land 中看到的标准libs文件夹
在这里,您只能看到与{strong> Eclipse Land 中的java
文件夹和res
文件夹对应的src
和res
文件夹。这是非常欢迎的简化恕我直言。
模块类似于 Eclipse Land 项目。这里的想法是,您有一个应用程序项目(上面列表中的模块#3)和几个库项目(作为应用程序项目所依赖的全局项目文件夹(上面列表中的#1)下的单独模块)。这些图书馆项目如何在其他应用程序中重复使用,我仍然没有发现。
[旁注:整个重组有一些好处,比如src文件夹中的简化,但是有很多复杂因素。复杂性主要是由于非常非常这个新项目布局的精简文档。]
User Guide for the new Build System
BuildType: debug
和release
buildTypes
可用。它们用于构建/编译 SAME CODE 以生成不同的APK。例如,在release
APK上你想要运行proguard(用于混淆),用你的密钥签名(与调试密钥相对),运行优化(可能通过proguard或其他工具),使用略有不同的{{1 (packageNames
使用com.company.product
,release
使用com.company.product.debug
等等。我们还使用调试标记(debug
)来关闭日志记录log {(因为它使应用程序变慢)在BuildConfig.DEBUG
版本上。这样可以在开发过程中实现更快的release
构建,还可以使用优化的debug
构建来构建游戏商店。
产品风味:没有可用的默认风格(或者确切地说,默认风格为空白/无名)。 release
可以是免费版或付费版,其中不同代码。它们共享相同的Flavors
代码但是一些源代码文件或资源的不同版本(或没有版本)。
BuildVariant: Main
是生成的APK实际对应的内容。它们的名称如下(按顺序) buildVariant
+ Product Flavor
= Build Type
。
示例1:如果您有Build Variant
和free
两种风格。您将获得的构建变体是:
免费 - 调试
免费发布
付费 - 调试
付费 - 释放
这是4种可能的APK配置。在特定项目中,一些配置可能没有意义,但它们 可用。
示例2:(对于新项目/没有风味)您有2个paid
或APK可用,因为默认风格是无名/空白:
调试
发布
.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
文件夹中,因为默认情况下,新构建系统支持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
存在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并选择了所有功能:
版本3.0.1中的结构并不像所有其他答案一样。
最近的结构显示在2018年,Android Studio 3.0.1 01/2018。
Newbie kinda在功能子文件夹中找到了类似于可用的东西:
更新您的Android Studio 3.0.1 01_2018:
工具提示: