apply plugin: 'com.android.application'android {    compileSdkVersion 25    buildToolsVersion "25.0.3"    defaultConfig {        /**         * 属性的配置         */        applicationId "cct.cn.gradle.lsn13"        applicationIdSuffix "" // applicationId的后缀  最后组成的是cct.cn.gradle.lsn13.suffix        minSdkVersion 14        targetSdkVersion 25        versionCode  1        versionName "1.0"        versionNameSuffix ".12"  // versionName  最后组成的是1.0.12        //manifest占位符 给manifest传递变量        manifestPlaceholders = [key:'xyz']        //65535问题 0xffff是否开启分包dex        multiDexEnabled true        //每一行表示要配置到主dex的一个类 com/a/c/c.class 配置分包规则        multiDexKeepFile file('keep_in_main.txt')        //-keep com.a.b.c.**{*;} proguard写法的的分包规则        multiDexKeepProguard        //测试引擎        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        //配置ndk的一些规则        externalNativeBuild {            cmake {                cppFlags "-frtti -fexceptions"            }            //配置Gradle 构建时需要的.so动态库            // Gradle会构建那些 ABI 配置,但是只会将 defaultConfig.ndk {} 代码块中指定的配置打包到 apk 中            ndkBuild{                abiFilters 'armeabi','armeabi-v7a'            }        }        //指打包到apk里面的.so包种类        ndk{            abiFilters 'armeabi','armeabi-v7a'        }        //支持svg        vectorDrawables{            //如果minsdk小于21 会在mdpi的目录png图片            generatedDensities 'mdpi'            //如果设置为true 引入svg兼容包 不会再去管generatedDensities配置            // 建议只选下面这个就好了 丢弃generatedDensities            useSupportLibrary true        }        //能支持部分java8的特性 比如lambda        jackOptions {            enabled false        }        //可以配置Java的一些方法  比如apt注解处理器        javaCompileOptions{        }        /**         * 下面是方法使用         */        //配置在build/generated/source/buildConfig/ 下面有个BuildConfig文件下的属性        buildConfigField('boolean','IS_RELEASE','false')        //  res/value 设置一个值  之后就而已调用R.string.lin了        //  生成的结果是linyao        resValue('string','lin','linyao')    }    /**     * 创建两个维度 维度是配合 productFlavors一起使用的     * 下面一个时产品维度  一个时动态库维度     */    flavorDimensions('product','abi')    /**     * 创建产品风味 相当于集成了defaultConfig的属性  这里可以修改自己风味(变体)的属性     * 不同的维度的风味结合在一起 组成一个apk的配置信息     */    productFlavors{        free{            dimension 'product'            //这个属性是覆盖defaultConfig的            manifestPlaceholders = [key: '66']            //这个两个是追加在defaultConfig的            applicationIdSuffix ""            versionNameSuffix ".16"        }        pro{            dimension 'product'            manifestPlaceholders = [key: 'product']        }        x86{            dimension 'abi'        }        arm{            dimension 'abi'        }    }    /**     *    过滤风味(变体) 下面例子过滤pro变体     */    variantFilter{        variant ->            variant.flavors.each{                if(it.name.contains('pro')){                    setIgnore(true)                }            }    }    /**     * 配置签名文件 里面可以配置多个签名文件     */    signingConfigs{        mySign{            //签名文件的路径            storeFile file('debug.keystore')            //签名文件密码            storePassword 'android'            //别名            keyAlias 'androiddebygkey'            //key的密码            keyPassword 'android'        }    }    /**     * 变体     * buildTypes和defaultConfig继承自同一个类 很多东西两者都可以配置     */    buildTypes {        release {            //选择配置的签名文件//            signingConfig signingConfigs.mySign            //proguard 优化是否开启 true的时候会进行代码混淆 并优化代码 去掉多余无用的类            minifyEnabled true            //将下面两个混淆文件都放在混淆文件proguardFiles中            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            //优化压缩资源文件 和minifyEnabled配合使用 必须开启混淆 这个可以减少apk的大小            shrinkResources true        }        debug{            /**             * 属性             */            //和defaultConfig中配置是一样的  这个会累加到defaultConfig中配置的applicationId后面            applicationIdSuffix ''            //版本名字后缀,用法同上            versionNameSuffix '.1'            //生成的apk是否可以调试 默认是true            debuggable true            //是否可以调试NDK代码 使用lldb进行c和c++代码调试            jniDebuggable true            //帮助国际化的东西 然而并没有什么用 会多几个string的国际化的数据            pseudoLocalesEnabled false            //是否开启渲染脚本 就是一些c写的渲染方法            renderscriptDebuggable false            //渲染脚本等级 默认是5            renderscriptOptimLevel 5            //用jacoco 报告测试覆盖率的 必须是机器测试不能是本地测试(要在test文件加下 不能是androidTest文件夹)            testCoverageEnabled false            //优化 默认就是true app对齐            zipAlignEnabled true            /**             * 方法             */            //配置在build/generated/source/buildConfig/ 下面有个BuildConfig文件下的属性            buildConfigField('boolean','IS_RELEASE','false')        }        hello{            //就是集成子debug 集成debug所有的配置            initWith debug        }    }    /**     * 设置构建ndk的CMakeLists文件     */    externalNativeBuild {        cmake {            path "CMakeLists.txt"        }    }    /**     * 打包时候用的 Android资源文件编译工具     */    aaptOptions{        //aapt执行时的额外参数 例如下面就是增加一条修改AndroidManifest包名的一条密令        //还可以在参数后面加 '-S','src/main/res2','--auto-add-overlay'实现重叠包,这样res 和res2里面的资源会叠加        //如果有重复的 以res为准        additionalParameters '--rename-manifest-package',                'cct.cn.gradle.lsn13','-S','src/main/res2','--auto-add-overlay'        //对png进行优化检查 默认true        //比如把.jpg格式图片改成.png后缀 那开启这个检查后编译就会报错 能够把这个错误检测出来        cruncherEnabled true        //对res目录下的资源文件进行排除 比如下面的写法 就不会把res文件夹下面的所有.jpg格式的文件打包到apk中        //注意: 这个只排除res目录下的文件  不排除assets目录下的        ignoreAssets '*.jpg'        //对资源文件不进行压缩 默认是对.png .jpg等文件不压缩 对.xml等文件都进行压缩        //如果写成空字符串 '' 则对所有文件都不压缩        //下面是表示对所有.bat文件不进行压缩        //运用 aapt l -v app/build/outputs/apk/app-debug.apk 可以查看这个apk的资源文件的压缩情况        noCompress '.bat'    }    /**    * 资源合并规则 下面是规则 前面的会覆盖后面的    * Variant(freeDebug变体文件) > buildType(Debug) > flavor(hello) > (main >aapt -S) > dependencies    * /    /**     * 资源整合     */    sourceSets{        main{            //这里如果res和myres中有冲突资源会报错  不像aapt里面会议res优先            res.srcDirs 'src/main/res','src/main/myres'            //把lib里面的资源整合到jniLibs里 指定.so文件目录            jniLibs.srcDirs = ['libs']            //下面是所有可以指定的目录 可以自己更改            aidl.srcDirs 'src/main/aidl'            assets.srcDirs 'src/main/assets'            java.srcDirs 'src/main/java'            jni.srcDirs 'src/main/jni'            renderscript.srcDirs 'src/main/renderscript' // 渲染脚本目录            resources.srcDirs 'src/main/resources'            //这个是指定manifest文件 不是指定目录            manifest.srcFile 'src/main/AndroidManifest.xml'            //这个就是main 名字 跟release debug 一样            name            //下面的不需要考虑            compileConfigurationName //compile编译+打包的依赖配置组的名字 这个不能改 也没啥用            packageConfigurationName //apk 打包            providedConfigurationName // provided 编译        }        //不仅仅可以指定main里的目录配置 还可以指定风味的配置(比如多渠道打包)        //如果打的包是free风味包 那出来的apk会把free目录里的文件叠加到main里        free{        }    }    /**     * adb命令的一些操作     */    adbOptions{        //调用adb install命令时可以传递的参数        //例如: 调用adb install -d 可以安装低版本的apk  -r 替换已经存在的application        installOptions '-d'        //执行adb命令的时候设定的一个超时时间 单位毫秒        timeOutInMs 1000    }    /**     *  编译的一些配置     */    compileOptions{        //java源文件的编码格式 默认UTF-8        encoding 'UTF-8'        //java编译是否使用gradle新的增量模式 (这个就不需要管它了)        incremental true        //java源文件编译的jdk版本 默认是1.6 也可以指定1.7        //但是不能指定1.8 除非开启了jackOptions  下面这个两个属性也没什么用 开启了jack自然可以用1.8的特性了        sourceCompatibility JavaVersion.VERSION_1_7        //编译出的class的版本        targetCompatibility JavaVersion.VERSION_1_7    }    /**     *  android提供的view和数据绑定的工具     *  详细用法见官网http://developer.android.com/:搜索dataBinding     */    dataBinding {        enabled true    }    /**     * dx配置 打包时的分包工具     */    dexOptions{        //指定附加的参数 像aaptOptions的additionalParameters  使用dx命令        //和multiDexEnabled multiDexKeepFile配合使用 --main-dex-list命令会读取multiDexKeepFile指定的keep文件        //--minimal-main-dex 表示设置主dex尽量最小 这样就算方法数不到65535 也可以开启分包        //--set-max-idx-number 表示单个dex里面的最多id数 这样就会打出很多的dex包        additionalParameters '--minimal-main-dex','--set-max-idx-number=10000'        //执行dx时java虚拟机需要的内存大小 如果报内存不够错误  可以把下面的数字变大点        javaMaxHeapSize '2048m'        //开启大模式 dex大 如果=true 编译出的dex能够尽量大 存放更多的类        jumboMode true        //在dex中是否保留Runtime注解 默认是true        keepRuntimeAnnotatedClasses true        //默认dex中的进程数  默认是4  也没有必要修改        maxProcessCount 4        //默认的线程数        threadCount 4        //对library预编译 提高编译效率 但是会使clean的时候比较慢  默认开启的        preDexLibraries true    }    /**     * lint工具配置 lint工具帮助发现并纠正代码结构质量 检查未使用的资源     */    lintOptions{        //默认true 表示当执行lint过程中发现错误 就停止构建        abortOnError true        //检测出错误时 输出绝对路径        absolutePaths true        //指定检测的id 设置这个属性后  只检测这一个id//        check 'UnusedResources'        //是否检查所有警告        checkAllWarnings false        //在release的buildType下是否检查fatal错误 如果有fatal错误 则会停止构建 默认true        checkReleaseBuilds true        //开启某一个id的检查        enable 'UnusedResources'        //关闭某一id的检查        disable 'UnusedResources'        //html的输出文件 传递一个文件//        htmlOutput        //执行检查的报告 是否需要生成 htmlOutput报告 默认true        htmlReport true        //xml的输出文件 传递一个文件//        xmlOutput        //执行检查的报告 是否需要生成xml报告 默认true        xmlReport true        //传入需要输出文本报告的的文件        textOutput        //是否输出文不报告 默认false        textReport false        //是否将警告变成错误        warningsAsErrors false        //是否忽略警告 只报告错误        ignoreWarnings true        //检查到错误时 是否包含错误的代码行数 默认true        noLines true        //是否关闭分析消息输出 如果是true就不会在终端中输出分析的消息 报告中仍然会有        quiet true        /**         * 方法         * 通过 lint --list 查看多有id         */        //把id为 UnusedResources(正常为警告级别) 提到错误界别        error('UnusedResources')        //忽略 用法同上        ignore('UnusedResources')        //警告        warning('UnusedResources')        //重大错误//        fatal('UnusedResources')    }    /**     * 打包配置     */    packagingOptions{        //pickFirsts做用是 当有重复文件时 打包会报错 这样配置会使用第一个匹配的文件打包进入apk        // 表示当apk中有重复的META-INF目录下有重复的LICENSE文件时  只用第一个 这样打包就不会报错        pickFirsts = ['META-INF/LICENSE']        //merges何必 当出现重复文件时 合并重复的文件 然后打包入apk        //这个是有默认值得 merges = [] 这样会把默默认值去掉  所以我们用下面这种方式 在默认值后添加        merge 'META-INF/LICENSE'        //排除文件 打包时排除匹配文件 也是有默认值得        exclude 'META-INF/LICENSE'    }    /**     * 分包规则     * 根据cpu架构和屏幕像素密度分包     */    splits{        //cpu架构配置        abi{            //开启abi分包            enable true            //是否创建一个包含所有有效动态库的apk            universalApk true            //清空所有默认值            reset()            //打出包含的包 这个是和默认值累加的            include 'x86','armeabi'            //排除指定的cpu架构            exclude 'mips'        }        //根据手机屏幕像素密度打包        density {            //开启abi分包            enable true            //清空所有默认值            reset()            //打出包含的包 这个是和默认值累加的            include 'xhdpi','xxhdpi'            //排除指定            exclude 'mdpi'        }    }    /**     * 测试配置     * 在命令行输入 gradle :app:tDUT 可以进行测试 并输出测试报告     */    testOptions{        //在设备化测试的时候关闭动画 设备化测试在androidTest里进行  test下的是单元测试        animationsDisabled true        //配置单元测试        //详细说明见https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/Test.html        unitTests.all {            // 设置测试时候的一些属性 下面这样在ExampleUnitTest类里写 可以获取value这个值            // System.out.println(System.getProperty("key"));            systemProperty 'key','value'            //开启测试的标准输出  在命令行能够看到输出信息            testLogging.showStandardStreams = true            //排除对应包下的所有代码 只能排除包 不能单独排除类            //下面是排除com.lin.test包下的所有测试代码            exclude 'com/lin/test'        }    }    /**     * applicationVariants 获取所有变体     * 遍历工程的所有变体     *     */    applicationVariants.all{        //会输出release、debug、hello        println it.name        //会输出apk的目录 ../../../debug.apk  outputs是个集合 所以用outputs* 展开操作符去遍历        println it.outputs*.outputFile    }}/** * 自定义dependencies过滤组 * 因为dependencies只支持基本的风味分组 比如free x86 arm等 不支持组合 * 这样定义后就支持组合了 */configurations{    freeArmDebugCompile{}}dependencies {    freeArmDebugCompile 'pub.devrel:easypermissions:0.1.9'    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.3.1'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    testCompile 'junit:junit:4.12'    //导入myLibrary库 并指定配置为release 配和下面补充的第二条  ,    compile project(path:':mylibrary',configuration:'release')}/** * 最后补充 都是在library库中的gradle配置 * 1、consumerProguardFile 'proguard-rules.pro' * 这个是配置到library工程里的 defaultConfig中 意思是将library中的混淆文件添加到主工程当中 * 主要是给library工程添加防混淆的proguard-rules.pro文件 * * 2、publishNonDefault true  是否需要发布所有的依赖配置 * 我们在引入library工程时 是可以指定library的变体的 指定是release还是debug * 这个参数等于true的意思是 库工程会生成多个配置 不仅仅是default的配置 这样我们就可以 * 指定release变体了  不然的话会报错 */

更多相关文章

  1. 【Android】volley网络框架的文件下载
  2. android 输出.txt 文本换行问题
  3. Android(安卓)SDK 目录和作用的分析详解
  4. Unity3D Android播放视频
  5. Android(安卓)到ARM versatile PB板移植主要步骤
  6. android点击系统通知Notification,进入指定的activity
  7. Android(安卓)sdk 接入时遇到的错误解决方案
  8. 在Android中把内容写到XML文件中
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)ApiDemos示例解析(52):Grap
  2. Android(安卓)log analysis
  3. android 开发高仿QQ表情选择、输入框
  4. android Button实现点击事件的三种方法
  5. 制作android ramdisk.img镜像
  6. Android(安卓)使用Gson解析json案例具体
  7. 关于Eclipse for Android安装SDK过程中出
  8. Android开发之PreferenceActivity的使用
  9. 浅谈Activity中setContentView()
  10. Android实现定时隐藏View(一段时间无操作