May 
	   12th,
	   
	   2015
	 
	  
	   
 
 
 
 
		
		
		  
		
		
		  
		
		
      
      
    
    
		
		
	
	
	
去年开始使用 Android Studio 开发,效率提高很多, 黑色的主题也很酷。
几天纪录下如何使用gradle 批量打包以及 某些常量的动态配置。
首先需要理解gradle基础, 一种新的项目结构,类似maven, 但更好用
打包的所有配置都在module下的 build.gradle 文件中。文件结构
首先在配置你的签名(一下都在 android 目录中配置):
signingConfigs {
    release {
        keyAlias 'xxxx'
        keyPassword 'xxxx'
        storeFile file('xxxxx')
        storePassword 'xxxx'
    }
}你可以配置多个签名如:一个release 一个debug
接下来配置buildType:
 	buildTypes {
        debug {
            buildConfigField "String", "HOST", '"xxxx"'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        release {
            buildConfigField "String", "HOST", '"xxxx"'
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
            signingConfig signingConfigs.release
        }
    }buildType 配置了你的apk输出类型,可以配置多个,每个类型中可做详细定义:
- buildConfigField 定义一个名为host的字符串,用于区分debug和release不同的服务器地址
 - minifyEnabled 是否进行混淆 默认false
 - shrinkResources 是否去除无用的res文件
 - proguardFiles 制定混淆规则文件 具体规则
 - signingConfig 制定签名 就是上面配置过的
 
如果希望配置更多的类型可以使用productFlavors 如友盟多渠道配置
	productFlavors {
        mi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "mi"]
        }
        '360' {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        qq{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
        }
        '1' {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "1"]
        }
    }注:闭包数字需要加’’
这样每个buildType 类型对应了n个productFlavors类型,打包数量为:buildType * productFlavors个,别忘了修改manifest里友盟配置
  <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}"></meta-data>最后加上
	//禁止lint错误
	lintOptions {
        abortOnError false
    }补充:buildConfigField可自由定义:buildConfigField 类型, 名称, 赋值
调用方式:BuildConfig.名称 即可