Android学习笔记0--配置1--gradle

来源:互联网 发布:杨幂假唱知乎 编辑:程序博客网 时间:2024/06/14 13:02
// https://developer.android.com/studio/build/index.htmlapply plugin: 'com.android.application'//apply plugin: 'com.android.library'// Android库插件def getDateTime() {// 获取时间的函数    def datetime = new Date().format("yyyy-MM-dd HH-mm-ss", TimeZone.getTimeZone("UTC"))    return datetime}android {    compileSdkVersion 25    buildToolsVersion "23.0.3"    dataBinding {// 原生数据绑定框架        enabled false// 默认为false    }    externalNativeBuild {// native编译支持,注意manifest中android:supportsRtl属性        cmake {            // path "CMakeLists.txt"        }    }    aaptOptions {        cruncherEnabled false// PNG图片是否可以大量快速的处理        cruncherProcesses 4// 快速处理,可能需要更多的内存和CPU。默认0,值越大处理越快        ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"    }    lintOptions {// Lint(静态代码扫描)工具可选项参数        abortOnError false// lint时候即使报错也不会停止打包,防止编译的时候莫名的失败        checkReleaseBuilds false// 打包release版本的时候是否进行检测(抄来的)    }    compileOptions {// 编译时的可选项参数        sourceCompatibility JavaVersion.VERSION_1_7        targetCompatibility JavaVersion.VERSION_1_7    }    dexOptions {// Dex可选项参数        // http://stackoverflow.com/questions/37522668/Android-dexoptions-incremental-property-is-deprecated        preDexLibraries true        maxProcessCount 8        javaMaxHeapSize "4g"// 设置java堆内存大小,4GB是DEX操作的最大堆大小    }    packagingOptions {//去掉MEAT-INF里边指定的文件,解决有时候不同jar的MEAT-INF里边的文件会重复导致打包报错        exclude 'META-INF/MANIFEST.MF'        exclude 'META-INF/LICENSE'        exclude 'META-INF/NOTICE'        exclude 'META-INF/ASL2.0'    }    signingConfigs {// 签名配置,为了安全,这里通过手动输入密钥的方式        release {//发布版签名配置            storeFile file("/Users/mine/.android/mine.keystore")// 密钥文件路径            storePassword "576756688"// 密钥文件密码            keyAlias "mine"// key别名            keyPassword "576756688"// key密码        }        debug {//debug版签名配置            storeFile file("/Users/mine/.android/mine.keystore")// 密钥文件路径            storePassword "576756688"// 密钥文件密码            keyAlias "mine"// key别名            keyPassword "576756688"// key密码        }    }    buildTypes {// Gradle构建的变体数量等于Dimensions数量的乘积(>=1)type数量的乘积,优先级依次降低        debug {            signingConfig signingConfigs.debug// 设置签名信息            ext.enableCrashlytics = false// 禁用错误统计            ext.alwaysUpdateBuildId = true// 进行每一次编译后就更新错误统计的ID            applicationIdSuffix ".debug"// 给applicationId添加了一个后缀            versionNameSuffix "-debug"// 在versionName后边添加"-debug"的后缀            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "debug"]            //shrinkResources true// 压缩资源--移除无用的资源            //multiDexEnabled true// dex突破65535的限制            zipAlignEnabled true// 让资源按4字节对齐,可减少应用在运行时的内存消耗            minifyEnabled true// 压缩代码--进行混淆            useProguard false// 停用proguard            debuggable true// 是否生成debug版APK            jniDebuggable true// 生成的APK是否支持调试本地代码        }        release {            //initWith debug// 从debug中拷贝其已有的debug属性            signingConfig signingConfigs.release// 设置签名信息            ext.enableCrashlytics = true// 启用错误统计            ext.alwaysUpdateBuildId = true// 进行每一次编译后就更新错误统计的ID            applicationIdSuffix ".release"// 给applicationId添加了一个后缀            versionNameSuffix "-relase"// 在versionName后边添加"-relase"的后缀            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "release"]            //shrinkResources true// 压缩资源--移除无用的资源            //multiDexEnabled true// dex突破65535的限制            zipAlignEnabled true// 让资源按4字节对齐,可减少应用在运行时的内存消耗            minifyEnabled true// 压缩代码--进行混淆            useProguard true// 启用proguard            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            debuggable false// 是否生成debug版APK            jniDebuggable false// 生成的APK是否支持调试本地代码        }    }    defaultConfig {// // 默认APP配置(提供所有版本的app使用--如有些属性没手动设置的话,如果manifest有就从manifest中读取)        ndk {// ndk配置            moduleName "default_so"// 生成的so名字,使用System.loadLibrary("XXX")            stl "gnustl_static"// GNU标准STL            ldLibs "log", "android"// 添加需要的依赖库文件,因为有log打印等            abiFilters "armeabi", "armeabi-v7a", "x86", "x86_64"// 输出指定abi体系结构下的so库        }        minSdkVersion 14        targetSdkVersion 25        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        applicationId "cn.hisuits.andr.test"// 变体的ID,不同ID代表不同APP(即使包名一样也是不同产品)        versionName "1.0"// 版本号名称        versionCode 1// 版本号代码        applicationIdSuffix ".default"// 不同变体有不同包名称        versionNameSuffix "-default"// 不同变体有不同版本名称        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default"]// 不同变体有不同渠道号        buildConfigField "boolean", "AUTO_UPDATE_FLAG", "true"// 是否启用自动更新的公共字段        buildConfigField "String", "AUTO_UPDATE_URL", "\"http://www.android.com\""// 获取自动更新的公共URL    }    flavorDimensions "type", "mode"// 变体APP特点:app的信息不一致,abi或分辨率一致    productFlavors {// 渠道包配置,其属性与defaultConfig一致,defaultConfig属于ProductFlavor类        demo {            dimension "type"            versionNameSuffix "-demo"        }        full {            dimension "type"            versionNameSuffix "-full"        }        // 参考http://tech.meituan.com/mt-apk-adaptation.html        baidu {            dimension "mode"            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]// 不同变体有不同渠道号            applicationIdSuffix ".baidu"// 不同产品有不同包名称            versionNameSuffix "-baidu"// 在versionName后边添加的后缀            buildConfigField "String", "AUTO_UPDATE_URL", "\"http://www.android.com\""// 获取自动更新的URL            buildConfigField "boolean", "AUTO_UPDATE_FLAG", "false"// 不启用自动更新的字段        }        qihoo360 {            dimension "mode"            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihoo360"]// 不同变体有不同渠道号            applicationIdSuffix ".qihoo360"// 不同产品有不同包名称            versionNameSuffix "-qihoo360"// 在versionName后边添加的后缀        }        special {            dimension "mode"            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "special"]// 不同变体有不同渠道号            applicationIdSuffix ".special"// 不同产品有不同包名称            versionNameSuffix "-special"// 在versionName后边添加的后缀        }    }    productFlavors.all {// 统一设置manifestPlaceholders,上面采用单独设置        //flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]    }    splits {// splits类型,对不同的平台或分辨率等单独编译出app(可减少app的大小,但是对应的兼容性差一些)。变体APP特点:app的abi或分辨率不一致,信息一致        abi {// 应用二进制接口ABI(Application Binary Interface)            enable true            exclude "mips"            reset()            include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' // 选择编译APK的ABIs            universalApk true// universalApk(万能apk,即包含了所有的abi)只有abi有,默认为false。density默认会生成万能apk        }        density {            enable true            exclude "ldpi"            reset()            include "xxhdpi", "xxxhdpi"            compatibleScreens 'small', 'normal', 'large', 'xlarge'        }    }    ext.abiCodes = [mips: 1, x86: 2, 'x86_64': 3, 'armeabi-v7a': 4, 'arm64-v8a': 5]    ext.densityCodes = ['mdpi': 1, 'hdpi': 2, 'xhdpi': 3, 'xxhdpi': 4, 'xxxhdpi': 5]    // 过滤变体APP    variantFilter { variant ->        def names = variant.flavors*.name        // 如果要检查具体的类型, 使用variant.buildType.name == "<buildType>"        if (names.contains("demo") && names.contains("debug")) {            // setIgnore(true)// build type中将会忽略过滤到的类型        }    }    // 多app合并策略https://developer.android.com/studio/build/manifest-merge.html    sourceSets {// 资源文件目录指定,可设置由eclipse转到AS下目录的映射        // 插件默认实现了两个SourceSet:main和androidTest        main {// 每个[]中可设置多个路径            manifest.srcFile 'AndroidManifest.xml'            assets.srcDirs = ['assets']            jniLibs.srcDirs = ['libs']            java.srcDirs = ['src']            aidl.srcDirs = ['src']            res.srcDirs = ['res']            resources.srcDirs = ['src']            renderscript.srcDirs = ['src']        }        androidTest.setRoot('tests')        instrumentTest.setRoot('tests')        // 可设置不同产品有不同目录(功能还不是特别清楚,记录作为日后学习的笔记)        debug.setRoot('build-types/debug')        release.setRoot('build-types/release')    }}dependencies {    // 设定为所有变体依赖的公共模块XXX    // compile project(':XXX')// 编译额外项目XXX    // 设定为不同变体有不同依赖模块XXX    // baiduCompile project(':XXX')    // 设定为所有变体的公共库    compile fileTree(dir: 'libs', include: ['*.jar'], exclude: ['android-*.jar'])    // compile files('libs/zxing.jar')    compile 'com.android.support:appcompat-v7:25.3.1'    // 设定为不同变体(这里为Test,系统会自动创建Test)指定不同的jar包    testCompile 'junit:junit:4.12'    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })}
原创粉丝点击