描述
本篇博客是解决之前 debug/release 修改包名,取不同包名下的agconnect-services.json 文件遗留的不完美解决方案的,当时如果需要切换包名,需要手动删除agconnect-services.json 文件,比较麻烦,这篇博客来解决这个问题
解决方案
def isUseReleaseAppPackageName = false 是否使用正式环境的包名
android {
signingConfigs {
.....省略代码
}
defaultConfig {
.....省略代码
}
buildTypes {
debug {
.....省略代码
}
release {
.....省略代码
}
//复制文件
task copyAgconnecToRelease(type: Copy) {
from "src/pushservices/release/"
include "agconnect-services.json"
into "./"
}
//复制文件
task copyAgconnecToDebug(type: Copy) {
from "src/pushservices/debug/"
include "agconnect-services.json"
into "./"
}
//删除文件
task deleteAgconnecFile(type: Delete) {
delete("./agconnect-services.json")
}
afterEvaluate {
tasks.matching {
it.name.equals("processDebugAGCPlugin") || it.name.equals("processReleaseAGCPlugin") || it.name.equals("assembleDebug") || it.name.equals("assembleRelease") || it.name.equals("bundleRelease")
}.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") || it.name.equals("bundleRelease")){
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做了判断,判断文件是否存在,如果存在我们先删除之前的,再重新拷贝过来到根目录,这样我们就不用再次的手动操作这些东西了。