使用Gradle动态配置资源,gradle动态资源
#使用Gradle动态配置资源
***
>关键词:Gradle 多渠道打包 动态更换资源
Eclipse中可以使用Ant动态替换文件中的字符串,或者替换文件实现动态更换项目资源,实现快速打包。
例如:可以实现多渠道打包,debug版与release版访问不同服务器可以动态替换,多个app差异只是 **App名字** , **App图标** 或者 **App访问的服务器**不同,这些使用gradle可以更方便的做到,而且gradle**不是替换**资源,而**是配置**资源。
- 先来一个默认的
```
apply plugin: 'com.android.application'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "net.ljt.gradledemo"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    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.1.0'
    testCompile 'junit:junit:4.12'
}
```
>在默认的基础上创建
```
android {
       ...
    productFlavors{
    }
       ...
}
```
> 在productFlavors里面创建不同包的标签
例如:
```
productFlavors {
        xiaomi {}
        baidu {}
        huawei {}
        yingyongbao {}
        _360{}
    }
```
当然也可以创建其他非应用商店的标签,例如你要打包多个不同名字的apk,那么就用不同的名字作标签
```
productFlavors {
        xiaomi {}
        baidu {}
        huawei {}
        yingyongbao {}
        _360{}
        gradle{}
        gradledemo{}
    }
```
> 在标签中指定需要替换的资源
- 在这里你可以指定你的包名,版本号,版本ID,签名文件等内容
```
android {
    ...
    defaultConfig {
        applicationId "net.ljt.gradledemo"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs {    
        xiaomi {        
            keyAlias 'xiaomi'        
            keyPassword 'xiaomi123'
            storeFile file('xiaomi.keystore')
            storePassword 'xiaomi123'
        }
        baidu {
            keyAlias 'baidu'
            keyPassword 'baidu123'
            storeFile file('baidu.keystore')
            storePassword 'baidu123'
        }
    }
    productFlavors {
        xiaomi {
            applicationId "net.ljt.gradle.xiaomi"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 3
            versionName "1.2" 
            signingConfig signingConfigs.xiaomi
        }
        baidu {
            applicationId "net.ljt.gradle.baidu"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 2
            versionName "1.1"
            signingConfig signingConfigs.baidu
        }
        huawei {}
        yingyongbao {}
        _360{}
        gradle{}
        gradledemo{}
    }
    ...
}
```
如果你的flavor里面只是替换非常简单的字符串,例如渠道号,就可以简略的这样写
```
productFlavors {
        xiaomi {}
        baidu {}
        huawei {}
        yingyongbao {}
        _360{}
        gradle{}
        gradledemo{}
    }
    //使用循环遍历所有flavor
&n
 

