Android Studio项目目录结构

开始前先说下什么是Gradle

单来说Gradle就是一个新兴的项目构建工具,他有着很高的灵活度,可以满足我们很多的项目需求。关于Gradle的介绍可以看这篇博文:Gradle for Android 系列:为什么 Gradle 这么火
https://blog.csdn.net/wqc_CSDN/article/details/53572921

Project目录结构

project_constructure.png
目录文件 作用
.gradle gradle项目产生文件夹(自动编译工具产生的文件)
.idea IDEA项目文件夹(开发工具产生的文件)
app module模块
build 构建时生成文件的地方
captures 捕获系统信息的日志目录
gradle gradle环境支持文件夹
.gitignore git源码管理文件
build.gradle gradle项目自动编译的配置文件
gradle.properties gradle运行环境配置文件
gradlew 自动完成 gradle 环境的linux mac 脚本,配合gradle 文件夹使用
gradlew.bat 自动完成 gradle 环境的windows 脚本,配合gradle 文件夹使用
local.properties Android SDK NDK 环境路径配置
setting.gradle gradle 项目的子项目包含文件
Test.iml IDEA 项目文件

.gradle目录

.gradle

gradle 运行时自动生成的目录,一般情况不做修改,不需要纳入项目源代码管理中。

.idea目录

.idea

Intellij IDEA 运行时候生成的文件目录,一般情况不做修改,不需要纳入项目源代码管理中。
Intellij IDEA是JetBrains公司推出的Java集成开发环境,Android Studio是基于IDEA Commutity Edition开发的,Community 版本不仅是免费的而且是开源的。

module(app)

app

每一个module可看成在Eclipse中的一个Project,里面的文件结构与父类差不多。里面也能包含build.gradle、gradle.properties、setting.gradle 等相关gradle文件,若没有定义,则在项目中使用父类的设置。更多的内容,后面再详细介绍了。

build目录

build

编译时产生文件,不需要修改,也不需要纳入项目源代码管理中。

captures目录

captures

如右图中,使用改功能会抓取相应的信息并保存在captures目录中,不需要纳入项目源代码管理中。

gradle目录

gradle

可以看到里面wrapper目录下有两个文件,里面有一些项目对gradle的配置信息,我们来看下gradle-wrapper.properties里的内容

#Wed Oct 21 11:34:03 PDT 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip

可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本。默认的路径我们一般不会更改

.gitignore文件

git对项目文件管理,可以在里面添加你不希望纳入git管理的文件。来看一下里面的内容。

 *.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

Android Studio已经自动帮我们添加了一些不需要的文件,我们可以按照同样的格式来加入自己的文件。

build.gradle文件

项目的编译环境配置,可以说是Gradle最主要的配置文件。先来看下里面的内容。

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这里是对Project的配置,是最顶层的配置,在module中同样有一个build.gradle文件,是对module的配置,如果module里没有进行配置,将使用这里的配置信息。一个是声明仓库的源,这里可以看到是指明的jcenter(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了android gradle plugin的版本。再说一下这里,各位是否还有映像。

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha2'
    }

gradle.properties文件

配置gradle运行环境的文件,比如配置gradle运行模式,运行时jvm虚拟机的大小。在创建的项目中,暂时是没有内容的。各位参考下面的链接:
https://docs.gradle.org/current/userguide/build_environment.html
https://docs.gradle.org/current/userguide/multi_project_builds.html#sec:decoupled_projects

local.properties文件

配置android NDK,SDK的地方,非android项目可能没有这个文件,这个路径根据不同想电脑不同,一般也不会纳入源代码管理之中。

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Tue Dec 08 19:51:24 CST 2015
ndk.dir=D\:\\Tools\\android-ndk-r10
sdk.dir=D\:\\Tools\\Android-SDK

setting.gradle文件

声明当前项目中含有什么module。如果有多个module会以‘,’分开,如:include ‘:app’, ‘:app2’

include ':app'

Module目录结构

再看下Module里面的结构


Module
目录文件 作用
build module编译时所生成文件的目录
lib 第三方依赖库所在目录
src module源码所在目录
src\andrroidTest android Studio生成的测试模块,可删除
src\main module代码目录,结构和Eclipse中的差不多了
src\test 单元测试模块,可删除
.gitignore module中的git管理文件
app.iml module中的IDEA 项目文件
build.gradle module自动编译的配置文件
proguard-rules.pro module代码混淆配置文件

build目录

module的编译文件目录,编译中生成的中间文件就在这里。


build目录

我们编译最终生成的apk就在build/outputs/apk目录下,里面包含了app-debug.apk, app-debug-unaligned.apk,app-release-unaligned.apk三种apk, 另外app-release.apk是生成在module的根目录下。

lib目录

第三方库存放目录,我们可以把需要的第三方库jar文件放到这里,*.so也同样放在这里。可以在Project Structure中管理它的依赖关系,也可以在build.gradle中直接修改。

src目录

module源码目录,我们工作的主要地方,没什么好多说的了。

.gitignore文件

module模块的git管理文件,可对module单独管理。

build.gradle文件

这个文件是Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件。它的内容比较复杂,我们先来看一下

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "eric.test"
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

其中

// 这句是gradle版本的写法,声明是这是一个Android程序。
apply plugin: 'com.android.application'
Android项目中的配置:

// 编译android的sdk版本
compileSdkVersion 23
// build tools的版本
buildToolsVersion "23.0.2"
defaultConfig {
        //  应用的包名
        applicationId "eric.test"
        // 允许的最少版本
        minSdkVersion 17
        // 目标版本
        targetSdkVersion 23
        // apk的版本
        versionCode 1
        // apk的显示版本
        versionName "1.0"
    }

buildTypes {
        // 表明是在release版本中使用的配置
        release {
            // 是否运行混淆
            minifyEnabled false
            // 混淆的配置文件路径,默认给了我们两个配置文件。
            // proguard-android.txt在<sdk目录>/tools/proguard下面,里面已经包含了基本的混淆声明,有兴趣的可以去看下。
            // proguard-rules.pro是在module根目录下面,我们可以根据项目去添加。
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
依赖的配置:
// 表明是依赖库配置
dependencies {
    // 表明依赖libs目录下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // 表明在编译项目的测试代码时依赖
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

参考文章:https://blog.csdn.net/wx198210/article/details/50248915

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容