Gradle

debug/release 修改包名,取不同包名下的agconn

2020-05-20  本文已影响0人  一个冬季
描述

本篇博客是解决之前 debug/release 修改包名,取不同包名下的agconnect-services.json 文件遗留的不完美解决方案的,当时如果需要切换包名,需要手动删除agconnect-services.json 文件,比较麻烦,这篇博客来解决这个问题

解决方案
def isUseReleaseAppPackageName = false 是否使用正式环境的包名
android {
    signingConfigs {
       .....省略代码
    }
    defaultConfig {
       .....省略代码
    }
    buildTypes {
        debug {
             .....省略代码
        }
        release {
             .....省略代码
    }
//复制文件
task copyAgconnecToRelease(type: Copy) {
    def isFileExists = false;
    doFirst {
        isFileExists =  file("agconnect-services.json").exists();
    }
    if(isFileExists){
        dependsOn(deleteAgconnecFile)
    }
    from "src/pushservices/release/"
    include "agconnect-services.json"
    into "./"
}

//复制文件
task copyAgconnecToDebug(type: Copy) {
    def isFileExists = false;
    doFirst {
        isFileExists =  file("agconnect-services.json").exists();
    }
    if(isFileExists){
        dependsOn(deleteAgconnecFile)
    }
    from "src/pushservices/debug/"
    include "agconnect-services.json"
    into "./"
}
afterEvaluate {
    tasks.matching {
        it.name.equals("processDebugAGCPlugin") || it.name.equals("processReleaseAGCPlugin") || it.name.equals("assembleDebug") || it.name.equals("assembleRelease")
    }.each {task->
        if(task.getName().equals("processDebugAGCPlugin")){
            if (isUseReleaseAppPackageName ) {
                task.dependsOn(copyAgconnecToRelease)
            } else {
                task.dependsOn(copyAgconnecToDebug)
            }
        }else if(task.getName().equals("processReleaseAGCPlugin")){
            task.dependsOn(copyAgconnecToRelease)
        }else if(task.getName().equals("assembleDebug") || task.getName().equals("assembleRelease")){
            if(task.getName().equals("assembleDebug")){
                if (isUseReleaseAppPackageName ) {
                    task.dependsOn(copyAgconnecToRelease)
                } else {
                    task.dependsOn(copyAgconnecToDebug)
                }
            }else{
                task.dependsOn(copyAgconnecToRelease)
            }
        }
    }
}

//判断是否为debug模式
def isReleaseBuildType(){
    boolean isReleaseTypes = false;
    for(String s : gradle.startParameter.taskNames) {
        if (s.equals(":app:assembleRelease")) {
            isReleaseTypes = true;
            break;
        }
    }
    return isReleaseTypes;
}

这里出现了processReleaseAGCPlugin 与 processReleaseAGCPlugin,这个的作用是检测agconnect-services.json 文件里面包名是否对应上的,所以这里我们要单独的处理。
我们还针对 copyAgconnecToRelease 与 copyAgconnecToDebug 2个task做了判断,判断文件是否存在,如果存在我们先删除之前的,再重新拷贝过来到根目录,这样我们就不用再次的手动操作这些东西了。

上一篇下一篇

猜你喜欢

热点阅读