本文链接:https://blog.csdn.net/feather_wch/article/details/131746580
1、Gradle是一种语言吗?
2、gradle支持的语言有哪些?
3、Gradle的构建脚本是用Groovy编程语言编写的。
4、Groovy是一种基于JVM的动态语言。
5、Gradle的整个API也是用Groovy语言设计的。
6、Gradl提供了一个基于Groovy语言的领域特定语言(DSL),支持两种DSL
7、DSL(领域特定语言)是什么?
本地仓库构建两种方法:
目的:
要在 windows 上搭建 jfrog artifactory,可以参考以下的资源:
实际步骤
远程仓库
本地仓库
修改默认文件大小
设置分组
gradle-wrapper.properties
https://services.gradle.org/distributions/gradle-8.0-bin.zip
修改为:
http://localhost:8081/artifactory/andorid_local/gradle-8.0-bin.zip
repositories {
maven { url 'http://localhost:8081/artifactory/andorid_group/' }
}
核心代码
1、创建名为releaseHelper的任务,并且建立Extension配置项和Task的关联
project.getExtensions().create("releaseHelper", Extension.class, project);
2、创建任务一:App发布到蒲公英平台
// Create PgyUpload task
PgyerUploadTask pgyUploadTask = project.getTasks().
create("pgyUploadFor" + variantName, PgyerUploadTask.class);
pgyUploadTask.init(variant, project);
3、创建任务二:发送App发布消息到钉钉
// Create SendMsgToDingTalkTask task
SendMsgToDingTalkTask sendMsgToDingTalkTask = project.getTasks().
create("sendMsgToDingTalkFor" + variantName, SendMsgToDingTalkTask.class);
sendMsgToDingTalkTask.init(variant, project);
4、构建assembleRelease和两个task之间的依赖关系
// assembleRelease依赖于clean
variant.getAssembleProvider().get().dependsOn(project.getTasks().findByName("clean"));
// 蒲公英上传依赖于assembleRelease
pgyUploadTask.dependsOn(variant.getAssembleProvider().get());
// 钉钉消息依赖于蒲公英上传
sendMsgToDingTalkTask.dependsOn(pgyUploadTask);
@TaskAction
public void uploadToPgy() {
// 1、拿到app的build.gradle中android标签下内容
AppExtension appExtension = (AppExtension) targetProject.getExtensions().findByName("android");
for (BaseVariantOutput it : variant.getOutputs()) {
// 2、拿到输出文件
File apkFile = it.getOutputFile();
// 3、展示app相关信息
Extension extension = Extension.getConfig(targetProject);
System.out.println("#######################################################################");
System.out.println("# applicationId :" + variant.getMergedFlavor().getApplicationId());
System.out.println("# uploadFileName:" + apkFile.getAbsoluteFile());
System.out.println("# versionName :" + appExtension.getDefaultConfig().getVersionName());
System.out.println("# versionCode :" + appExtension.getDefaultConfig().getVersionCode());
System.out.println("# appName :" + extension.appName);
System.out.println("# changeLog :" + extension.changeLog);
System.out.println("#######################################################################");
// 4、Retrofit上传
try {
// 1. Get FIR upload info includes icon and apk uploading;
Response<ResponseBody> appsResponse = RetrofitUtil.
getRetrofit("https://www.pgyer.com/apiv2/").
create(PgyerUploadInterface.class).
uploadFile(RetrofitUtil.getTextBody(extension.pgyApiKey),
RetrofitUtil.getFilePart("application/vnd.android.package-archive", apkFile),
RetrofitUtil.getTextBody("2"),
RetrofitUtil.getTextBody("123456"),
RetrofitUtil.getTextBody("test"),
RetrofitUtil.getTextBody("XiangxueGradle"),
RetrofitUtil.getTextBody("2")).
execute();
System.out.println("\n1. AppsResponse:" + new Gson().toJson(appsResponse.body().string()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
发送消息到钉钉
@TaskAction
public void SendMessageToDingTalk() {
Extension extension = Extension.getConfig(targetProject);
DingMsg dingMsg = new DingMsg();
dingMsg.actionCard.title = extension.msgTitle;
dingMsg.actionCard.text = extension.msgContent;
dingMsg.actionCard.singleTitle = extension.singleButtonTitle;
dingMsg.actionCard.singleURL = extension.singleButtonUrl;
try {
Response<ResponseBody> response = RetrofitUtil.
getRetrofit("https://oapi.dingtalk.com/").
create(DingTalkInterface.class).
sendMsgToDingTalk(extension.apiToken, dingMsg).
execute();
System.out.println("DingTalkMsgResponse:" + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
1、支持多渠道、多维度打包
2、支持上传Jenkins