Android Gradle的配置与介绍

最近整理了关于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'

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值