参考的文章
Gradle 自定义Plugin插件之360加固
android-jiagu-plugin
Android Gradle学习(七):Gradle构建生命周期
Gradle时序
学习到的知识点
1、理解dependsOn
assembleOfficialReleaseTask 打正式包
reinforceForofficialReleaseTask 加固
uploadJavaForofficialReleaseTask 上传
逻辑想的是,打完正式包,进行加固,再上传
assembleOfficialReleaseTask ---> reinforceForofficialReleaseTask --->uploadJavaForofficialReleaseTask
代码大致写法如下
//上传Task
UploadTask uploadJavaForofficialReleaseTask = project.getTasks().create("uploadJavaFor" , UploadTask.class);
//加固
ReinforceTask reinforceForofficialReleaseTask = project.getTasks().create("reinforceFor" ReinforceTask.class);
//正式打包Task
Task assembleOfficialReleaseTask = project.tasks.findByName("assembleOfficialRelease")
//写依赖关系
//加固依赖 打正式包
reinforceForofficialReleaseTask.dependsOn(assembleOfficialReleaseTask);
//上传依赖 加固
uploadJavaForofficialReleaseTask.dependsOn(reinforceForofficialReleaseTask );
dependsOn 原本的意思是依赖谁,这里我加固的依赖打正式包的。所原以为执行assembleOfficialReleaseTask ,会按照该逻辑走
assembleOfficialReleaseTask ---> reinforceForofficialReleaseTask --->uploadJavaForofficialReleaseTask
但是却不是这样的,只有我执行uploadJavaForofficialReleaseTask ,就会按照这样的方式走。
原因是你执行assembleOfficialReleaseTask ,assembleOfficialReleaseTask 并没有依赖谁,程序上是不知道的,只有uploadJavaForofficialReleaseTask知道
2、理解project.afterEvaluate
project.afterEvaluate 是配置阶段执行完成后的回调,各个任务的task其实并没有开始
gradlew clean(任意一个task)
配置阶段
E:\stydy\gradleStudy>gradlew clean
setting.gradle start
setting.gradle end
配置阶段
> Configure project :
main gradle start
main gradle end
配置阶段
> Configure project :app
app gradle start
app gradle end
app afterEvaluate start
appafterEvaluate end
配置阶段
> Configure project :base
base gradle start
base gradle end
base afterEvaluate start
base afterEvaluate end
配置阶段
> Configure project :corelibrary
corelib gradle start
corelib gradle end
======这部分才是开始任务======
> Task :clean UP-TO-DATE
> Task :app:clean
> Task :base:clean
> Task :corelibrary:clean
app buildFinished start
app buildFinished end
抄至Gradle时序
project.afterEvaluate(new Action<Project>() {
@Override
public void execute(Project myProject) {
for (ApplicationVariant variant : appVariants) {
String buildType = "assemble${variant.flavorName}${variant.buildType.name}"
if (buildType.equalsIgnoreCase("assembleofficialrelease")) {
String variantName = variant.getName();//officialRelease
//创建TASK
PGYUploadTask uploadTask = project.getTasks().create("uploadJavaFor" + variantName, PGYUploadTask.class);
uploadTask.init(variant, project);
//创建TASK
ReinforceTask reinforceTask = project.getTasks().create("reinforceFor" + variantName, ReinforceTask.class);
reinforceTask.init(variant,project);
if (variant.hasProperty("assembleProvider")) {
Task officialReleaseTask = project.tasks.findByName(variant.assembleProvider.get().name)//assembleOfficialRelease
reinforceTask.dependsOn(officialReleaseTask);
uploadTask.dependsOn(reinforceTask);
} else {
reinforceTask.dependsOn(variant.getAssembleProvider().get());
uploadTask.dependsOn(reinforceTask);
}
break;
}
}
}
});
所以源码里面这里的意思,在配置完成后的回调中(未处于执行task任务),如果buildType类型是 assembleofficialrelease,就配置加固task依赖打包,上传task依赖加固。
所以当执行任务的时候,uploadJavaForofficialRelease 的task就会发现,我这个任务有依赖加固,加固有依赖打正式包。正式包 --- >进行加固--->上传
注意点
1、填写360加固路径,是不可以有中文地址
最后提供github地址,需要自行提供360jar包位置,蒲公英key,签名信息
github地址
网友评论