Android Studio Project目录结构解疑

你完全了解你的Android studio project项目结构目录起着什么作用么?带着总结学习的目的,来一起去了解下Android Studio Project目录和文件的结构的作用:

一、Project目录

在Android Studio中,Project目录是一个完整的APP项目,由Application的Module和一些依赖的Module组成。

1、.gradle

作用:gradle项目产生文件夹(自动编译工具产生的文件)
释义:gradle 运行时自动生成的目录,一般情况不做修改,不需要纳入项目源代码管理中。

2、.idea

作用:IDEA项目文件夹(开发工具产生的文件)
释义:Intellij IDEA 运行时候生成的文件目录,一般情况不做修改,不需要纳入项目源代码管理中。 
拓展:.idea文件夹是自动生成的用于存放Android Studio配置文件的目录,主要包括版权、检查配置、jar包信息、项目名、编译、编码、gradle、模块等。
拓展:Intellij IDEA是JetBrains公司推出的Java集成开发环境,Android Studio是基于IDEA Commutity Edition开发的,Community 版本不仅是免费的而且是开源的。

3、app

作用:工程中的模块——Module
释义:是一个可以单独运行和调试的application或公共库,一个Project中可以有多个Module。
拓展:项目中的代码、资源等内容几乎都是放置在这个目录下的,开发工作也都是在这个目录下进行的。

4、build

作用:构建时生成文件的地方
释义:工程编译目录,这个目录你也不需要过多关心,它主要包含了一些在编译时自动生成的文件。
(我新建的工程里如果没有依赖工程时没有这个文件夹,如果有有依赖工程时会出现这个文件夹,未知什么原因)

5、gradle

作用:gradle构建目录,gradle环境支持文件夹
释义:这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。Android Studio默认没有启动gradle wrapper的方式,如果需要打开,可以点击Android Studio导航栏 --> File --> Settings --> Build,Execution,Deployment --> Gradle,进行配置更改。
拓展:

gradle文件夹里面wrapper目录下有两个文件,里面有一些项目对gradle的配置信息,看下gradle-wrapper.properties里的内容:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本

6、.gitignore

作用:git源码管理文件,工程中的Git忽略配置文件。
释义:这个文件是用来将指定的目录或文件排除在版本控制之外的。
拓展:git对项目文件管理,可以在里面添加你不希望纳入git管理的文件。来看一下里面的内容:

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

Android Studio已经自动帮我们添加了一些不需要的文件,我们可以按照同样的格式来加入自己的文件。
例如:添加 /app/build/ 工程 Module中自动构建生成的build文件忽略版本控制。

7、build.gradle

作用:gradle项目自动编译的配置文件
释义:这是项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的。但为方便在不同module中设置版本号等配置信息,可以通过配置全局变量来统一所有module的公共配置信息,后期再看这块的配置方式
拓展:先来看下里面的内容。

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

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'


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

allprojects {
    repositories {
        google()
        jcenter()
    }
}

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

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

8、gradle.properties

作用:gradle运行环境配置文件
释义:这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的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

9、gradlew & gradlew.bat

作用:
gradlew:自动完成 gradle 环境的linux mac 脚本,配合gradle 文件夹使用
gradlew.bat:自动完成 gradle 环境的windows 脚本,配合gradle 文件夹使用
释义:它们分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。更多内容可以看下下面的链接,: 
http://blog.csdn.net/maserkinger/article/details/36011235

10、local.properties

作用:本地属性配置文件(key设置、androidsdk位置等属性),Android SDK NDK 环境路径配置
释义:配置android NDK,SDK的地方,非android项目可能没有这个文件,这个路径根据不同想电脑不同,一般也不会纳入源代码管理之中。
例如:sdk.dir=E\:\android_studio\android_studio\AndroidSDK

11、recyleview.iml

作用:IDEA 项目文件
释义:编译项目时生成的文件,其名为‘项目名.iml’,iml文件是Android Studio识别项目的配置文件,跟Eclipse里面的.project文件作用类似。

iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,我们不需要修改这个文件中的任何内容。

<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="recyleview" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="java-gradle" name="Java-Gradle">
      <configuration>
        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
        <option name="BUILDABLE" value="false" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>
12、setting.gradle

作用:全局配置文件,gradle 项目的子项目包含文件
释义:这个文件用于指定项目中所有引入的模块。由于项目中就只有一个app模块,因此该文件中也就只引入了app这一个模块。通常情况下模块的引入都是自动完成的,需要我们手动去修改这个文件的场景可能比较少。声明当前项目中含有什么module。如果有多个module会以‘,’分开,例如:include ‘:app’, ‘:app2’

13、External Libraries

项目中使用到的依赖库存放目录,主要有Android SDK版本和存放路径、JDK版本和存放路径、其他各种依赖库。

二、Module目录(app目录)

实质上除了app目录之外,大多数的文件和目录都是自动生成的,我们并不需要进行修改。app目录下的内容才是我们以后的工作重点,展开之后结构如下:

1、build

作用:module编译时所生成文件的目录
释义:这个目录和外层的build目录类似,主要也是包含了一些在编译时自动生成的文件,不过它里面的内容会更多更杂,我们不需要过多关系。我们编译最终生成的apk就在build/outputs/apk目录下,里面包含了app-debug.apk, app-debug-unaligned.apk,app-release-unaligned.apk三种apk, 另外app-release.apk是生成在module的根目录下。

2、libs

作用:第三方依赖库所在目录
释义: 如果你的项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。我们可以把需要的第三方库jar文件放到这里,*.so也同样放在这里。可以在Project Structure中管理它的依赖关系,也可以在build.gradle中直接修改。

3、src/androidTest

作用:android Studio生成的测试模块,可删除
释义:此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。

4、src/main/java

java目录是放置我们所有java代码的地方,该目录等同于Eclipse里面的src目录

5、src/main/res

资源文件存放目录,这个目录下的内容就有点多了。简单点说,就是你在项目中使用到的所有图片,布局,字符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下,所以你不用担心会把整个res目录弄得乱糟糟的。

6、AndroidManifest.xml

这是你整个Android项目的配置文件,你在程序中定义的所以四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。

7、test

作用:单元测试模块,可删除
释义:此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。

8、.gitignore

作用:module中的git管理文件
释义: module模块的git管理文件,可对module单独管理。这个文件用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。

9、app.iml

作用:module中的IDEA 项目文件
释义:IntelliJ IDEA项目自动生成的文件,我们不需要关心或修改这个文件中的内容。同Project中的*.iml一样。管理module的配置。

10、build.gradle

作用:module自动编译的配置文件
释义:这个文件是Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件。这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。

/*
    apply plugin:应用了一个插件,一般有两种值可选:
    1、com.android.application 表示这是一个应用程序模块
    2、com.android.library 表示这是一颗库模块
    两个最大的区别是:一个可以之间运行,一个只能作为代码库依附于别的应用程序模块来运行。
*/

apply plugin: 'com.android.application'

android {//在这个android闭包中我们可以配置项目构建的各种属性。
    compileSdkVersion 27//用于指定项目的编译版本
    buildToolsVersion "27.0.3"  //用于指定项目构建工具的版本
    defaultConfig {//在这个defaultConfig闭包中可以对项目的更多细节进行配置。
        //用于指定项目的包名,在后面修改时在这里修改
        applicationId "com.materialdesign.heiyl.recyleview"
        //用于指定项目最低兼容的android系统版本
        minSdkVersion 14
        //指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性
        targetSdkVersion 27
        //用于指定项目的版本号
        versionCode 1
        //用于指定项目的版本名
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    //在这buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个debug,一个是release
    //1.debug闭包用于指定生成测试版安装文件的配置(这个闭包可以忽略不写)
    //2.release闭包用于指定生成正式版安装文件的配置
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets { main { res.srcDirs = ['src/main/res''src/main/res/menu'] } }
}

/**
 这个dependencies闭包可以指定当前项目所有的依赖关系。
 通常android studio 项目共有3种依赖方式1.本地依赖 2.库依赖 3.远程依赖
 1.本地依赖可以对本地的jar包或目录添加依赖关系
 2.库依赖可以对项目中的库模块添加依赖关系
 3.远程依赖则可以对jcenter库上的开源项目添加依赖关系
 */

dependencies {
    //这是一个本地依赖声明,它表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:support-vector-drawable:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
}
11、proguard-rules.pro

proguard-rules.pro文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码混淆,从而让破解者难以阅读。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值