Android Gradle的配置与介绍

来源:互联网 发布:网络规划开题报告 编辑:程序博客网 时间:2024/05/29 07:36

最近整理了关于Gradle一些配置和介绍,总结如下:

/** * 声明是Android程序(以插件的形式引入) * 表示该module是一个app module,应用了com.android.application插件,如果是一个android library,那么这里写apply plugin: ‘com.android.library’ */apply plugin: 'com.android.application'/** * android配置插件等属性 */android {    //编译SDK的版本(基于哪个SDK编译,这里是API LEVEL)    compileSdkVersion 25    // build tools的版本(基于哪个构建工具版本进行构建的)    buildToolsVersion "25.0.1"    //默认配置,如果没有其他的配置覆盖,就会使用这里的    defaultConfig {        //应用的包名        applicationId "com.xzw.gradledemo"        //最小支持的SDK版本        minSdkVersion 10        //目标SDK版本        targetSdkVersion 25        //版本号        versionCode 1        //版本名称        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        //${UMENG_CHANNEL_VALUE}占位符会被dev替换(下面可以使用多渠道)        manifestPlaceholders = [UMENG_CHANNEL_VALUE: 'dev']        //移除未使用的备用资源(下面表示将语言资源限定为仅支持英语和法语)        resConfigs "en", "fr"        //开启multidex支持(用于解决64K方法的问题)        multiDexEnabled true        //指定ndk需要类型的SO库        ndk {            abiFilters "armeabi-v7a"            abiFilters "x86"            abiFilters "armeabi"            abiFilters "arm64-v8a"            abiFilters "x86_64"        }    }    //java版本    compileOptions{        sourceCompatibility JavaVersion.VERSION_1_7        targetCompatibility JavaVersion.VERSION_1_7    }    /**     * 忽略Lint检查     */    lintOptions {        abortOnError false    }    /**     * 在Gradle 进行dex的可能会遇到内存不够用的情况,     * 错误信息大概是java.lang.OutOfMemoryError: GC overhead limit exceeded。     * 这个时候只需要配置dexOptions的javaMaxHeapSize大小即可,这里配置4g     */    dexOptions {        javaMaxHeapSize "4g"    }    //打包的时候忽略一些文件可以在这配置    packagingOptions{        exclude 'META-INF/LICENSE.txt'        exclude 'META-INF/NOTICE.txt'    }    /**     * 签名配置     */    signingConfigs {        release {            //签名证书文件            storeFile file("debug.keystore")            //证书的密码            storePassword"secretpassword"            //别名            keyAlias "gradleforandroid"            //key的密码            keyPassword "secretpassword"        }        debug {            //签名证书文件            storeFile file("release.keystore")            //证书的密码            storePassword"secretpassword"            //别名            keyAlias "gradleforandroid"            //key的密码            keyPassword "secretpassword"        }    }    /**     * 分割apk     */    splits {        density {            //启用或者禁用密度分割            enable true            // 除了这些密度之外            exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi"            //兼容以下屏幕            compatibleScreens 'normal', 'large', 'xlarge'        }    }    /**     * 构建类型     * 构建不同类型提供团队内部使用     * 常用的有release和debug两种,可以在这里面启用混淆,启用zipAlign以及配置签名信息等。     */    buildTypes {        debug{            //版本名字上加上后缀,如1.0.debug,这样方便调试的时候识别            applicationIdSuffix ".debug"            buildConfigField "String","API_URL","http://www.baidu.com"            buildConfigField "boolean", "LOG_HTTP_CALLS", "true"            resValue "string", "app_name", "Example DEBUG"            //设置默认的签名文件            //signingConfig signingConfig.release        }        jnidebug {            // 'initWith'属性允许您从其他构建类型中复制配置,如有不同配置只需要设置不同的属性即可            initWith debug            //版本名字上加上后缀,如1.0.jnidebug,这样方便调试的时候识别            applicationIdSuffix ".jnidebug"            jniDebuggable true        }        release {            //版本名字上加上后缀,如1.0.release,这样方便调试的时候识别            applicationIdSuffix ".release"            buildConfigField "String","API_URL","http://www.baidu.com"            buildConfigField "boolean", "LOG_HTTP_CALLS", "true"            resValue "string", "app_name", "Example DEBUG"            //是否开启混淆            minifyEnabled true            //是否ZIP优化            shrinkResources true            /**             * 删除一些无用的资源(资源压缩)             * 资源压缩目前不会移除 values/ 文件夹中定义的资源(例如字符串、尺寸、样式和颜色)。             * 这是因为 Android 资源打包工具 (AAPT) 不允许 Gradle 插件为资源指定预定义版本。             */            shrinkResources true            /**             * 使用ProGuard 缩减apk文件大小(混淆所用的文件)             * getDefaultProguardFile(‘proguard-android.txt') 方法可从 Android SDK tools/proguard/ 文件夹获取默认 ProGuard 设置             * 要想做进一步的代码压缩,可尝试使用位于同一位置的 proguard-android-optimize.txt 文件。它包括相同的 ProGuard 规则,             * 但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。             */            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            //signingConfig signingConfig.release            /**             * 定制生成的apk文件名             * 输出apk名字:gradledemo_v1.0_2016-03-23_xiaomi.apk             */            applicationVariants.all { variant ->                if (variant.buildType.name.equals('release')) {                    variant.outputs.each { output ->                        def outputFile = output.outputFile                        if (outputFile != null && outputFile.name.endsWith('.apk')) {                            def fileName = "gradledemo${defaultConfig.versionName}_${releaseTime()}_${variant.flavorName}.apk"                            output.outputFile = new File(outputFile.parent, fileName)                        }                    }                }            }            //针对很多渠道(多渠道打包,还会遇到一个问题,比如友盟统计的渠道号,Gradle处理办法:manifestPlaceholders,它允许我们动态替换我们在AndroidManifest文件里定义的占位符。)            productFlavors.all { flavor ->                manifestPlaceholders.put("UMENG_CHANNEL_VALUE",name)            }        }    }    /**     * 用于多渠道打包.定制不同版本     */    productFlavors{        xiaomi{            //设置applicationId为: com.xzw.casedemo1            applicationId 'com.xzw.casedemo1'            //设置为设置applicationId为:com.xzw.gradledemo.xiaomi            applicationIdSuffix ".xiaomi"            //设置mainfest里面的多渠道的值            manifestPlaceholders.put("UMENG_CHANNEL_VALUE", 'xiaomi')            //设置版本号            versionName "1.0-xiaomo"        }        googleplay{            //设置applicationId为: com.xzw.casedemo2            applicationId 'com.xzw.casedemo2'            //设置为设置applicationId为:com.xzw.gradledemo.googleplay            applicationIdSuffix ".googleplay"            //设置mainfest里面的多渠道的值            manifestPlaceholders.put("UMENG_CHANNEL_VALUE", 'googlepaly')            //设置版本号            versionName "1.0-googleplay"        }    }}def releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}/** * dependencies:不属于Android专有的配置了,它定义了该module需要依赖的jar,aar,jcenter库信息。 * dependencies有三种不同类型的依赖关系 */dependencies {    //1.添加所有在libs文件夹中的jar    compile fileTree(include: ['*.jar'], dir: 'libs')    //仅为测试的APK添加远程依赖。    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    //这种方式其实是正确的语法    compile group: 'com.android.support', name: 'appcompat-v7', version: '25.0.1'    //2.远程依赖库(这个是上面的简写一般我们都这么写)    compile 'com.android.support:appcompat-v7:25.0.1'    //使用JUnit单元测试    testCompile 'junit:junit:4.12'    //动态版本    compile 'com.android.support:recyclerview-v7:+'    //3.library库输出文件是.aar文件,包含了Android 资源文件,在library工程build/output/aar/下    // app内引用本地library项目    compile project(':mylibrary')    //多个library,libraries是文件夹名字    //compile project(':libraries:library名字')    //64k依赖库    compile 'com.android.support:multidex:1.0.0'}


0 0
原创粉丝点击