android plugin 加固 && 上传

参考的文章

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() {
            @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地址

你可能感兴趣的:(android plugin 加固 && 上传)