AndroidStudio的目录文件

①.gradle和②.idea目录

①和②目录下都是AndroidStudio自动生成的一些文件,无需手动编辑,我们在此略过

③app目录

③目录下放置项目的代码、资源、清单文件

(3.1)build目录

项目在编译时自动生成的文件

(3.2)libs目录

项目中使用的第三方jar包放在此libs目录下,jar包会自动添加到构建路径里去

(3.3)src目录

存放项目中的java代码

(3.4).gitignore文件

用来指定不被添加到版本控制中的目录或文件

(3.5)app.iml

自动生成的文件,用以标示此项目是基于IntelliJ IDEA开发的

(3.6)build.gradle文件

这个是app模块的gradle构建脚本,这个文件中共会指定很多项目构建相关的配置

(3.7)proguard-rules.pro文件

用来指定项目代码的混淆规则

④build目录

项目在编译时自动生成的文件

⑤gradle目录

这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle

⑥havorldlibrary目录

项目中使用的第三方的library库,需要手动添加到项目中

⑦.gitignore文件

用来指定目录或文件排除在版本控制之外

⑧AndroidStudioDirectoryDemo.iml文件

自动生成的文件,用以标示此项目是基于IntelliJ IDEA开发的

⑨build.gradle文件

项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改吧

⑩gradle.properties文件

这个是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有gradle编译脚本

⑪gradlew文件和⑫gradlew.bat文件

是用来在命令行界面中执行gradle命令的,其中gradle是在Linux或Mac系统中使用,gradlew.bat是在Windows系统中使用

⑬local.properties文件

用来指定本机Android SDK路径

⑭settings.gradle

这个文件是用于指定项目中所有引入的模块

include ':app', ':havorldlibrary'

build.gradle文件详解

Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置。摒弃了产痛基于XML(如Ant和Maven)的各种繁琐配置。

  • 先来分析⑨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.1.3'

            // 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
    }

有两处配置的jcenter()方法,jcenter()是一个代码托管仓库,很多Android开源项目都会选择把代码托管到jcenter上,声明了这行配置后我们就可以在项目中轻松引用任何jcenter上的开源项目了。

  • 再来分析(3.6)build.gradle内层的gradle:
apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"

        defaultConfig {
            applicationId "com.havorld.directorydemo"
            minSdkVersion 14
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

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

第一行的声明:
一般情况下有两种

1、apply plugin: 'com.android.application'  //表示一个应用程序模块
2、apply plugin: 'com.android.library'      //表示一个库模块(如havorldlibrary中的声明)

defaultConfig中的声明:

applicationId:      用于指定项目的包名
versionCode:        用于指定项目的版本号
versionName:        用于指定项目的版本名 
compileSdkVersion:  用于指定项目的编译版本
buildToolsVersion:  用于指定项目构建工具的版本
minSdkVersion:      用于指定项目最低兼容的Andriod版本
targetSdkVersion:   用于指定在该版本上已经做过了充分测试,系统会为你的应用启用一些新的功能和特性。
如:把targetSdkVersion设置为23(Android6.0)或者更高系统就会为你的程序启用运行时权限,而如果把targetSdkVersion设置为22那就说明你的程序只在Android5.1版本上做过充分测试,Android6.0中启用的新功能运行时权限就不会启用了

buildTypes中的声明:
buildTypes是用于生成安装文件的相关配置,于通常会有两个闭包,一个debug用于生成测试版安装文件的配置,一个release用于生成正式版版安装文件的配置。其中debug的闭包可以省略不写,因此我们只能看到一个release闭包。AndroidStudio直接运行的项目生成的都是测试版的安装文件。

minifyEnabled: 用于指定是否对代码进行混淆。true为混淆,false为不混淆。
proguardFiles:用于指定混淆时使用的规则文件,"proguard-android.txt"位于Android SDK目录下里面是所有项目通用的混淆规则,"proguard-rules.pro"是在当前根目录下里面可以编写当前项目特有的混淆规则。

dependencies中的声明:
dependencies中可以指定当前项目中所有的依赖关系,一般情况下有四种依赖方式:

本地依赖(compile fileTree):将本地的jar包或目录添加到项目的构建路径中
测试用例依赖(testCompile):将测试用例库添加到项目的构建路径中
库依赖(compile project):将项目中的库模块添加到项目的构建路径中
远程依赖(compile):将jcenter库上的开源文件添加到项目的构建路径中,Gradle会先检查本地是否有这个库的缓存,如果没有自动去网上下载