Android studio的gradle目录结构

来源:互联网 发布:beatbox教学软件 编辑:程序博客网 时间:2024/05/16 18:28
  • ./build.gradle
  • ./gradle.properties
  • ./gradlew
  • ./gradlew.bat
  • ./local.properties
  • ./setting.gradle
  • ./XXX.iml
  • ./app/build.gradle
  • ./app/app.iml
  • ./app/proguard-rules.pro

gradle项目自动编译的时候要读取的配置文件。


依赖管理
支持多方式依赖管理:包括从 maven 远程仓库、 nexus 私服、 ivy 仓库以及本地文件系统的 jars 或者 dirs 。

 

AS的六种依赖:

Compile,Provided,APK,Test compile,Debug compile,Release compile

 

Compile
compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。

Provided
Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。

APK
只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错

Test compile
Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。

Debug compile
Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。

Release compile
Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。

build.grade有两个,一个是全局的,一个是在模块里面。
全局的build.grade主要设置的是声明仓库源,gradle的版本号说明等。

./build.gradle

buildscript {    repositories {//repositories 配置的是依赖管理的东西,也就是依赖管理的服务器。默认是 jcenter() 也可以添加其他,多个之间不干扰。
        // 声明仓库源,比如我们构建了一个安卓的库,现在想要把库上传到jcenter中供别人一起使用,则可以上传到jcenter中        // 具体上传步骤见:http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0227/2502.html        jcenter()    }    dependencies {        // 说明gradle的版本号        classpath 'com.android.tools.build:gradle:1.3.0'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}// 所有项目都继承这个配置allprojects {    repositories {        mavenLocal()        jcenter()    }}

./app/build.grade 设置了模块的gradle构建配置

// 说明这个模块是安卓项目,如果是多模块开发,有可能有的值为java/warapply plugin: 'com.android.application'//表示的是添加插件,其是可以理解为该 model 为一个 com.android.application 程序,也就是应用程序,如果你的 Model 是一个库,那么也就是:apply plugin: 'com.android.library'
// 配置了所有android构建的参数android {    // 编译使用SDK版本    compileSdkVersion 23    // 编译工具的版本    buildToolsVersion "23.0.1"    defaultConfig {//默认配置 也相当于全局配置,这里边配置的下面的 buildTypes 中也将自动继承了。
        // 包名        applicationId "com.awesomeproject"        // sdk最低支持版本        minSdkVersion 16        // 目标SDK版本,如果目标设备的API版本正好等于此数值,就不会为此程序开启兼容性检查判断的工作        targetSdkVersion 22        // 版本号        versionCode 1        versionName "1.0"        // 原生        ndk {            abiFilters "armeabi-v7a", "x86"        }    }    buildTypes {//编译配置
        // 发布时候的设置        release {            // 是否进行混淆            minifyEnabled false            // 混淆使用文件            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }
sourceSets { //源码设置 其是很多从 Eclipse 中迁移过来的代码,大部分中都将带有这个设置,因为 Eclipse的文件夹与 AS 不尽相同,所以需要手动指定。
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
        jniLibs.srcDirs = ['libs']
    }
 
}
compileOptions {//在这里你可以进行 Java 的版本配置,以便使用对应版本的一些新特性。
sourceCompatibility JavaVersion.VERSION_1_7     
targetCompatibility JavaVersion.VERSION_1_7 
}
lintOptions { //设置编译的 lint 开关,程序在buid的时候,会执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
    abortOnError false
}
 
 
 
 
 
 
 
 
 
 
productFlavors { //在这里你可以设置你的产品发布的一些东西,比如你现在一共软件需要发布到不同渠道,且不同渠道中的包名不同,
那么可以在此进行配置;甚至可以设置不同的 AndroidManifest.xml 文件。这个配置不常用
    flavor1 {
        packageName='com.example.qiujuer.application1'
        manifest.srcFile 'exampleapk/AndroidManifest1.xml'
    }
 
    flavor2 {
        packageName='com.example.qiujuer.application2'
        manifest.srcFile 'exampleapk/AndroidManifest2.xml'
    }
}
 
signingConfigs { //包签名配置  设置具体的签名文件,签名密码等等
    release {
        storeFile file(×.keystore)
        storePassword ×××
        keyAlias ××××
        keyPassword ×××
    }
}
//这个可以不用自己创建,你可以点击 build/generate signed apk,在其中选择你的文件或者创建签名文件,设置密码等等,然后选择记住密码,然后就会看见有这个配置了。
} 
 
// 依赖的工具包dependencies {//可以是远程依赖,也可以是本地的
    compile fileTree(dir: 'libs', include: ['*.jar'])
//这句话就是说编译时依赖 libs 文件夹下的所有 jar 文件
    compile project(':library') 
//这也是依赖,不过依赖的是一个 model ,在一个项目中可以有多个 model ,这句话的意思就是依赖一个本项目中名称为library 的 model 库。
    compile 'com.android.support:appcompat-v7:23.0.0'
//这句话也就是依赖一个远程的库了,这个库的作用是在低版本中使用一定的 Material Design 的东西。
    compile 'com.facebook.react:react-native:0.11.+'}

 

./app/proguard-rules.pro
这个和上面说的一样混淆文件

./gradle.properties
grade的运行环境配置,比如使用多少内存之类的。

./gradlew 和 ./gradlew.bat
自动完成 gradle 环境的脚本,在linux和mac下直接运行gradlew会自动完成gradle环境的搭建。

./local.properties
配置SDK或者NDK的环境路径,各个机器上这个变量可能都是不一样的,所以不应该进入版本库

./setting.gradle
整个项目的管理,比如这个项目包含哪些模块等。

./XXX.iml 和 ./app/app.iml
iml是Intellij模块文件。Intellij是一款JAVA的IDE。Android Studio是基于开源的Intellij IDEA开发出来的IDE。
所以Android Studio有的IDE功能是需要有.iml才能使用的。比如我们删除了iml文件,可能就在Android Studio中看不到一些目录了。

 

 


 

0 0