Android studio gradle文件说明与配置

.gradle 文件简单介绍

一个 Android Studio 项目中,会存在多个 .gradle 文件。其中, project 目录下存在一个 build.gradle 文件和一个 settings.gradle 文件;每一个 module 会存在一个 build.gradle 文件。

project中的build.gradle

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

allprojects {
repositories {
    jcenter()
}
}

默认的 project 目录下的 build.gradle 文件内容如上。
buildscript :用于设置驱动构建过程的代码。
jcenter():声明使用 maven 仓库。在老版本中,此处为 mavenCentral()。
mavenCentral() :表示依赖从 Central Maven 2 仓库中获取。
jcenter() :表示依赖从 Bintary’s JCenter Maven 仓库中获取。
mavenLocal() :表示依赖从本地的Maven仓库中获取。
dependencies :声明了使用 Android Studio gradle 插件版本。一般升级AS或者导入从Eclipse中生成的项目时需要修改下面gradle版本。具体的版本对应关系,请点击。
allprojects:设置每一个 module 的构建过程。在此例中,设置了每一个 module 使用 maven 仓库依赖。

settings.gradle

include ':app'

说明:

默认的 project 目录下的 settings.gradle 文件内容如上。可有可能默认情况下, project 目录下的 settings.gradle 文件不存在,你可以自己创建。
include ‘:app’:表示当前 project 下有一个名称为 app 的 module 。

如果你的一个 module 并不是 project 根目录下,你可以这么设置。

include ':app2'
project(':app2').projectDir = new File('path/to/app2')

Module中的build.gradle

    //设置脚本的运行环境
    buildscript {
         //支持java 依赖库管理(maven/ivy),用于项目的依赖。
     repositories {
            mavenCentral()
        }
        //依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件
        dependencies {
            classpath 'com.android.tools.build:gradle:0.4'
        }
    }
    //声明构建的项目类型,这里当然是android了
    apply plugin: 'android'
    //设置编译android项目的参数
    android {
        compileSdkVersion 17
        buildToolsVersion "17"

        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 17
        }
        //Android默认配置
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
            //测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
            instrumentTest.setRoot('tests')
        }

        //这个是解决lint报错的代码
        lintOptions {
            abortOnError false
        }
        /**
         * 签名设置
         */
        signingConfigs {
            myConfigs {
                storeFile file("签名文件地址")
                keyAlias "..."
                keyPassword "..."
                storePassword "..."
            }
        }
        /**
         * 混淆设置
         */
        buildTypes {
            release {
                signingConfig signingConfigs.myConfigs
                runProguard true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        /**
         * 渠道打包(不同包名)
         */
        productFlavors {
            qqqq {
                applicationId = '包名'
            }
            hhhhh {
                applicationId='包名'
            }
        }
    }
    /**
     * .so文件的导入
     */
    task copyNativeLibs(type: Copy) {
        from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
    }

    tasks.withType(Compile) {
        options.encoding = "UTF-8"
    }

    tasks.withType(Compile) {
        compileTask -> compileTask.dependsOn copyNativeLibs
    }
    clean.dependsOn 'cleanCopyNativeLibs'
    tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
        pkgTask.jniFolders = [new File(buildDir, 'lib')]
    }
    //依赖库
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    }

一些关键词说明:
android用来指定Android打包插件的相关属性,其包含如下节点
compileSdkVersion(apiLevel):设置编译时用的Android版本
buildToolsVersion(buildToolsVersionName):设置编译时使用的构建工具的版本
defaultConfig:设置一些默认属性,其可用属性是buildTypes和ProductFlavors之和
sourceSets:配置相关源文件的位置,当你的项目的目录结构跟默认的有区别但又不想改的时候sourceSets就派上用场了
– aidl 设置aidi的目录
– assets 设置assets资源目录
– compileConfigurationName The name of the compile configuration for this source set.
– java Java源代码目录
– jni JNI代码目录
– jniLibs 已编译好的JNI库目录
– manifest 指定清单文件
– name The name of this source set.
– packageConfigurationName The name of the runtime configuration for this source set.
– providedConfigurationName The name of the compiled-only configuration for this source set.
– renderscript Renderscript源代码目录
– res 资源目录
– setRoot(path) 根目录
signingConfigs:配置签名信息
– keyAlias 签名的别名
– keyPassword 密码
– storeFile 签名文件的路径
– storePassword 签名密码
– storeType 类型
buildTypes:配置构建类型,可打出不同类型的包,默认有debug和release两种,你还可以在增加N种
– applicationIdSuffix 修改applicationId,在默认applicationId的基础上加后缀。在buildType中修改applicationId时只能加后缀,不能完全修改
– debuggable 设置是否生成debug版的APK
– jniDebuggable 设置生成的APK是否支持调试本地代码
– minifyEnabled 设置是否执行混淆
– multiDexEnabled Whether Multi-Dex is enabled for this variant.
– renderscriptDebuggable 设置生成的APK是否支持调试RenderScript代码
– renderscriptOptimLevel 设置RenderScript优化级别
– signingConfig 设置签名信息
– versionNameSuffix 修改版本名称,在默认版本名称的基础上加后缀。在buildType中修改版本名称时只能加后缀,不能完全修改
– zipAlignEnabled 设置是否对APK包执行ZIP对齐优化
– proguardFile(proguardFile) 添加一个混淆文件
– proguardFiles(proguardFileArray) 添加多个混淆文件
– setProguardFiles(proguardFileIterable) 设置多个混淆文件
productFlavors:配置不同风格的APP,在buildTypes的基础上还可以让每一个类型的APP拥有不同的风格,所以最终打出的APK的数量就是buildTypes乘以productFlavors
– applicationId 设置应用ID
– multiDexEnabled Whether Multi-Dex is enabled for this variant.signingConfig Signing config used by this product flavor.
– testApplicationId 设置测试时的应用ID
– testFunctionalTest See instrumentation.
– testHandleProfiling See instrumentation.
– testInstrumentationRunner Test instrumentation runner class name.
– versionCode 设置版本号
– versionName 设置版本名称
– minSdkVersion(int minSdkVersion) 设置兼容的最小SDK版本
– minSdkVersion(String minSdkVersion) 设置兼容的最小版本
– proguardFile(proguardFile) 添加一个混淆文件
– proguardFiles(proguardFileArray) 添加多个混淆文件
– setProguardFiles(proguardFileIterable) 设置多个混淆文件
– targetSdkVersion(int targetSdkVersion) 设置目标SDK版本
– targetSdkVersion(String targetSdkVersion) 设置目标SDK版本
testOptions:设置测试相关属性
– reportDir 设置测试报告的目录
– resultsDir 设置测试结果的目录
– aaptOptions:设置AAPT的属性
– failOnMissingConfigEntry Forces aapt to return an error if it fails to find an entry for a configuration.
– ignoreAssets Pattern describing assets to be ignore.
– noCompress Extensions of files that will not be stored compressed in the APK.
– useNewCruncher Whether to use the new cruncher.
lintOptions:设置Lint的属性
– abortOnError 设置是否在lint发生错误时终止构建
– absolutePaths Whether lint should display full paths in the error output. By default the paths are relative to the path lint was invoked from.
– check The exact set of issues to check, or null to run the issues that are enabled by default plus any issues enabled via LintOptions.getEnable() and without issues disabled via LintOptions.getDisable(). If non-null, callers are allowed to modify this collection.
– checkAllWarnings Returns whether lint should check all warnings, including those off by default.
– checkReleaseBuilds Returns whether lint should check for fatal errors during release builds. Default is true. If issues with severity “fatal” are found, the release build is aborted.
– disable The set of issue id’s to suppress. Callers are allowed to modify this collection.
– enable The set of issue id’s to enable. Callers are allowed to modify this collection. To enable a given issue, add the issue ID to the returned set.
– explainIssues Returns whether lint should include explanations for issue errors. (Note that HTML and XML reports intentionally do this – – – unconditionally, ignoring this setting.)
– htmlOutput The optional path to where an HTML report should be written.
– htmlReport Whether we should write an HTML report. Default true. The location can be controlled by LintOptions.getHtmlOutput().
– ignoreWarnings Returns whether lint will only check for errors (ignoring warnings).
– lintConfig The default configuration file to use as a fallback.
– noLines Whether lint should include the source lines in the output where errors occurred (true by default).
– quiet Returns whether lint should be quiet (for example, not write informational messages such as paths to report files written).
– severityOverrides An optional map of severity overrides. The map maps from issue id’s to the corresponding severity to use, which must be – “fatal”, “error”, “warning”, or “ignore”.
– showAll Returns whether lint should include all output (e.g. include all alternate locations, not truncating long messages, etc.)
– textOutput The optional path to where a text report should be written. The special value “stdout” can be used to point to standard output.
– textReport Whether we should write an text report. Default false. The location can be controlled by LintOptions.getTextOutput().
– warningsAsErrors Returns whether lint should treat all warnings as errors.
– xmlOutput The optional path to where an XML report should be written.
– xmlReport Whether we should write an XML report. Default true. The location can be controlled by LintOptions.getXmlOutput().
– check(id) Adds the id to the set of issues to check.
– check(ids) Adds the ids to the set of issues to check.
– disable(id) Adds the id to the set of issues to enable.
– disable(ids) Adds the ids to the set of issues to enable.
– enable(id) Adds the id to the set of issues to enable.
– enable(ids) Adds the ids to the set of issues to enable.
– error(id) Adds a severity override for the given issues.
– error(ids) Adds a severity override for the given issues.
– fatal(id) Adds a severity override for the given issues.
– fatal(ids) Adds a severity override for the given issues.
– ignore(id) Adds a severity override for the given issues.
– ignore(ids) Adds a severity override for the given issues.
– warning(id) Adds a severity override for the given issues.
– warning(ids) Adds a severity override for the given issues.
dexOptions
– incremental Whether to enable the incremental mode for dx. This has many limitations and may not work. Use carefully.
– javaMaxHeapSize Sets the -JXmx* value when calling dx. Format should follow the 1024M pattern.
– jumboMode Enable jumbo mode in dx (–force-jumbo).
– preDexLibraries Whether to pre-dex libraries. This can improve incremental builds, but clean builds may be slower.
compileOptions:设置编译的相关属性
– sourceCompatibility Language level of the source code.
– targetCompatibility Version of the generated Java bytecode.
packagingOptions:设置APK包的相关属性
– excludes The list of excluded paths.
– pickFirsts The list of paths where the first occurrence is packaged in the APK.
– exclude(path) Adds an excluded paths.
– pickFirst(path) Adds a firstPick path. First pick paths do get packaged in the APK, but only the first occurrence gets packaged.
– jacoco:设置JaCoCo的相关属性
– version 设置JaCoCo的版本
splits:设置如何拆分APK(比如你想拆分成arm版和x86版)
– abi ABI settings.
– abiFilters The list of ABI filters used for multi-apk.
– density Density settings.
– densityFilters The list of Density filters used for multi-apk.

dependencies:配置依赖

本地依赖

gradle 作为构建工具,能够很方便的使用本地jar包,以下为使用的代码块。

dependencies { 
        //单文件依赖
    compile files('libs/android-support-v4.jar')   
    //某个文件夹下面全部依赖
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {

}

远程依赖

gradle 同时支持maven,ivy,由于ivy我没用过,所以用maven 作为例子,以下为代码块:

repositories { 
        //从中央库里面获取依赖
    mavenCentral()  
    //或者使用指定的本地maven 库
    maven{
        url "file://F:/githubrepo/releases"
    }   
    //或者使用指定的远程maven库
    maven{
        url "远程库地址"
    }
}

dependencies { 
        //应用格式: packageName:artifactId:version
    compile 'com.google.android:support-v4:r13'}

android {

}

android library 依赖

对于项目依赖 android library的话,就不是依赖一个jar,那么简单了,在这里需要使用gradle mulit project 机制。在过去,android library并没有一个很好的包管理方式,简单来说,在gradle出现以前,官方并没有一种用于管理android library 依赖包的方式,一般我们都是直接下载别人的android library project 源码进行集成,而对于第三方的android-maven-plugin 用的是apklib 格式。

而现在,官方终于推出一种android library的打包格式,扩展名为.aar。前面提到,目前android gradle插件并不支持本地直接使用.aar文件,不过,支持包管理库的引用方式,下面,我为大家说一下,怎么对android library 发布使用。

打包android library

对android library 进行打包直接在library项目下面使用gradle build 即可,然后,你就会在 build/libs 目录下看到两个*.aar文件,一个debug包用的,一个是release 下用的,看个人需求使用,这里我们用的是release 版本的 .aar 文件。

引用脚本跟前面讲的依赖库相似

dependencies {
    compile(name: 'pulltorefresh', ext: 'aar')
}

你可能感兴趣的:(Android)