鍍金池/ 問(wèn)答/Scala  Android  網(wǎng)絡(luò)安全/ gradle打包自動(dòng)執(zhí)行任務(wù)

gradle打包自動(dòng)執(zhí)行任務(wù)

如題,我想在多渠道打包之前替換一些資源。 例如下面的gradle配置:


android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.lxw.gradletest"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release {
            storeFile new File("C:\\Users\\Administrator\\Desktop\\work\\zkjt.jks")
            storePassword 'zcareze'
            keyAlias 'zkjt'
            keyPassword 'zcareze'

        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            applicationIdSuffix '.debug'
        }
    }

    productFlavors {
        google {
        }
        xiaomi {
        }
        _360 {
        }
    }

我想在執(zhí)行g(shù)oogle 渠道的時(shí)候復(fù)制一個(gè)圖片到資源目錄, 然后打開(kāi)APP背景就是google的,而其他的也是對(duì)應(yīng)的。是復(fù)制文件, 也就是在執(zhí)行每個(gè)渠道之前,執(zhí)行一個(gè)自定義的task。

回答
編輯回答
有點(diǎn)壞

你的需求不一定要用自定義的 task 實(shí)現(xiàn),我想到其他兩種方式來(lái)實(shí)現(xiàn)你的需求

1.自定義 task

//將文件拷到 assets 目錄下
//Google
task chGoogleRes(type : Copy) {
    from "/Users/yanggu/Desktop/untitled.txt"
    into "src/main/assets"
}

//Xiaomi
task chXiaomiRes(type : Copy) {
    from "/Users/yanggu/Desktop/helper/untitled.txt" 
    into "src/main/assets"
}

project.afterEvaluate {
    //Xiaomi
    tasks.matching {
        it.name.startsWith('compile') && (it.name.endsWith('XiaomiReleaseSources'))
    }.each { task ->
        task.dependsOn(chXiaomiRes)  // 任務(wù)依賴:執(zhí)行task之前需要執(zhí)行dependsOn指定的任務(wù)
    }

    //Google
    tasks.matching {
        it.name.startsWith('compile') && (it.name.endsWith('GoogleReleaseSources'))
    }.each { task ->
        task.dependsOn(chGoogleRes)  // 任務(wù)依賴:執(zhí)行task之前需要執(zhí)行dependsOn指定的任務(wù)
    }
}

2.依賴 modle

//一個(gè)渠道新建一個(gè) modle,不同的的渠道依賴不同的 modle,把不同的資源放在不同的mudle,適合有多個(gè)資源不同的情況(資源名得一樣,比如有三張背景圖片分別放在三個(gè) modle 下,但它們的名字得一樣)
dependencies {
    googleCompile project(':googlereslib')
    xiaomiCompile project(':xiaomireslib')
    _360Compile project(':_360reslib')
}

3.代碼判斷當(dāng)前的渠道

//把所有的圖片都放到工程下,根據(jù)代碼判斷當(dāng)前的渠道來(lái)設(shè)置不同的圖片,適合一張圖片不一樣的情況(名字得不一樣)
switch (BuildConfig.FLAVOR) {
            case "google":
                //TODO
                break;
            case "xiaomi":
                //TODO
                break;
            case "_360":
                //TODO
                break;
        }
2018年5月31日 13:41