diff --git a/README.md b/README.md index feb4290..def0345 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,43 @@ # uploadapkplugin -Android. 上传测试服务器 并且自动发送飞书消息的gralde 插件 \ No newline at end of file +Android. 上传测试服务器 并且自动发送飞书消息的gralde 插件 + + + +buildGitLogParams { +//是否发送消息是携带Git记录日志,如果配置了这块参数才会携带Git记录,消息里面可以单独设置是否携带Git日志数据 +//获取以当前时间为基准至N天之前的Git记录(限定时间范围),不填或小于等于0为全部记录,会结合数量进行获取 +gitLogHistoryDayTime = 3 +//显示Git记录的最大数量,值范围1~50,不填默认是10条,最大数量50条 +gitLogMaxCount = 20 +} + +buildTrubitProParams { +//上传服务器的接口地址 方便更改 +httpUpLoadUrl = "https://test-api.trubit.com/member-api/api/v1/uploadApp" +//上传文件的key 默认大部分都是file +upLoadKey = "file" +} + +buildLarkParams { +//飞书机器人的地址 +webHookHostUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/"+token +contentTitle = "TruBitPro Android" +contentText = "最新开发测试包已经上传至测试服务器, 可以下载使用了" +//富文本消息(post)、消息卡片(interactive),默认post +msgtype = "interactive" +//是否@全体群人员,默认false:isAtAll = true +isAtAll = false +clickTxt = "点击进行下载" +//是否单独支持发送Git记录数据,在配置了buildGitLogParams前提下有效,默认为true +isSupportGitLog = true +//是否编译flutter 项目 一般来说在同级目录里面 和当前项目同级即可默认false +isBuildFlutter = false + +} + +# 功能说明 +##### 支持自定义接口地址上传自己服务器 +##### 支持是否编译flutter 项目并且打印log 和发送消息当前的flutter的分支和git log 信息 +##### 当前Android项目并且打印log 和发送消息当前的项目的分支和git log 信息 +##### 支持自定义各种机器人地址传入 diff --git a/app/build.gradle b/app/build.gradle index ca0c944..675245e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,8 +27,8 @@ publishing{ } repositories { maven { -// url = "$rootDir/repo" - url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" + url = "$rootDir/repo" +// url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username = System.getenv("MAVEN_USERNAME") password = System.getenv("MAVEN_PASSWORD") diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/PluginConstants.java b/app/src/main/java/com/trubitpro/uploadapkplugin/PluginConstants.java index 9a00bf9..49f5b6b 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/PluginConstants.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/PluginConstants.java @@ -6,7 +6,7 @@ public class PluginConstants { public static final String TASK_DES="tools of upload to third platform"; public static final String UPLOAD_PARAMS_NAME = "buildLarkParams"; - public static final String DING_PARAMS_NAME = "buildDingParams"; + public static final String TRUBIT_PRO_PARAMS_NAME = "buildTrubitProParams"; public static final String WEIXIN_GROUP_PARAMS_NAME = "buildWeixinGroupParams"; public static final String GIT_LOG_PARAMS_NAME = "buildGitLogParams"; diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/UploadApkPlugin.java b/app/src/main/java/com/trubitpro/uploadapkplugin/UploadApkPlugin.java index 63f50c4..eb75af8 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/UploadApkPlugin.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/UploadApkPlugin.java @@ -3,8 +3,10 @@ import com.android.build.gradle.AppExtension; import com.android.build.gradle.api.ApplicationVariant; import com.google.gson.Gson; +import com.trubitpro.uploadapkplugin.entry.FlutterGitBean; import com.trubitpro.uploadapkplugin.pramars.GitLogParams; import com.trubitpro.uploadapkplugin.pramars.SendLarkParams; +import com.trubitpro.uploadapkplugin.pramars.TrubitProParams; import com.trubitpro.uploadapkplugin.task.BuildFlutterTask; import com.trubitpro.uploadapkplugin.task.OnlyUploadTask; @@ -16,6 +18,7 @@ public class UploadApkPlugin implements Plugin { int process = 0; @Override public void apply(Project target) { + target.getExtensions().create(PluginConstants.TRUBIT_PRO_PARAMS_NAME, TrubitProParams.class); target.getExtensions().create(PluginConstants.GIT_LOG_PARAMS_NAME, GitLogParams.class); target.getExtensions().create(PluginConstants.UPLOAD_PARAMS_NAME, SendLarkParams.class); target.afterEvaluate(project1 -> { diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/entry/FlutterGitBean.java b/app/src/main/java/com/trubitpro/uploadapkplugin/entry/FlutterGitBean.java new file mode 100644 index 0000000..8485c36 --- /dev/null +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/entry/FlutterGitBean.java @@ -0,0 +1,29 @@ +package com.trubitpro.uploadapkplugin.entry; + +public class FlutterGitBean { + + private String flutterGitBranch; + + private String flutterGitLog; + + public FlutterGitBean(String flutterGitBranch, String flutterGitLog) { + this.flutterGitBranch = flutterGitBranch; + this.flutterGitLog = flutterGitLog; + } + + public String getFlutterGitBranch() { + return flutterGitBranch; + } + + public void setFlutterGitBranch(String flutterGitBranch) { + this.flutterGitBranch = flutterGitBranch; + } + + public String getFlutterGitLog() { + return flutterGitLog; + } + + public void setFlutterGitLog(String flutterGitLog) { + this.flutterGitLog = flutterGitLog; + } +} diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/help/ProcessUtils.java b/app/src/main/java/com/trubitpro/uploadapkplugin/help/ProcessUtils.java index bb97191..820e3d5 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/help/ProcessUtils.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/help/ProcessUtils.java @@ -1,19 +1,11 @@ package com.trubitpro.uploadapkplugin.help; -import org.slf4j.LoggerFactory; import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.logging.Logger; public class ProcessUtils { @@ -52,6 +44,34 @@ public static Integer exec(List commands) throws Exception{ } } + public static String exeCmd(List commands) throws Exception{ + + String[] arrCommands = list2Array(commands); + ProcessBuilder processBuilder = new ProcessBuilder(arrCommands); + processBuilder.redirectErrorStream(true); + Process process = null; + StringBuilder stringBuilder = new StringBuilder(); + + try { + processBuilder.redirectOutput(ProcessBuilder.Redirect.PIPE); // 将输出重定向到空的OutputStream + process = processBuilder.start(); + // 读取进程的输出流(可选) + InputStream inputStream = process.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + String line; + while ((line = reader.readLine()) != null) { + // 处理输出(可选) + stringBuilder.append(" * ").append(line).append("\n "); + } + reader.close(); + process.waitFor(WAIT_TIME, TimeUnit.SECONDS); + return stringBuilder.toString(); + } finally { + if(process != null){ + process.destroy(); + } + } + } /** * List转String * @param commands diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/help/SendMsgHelper.java b/app/src/main/java/com/trubitpro/uploadapkplugin/help/SendMsgHelper.java index 56927c5..02962f4 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/help/SendMsgHelper.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/help/SendMsgHelper.java @@ -1,13 +1,17 @@ package com.trubitpro.uploadapkplugin.help; import com.android.build.gradle.api.BaseVariant; +import com.trubitpro.uploadapkplugin.entry.FlutterGitBean; import com.trubitpro.uploadapkplugin.entry.lark.ElementsDTO; import com.trubitpro.uploadapkplugin.entry.lark.LarkRequestBean; import com.trubitpro.uploadapkplugin.entry.lark.TextDTO; import com.trubitpro.uploadapkplugin.pramars.SendLarkParams; + import org.gradle.api.Project; + import java.util.ArrayList; import java.util.List; + import groovy.json.JsonOutput; import okhttp3.MediaType; import okhttp3.Request; @@ -15,59 +19,61 @@ import okhttp3.Response; public final class SendMsgHelper { - public static void sendMsgToLark(BaseVariant variant, Project project, String dataDTO, String gitLog,String gitBranch) { + public static void sendMsgToLark(BaseVariant variant, Project project, String dataDTO, String gitLog, String gitBranch, FlutterGitBean flutterGitLog) { String defaultTitle = "测试包"; String defaultText = "最新开发测试包已上传 "; String defaultClickText = "点我进行下载"; String defaultLogTitle = "Git最近更新内容:\n "; - SendLarkParams feishuParams = SendLarkParams.getLarkParamsConfig(project); - String webHookHostUrl = feishuParams.webHookHostUrl; - if ( isEmpty(webHookHostUrl)) { + SendLarkParams larkParams = SendLarkParams.getLarkParamsConfig(project); + String webHookHostUrl = larkParams.webHookHostUrl; + if (isEmpty(webHookHostUrl)) { System.out.println("send to lark failure:webHookHostUrl is empty"); return; } - String flavorStr = getFlavorInfo(variant); - String title = feishuParams.contentTitle; + String flavorStr = getFlavorInfo(variant); + String title = larkParams.contentTitle; if (isEmpty(title)) { title = defaultTitle; } - String titleStr = flavorStr ; - String text = feishuParams.contentText; - if ( isEmpty(text)) { + String titleStr = flavorStr; + String text = larkParams.contentText; + if (isEmpty(text)) { text = defaultText; } - StringBuilder textStr = new StringBuilder("** ").append(title).append( "\n").append(text).append("** ").append(dataDTO).append(" \n"); - LarkRequestBean larkRequestBean = new LarkRequestBean(); - if ("interactive".equals(feishuParams.msgtype)) { + StringBuilder textStr = new StringBuilder("** ").append(title).append("\n").append(text).append("** ").append(dataDTO).append(" \n"); + LarkRequestBean larkRequestBean = new LarkRequestBean(); + if ("interactive".equals(larkParams.msgtype)) { LarkRequestBean.CardDTO cardDTO = new LarkRequestBean.CardDTO(); larkRequestBean.setMsg_type("interactive"); - LarkRequestBean.CardDTO.ConfigDTO cardConfigBean = new LarkRequestBean.CardDTO.ConfigDTO(); + LarkRequestBean.CardDTO.ConfigDTO cardConfigBean = new LarkRequestBean.CardDTO.ConfigDTO(); cardConfigBean.setWide_screen_mode(true); cardConfigBean.setEnable_forward(true); cardDTO.setConfig(cardConfigBean); - LarkRequestBean.CardDTO.HeaderDTO cardHeaderBean = new LarkRequestBean.CardDTO.HeaderDTO(); + LarkRequestBean.CardDTO.HeaderDTO cardHeaderBean = new LarkRequestBean.CardDTO.HeaderDTO(); cardHeaderBean.setTemplate("green"); TextDTO cardHeaderTitleBean = new TextDTO(); cardHeaderTitleBean.setTag("plain_text"); - String rocket="\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80 "; - cardHeaderTitleBean.setContent(rocket +"\n"+ titleStr); + String rocket = "\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80 "; + cardHeaderTitleBean.setContent(rocket + "\n" + titleStr); cardHeaderBean.setTitle(cardHeaderTitleBean); cardDTO.setHeader(cardHeaderBean); List elementsDTOList = new ArrayList<>(); + List elementsDTOList2 = new ArrayList<>(); + ElementsDTO elements1 = new ElementsDTO(); elements1.setTag("div"); TextDTO elements1TextBean = new TextDTO(); elements1TextBean.setTag("lark_md"); - String QRCode="https://cli.im/api/qrcode/code?text="+dataDTO+"&mhid=skKRBVu8y54hMHYoI9dQMKo"; + String QRCode = "https://cli.im/api/qrcode/code?text=" + dataDTO + "&mhid=skKRBVu8y54hMHYoI9dQMKo"; - textStr.append("![").append( isEmpty(feishuParams.clickTxt) ? defaultClickText : feishuParams.clickTxt) + textStr.append("![").append(isEmpty(larkParams.clickTxt) ? defaultClickText : larkParams.clickTxt) .append("]").append("(").append(dataDTO).append(")").append(""); // textStr.append("![").append( "").append("(").append(dataDTO).append(")"); // textStr.append("[查看下载二维码]").append("(").append(QRCode).append(")"); - if (feishuParams.isAtAll) { + if (larkParams.isAtAll) { textStr.append(" \n").append(""); } elements1TextBean.setContent(textStr.toString()); @@ -77,29 +83,36 @@ public static void sendMsgToLark(BaseVariant variant, Project project, String da elements2.setTag("hr"); elementsDTOList.add(elements2); - if (! isEmpty(gitLog) && feishuParams.isSupportGitLog) { - ElementsDTO elements3 = new ElementsDTO(); - elements3.setTag("div"); - TextDTO elements3TextBean = new TextDTO(); - elements3TextBean.setTag("lark_md"); - StringBuilder logStrBuilder = new StringBuilder("**").append("Current Branch:").append(gitBranch).append("**").append(defaultLogTitle).append("**").append(gitLog); - elements3TextBean.setContent(logStrBuilder.toString()); - elements3.setText(elements3TextBean); - elementsDTOList.add(elements3); - ElementsDTO elements4 = new ElementsDTO(); - elements4.setTag("hr"); - elementsDTOList.add(elements4); + StringBuilder logStrBuilder = new StringBuilder(); + ElementsDTO elements3 = new ElementsDTO(); + elements3.setTag("div"); + TextDTO elements3TextBean = new TextDTO(); + elements3TextBean.setTag("lark_md"); + if (!isEmpty(gitLog) && larkParams.isSupportGitLog) { + logStrBuilder.append("**").append("Current Branch:") + .append(gitBranch).append("**").append(defaultLogTitle).append("**") + .append(gitLog).append("\n"); } + if (larkParams.isBuildFlutter){ + logStrBuilder.append("**").append("Flutter Branch:").append(flutterGitLog.getFlutterGitBranch()).append("**").append(defaultLogTitle).append("**").append(flutterGitLog.getFlutterGitLog()); + } + elements3TextBean.setContent(logStrBuilder.toString()); + elements3.setText(elements3TextBean); + elementsDTOList.add(elements3); + ElementsDTO elements4 = new ElementsDTO(); + elements4.setTag("hr"); + elementsDTOList.add(elements4); + ElementsDTO elements5 = new ElementsDTO(); elements5.setTag("action"); List actionsList = new ArrayList<>(); ElementsDTO actionBtnDownBtn = new ElementsDTO(); actionBtnDownBtn.setTag("button"); actionBtnDownBtn.setType("primary"); - actionBtnDownBtn.setUrl( dataDTO); + actionBtnDownBtn.setUrl(dataDTO); TextDTO actionDownBtnText = new TextDTO(); actionDownBtnText.setTag("plain_text"); - actionDownBtnText.setContent( isEmpty(feishuParams.clickTxt) ? defaultClickText : feishuParams.clickTxt); + actionDownBtnText.setContent(isEmpty(larkParams.clickTxt) ? defaultClickText : larkParams.clickTxt); actionBtnDownBtn.setText(actionDownBtnText); actionsList.add(actionBtnDownBtn); @@ -114,43 +127,48 @@ public static void sendMsgToLark(BaseVariant variant, Project project, String da actionsList.add(actionBtnQRCodeBtn); elements5.setActions(actionsList); elementsDTOList.add(elements5); + cardDTO.setElements(elementsDTOList); larkRequestBean.setCard(cardDTO); } else { - LarkRequestBean.ContentDTO contentDTO = new LarkRequestBean.ContentDTO(); - + LarkRequestBean.ContentDTO contentDTO = new LarkRequestBean.ContentDTO(); larkRequestBean.setMsg_type("post"); - LarkRequestBean.ContentDTO.PostDTO postDTO = new LarkRequestBean.ContentDTO.PostDTO(); - - LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentBeanText = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); + LarkRequestBean.ContentDTO.PostDTO postDTO = new LarkRequestBean.ContentDTO.PostDTO(); + LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentBeanText = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); contentBeanText.setTag("text"); contentBeanText.setText(textStr.toString()); - LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentBeanA = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); + LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentBeanA = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); contentBeanA.setTag("a"); - contentBeanA.setText( isEmpty(feishuParams.clickTxt) ? defaultClickText : feishuParams.clickTxt); - contentBeanA.setHref( dataDTO); - List< LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean> contentBeans = new ArrayList<>(); + contentBeanA.setText(isEmpty(larkParams.clickTxt) ? defaultClickText : larkParams.clickTxt); + contentBeanA.setHref(dataDTO); + List contentBeans = new ArrayList<>(); contentBeans.add(contentBeanText); contentBeans.add(contentBeanA); - if (feishuParams.isAtAll) { - LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentBeanAt = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); + if (larkParams.isAtAll) { + LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentBeanAt = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); contentBeanAt.setTag("at"); contentBeanAt.setUser_id("all"); contentBeans.add(contentBeanAt); } - List> zhCnContentList = new ArrayList<>(); + List> zhCnContentList = new ArrayList<>(); zhCnContentList.add(contentBeans); - if (! isEmpty(gitLog) && feishuParams.isSupportGitLog) { - List< LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean> contentGitLogBeans = new ArrayList<>(); - LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentGitLogBeanText = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); - contentGitLogBeanText.setTag("text"); - StringBuilder logStrBuilder = new StringBuilder("**").append("Current Branch:").append(gitBranch).append("**").append(defaultLogTitle).append("**").append(gitLog); - contentGitLogBeanText.setText(logStrBuilder.toString()); - contentGitLogBeans.add(contentGitLogBeanText); - zhCnContentList.add(contentGitLogBeans); + + + List contentGitLogBeans = new ArrayList<>(); + LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean contentGitLogBeanText = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO.ContentBean(); + contentGitLogBeanText.setTag("text"); + StringBuilder logStrBuilder = new StringBuilder(); + if (!isEmpty(gitLog) && larkParams.isSupportGitLog) { + logStrBuilder.append("**").append("Current Branch:").append(gitBranch).append("**").append(defaultLogTitle).append("**").append(gitLog).append("\n"); + } + if (larkParams.isBuildFlutter) { + logStrBuilder.append("**").append("Flutter Branch:").append(flutterGitLog.getFlutterGitBranch()).append("**").append(defaultLogTitle).append("**").append(flutterGitLog.getFlutterGitLog()); } + contentGitLogBeanText.setText(logStrBuilder.toString()); + contentGitLogBeans.add(contentGitLogBeanText); + zhCnContentList.add(contentGitLogBeans); - LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO zhCnDTO = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO(); + LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO zhCnDTO = new LarkRequestBean.ContentDTO.PostDTO.ZhCnDTO(); zhCnDTO.setTitle(titleStr.toString()); zhCnDTO.setContent(zhCnContentList); postDTO.setZh_cn(zhCnDTO); @@ -192,9 +210,10 @@ public static void sendMsgToLark(BaseVariant variant, Project project, String da } private static String getFlavorInfo(BaseVariant variant) { - String flavor = isEmpty(variant.getName()) ? variant.getFlavorName() : variant.getName(); - return isEmpty(flavor) ? "" : "(FlavorName:" + flavor + ")"; + String flavor = isEmpty(variant.getName()) ? variant.getFlavorName() : variant.getName(); + return isEmpty(flavor) ? "" : "(FlavorName:" + flavor + ")"; } + public static boolean isEmpty(CharSequence s) { if (s == null) { return true; diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/help/SystemLogUitls.java b/app/src/main/java/com/trubitpro/uploadapkplugin/help/SystemLogUitls.java index 1d88806..1edf0b4 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/help/SystemLogUitls.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/help/SystemLogUitls.java @@ -4,6 +4,8 @@ public class SystemLogUitls { + + public final String BuildFlutterStart ="\n" + " _ _ _ _ ______ _ _ _ _____ _ _ \n" + "| | (_)| | | | | ___|| | | | | | / ___|| | | | \n" + @@ -27,4 +29,6 @@ public class SystemLogUitls { " \n" + " \n" ; + + } diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/pramars/TrubitProParams.java b/app/src/main/java/com/trubitpro/uploadapkplugin/pramars/TrubitProParams.java index f560b69..3339110 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/pramars/TrubitProParams.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/pramars/TrubitProParams.java @@ -1,6 +1,49 @@ package com.trubitpro.uploadapkplugin.pramars; +import org.gradle.api.Project; + public class TrubitProParams { + + + /** + * 上传的接口地址 方便切换 + */ + private String httpUpLoadUrl; + + /** + * 上传的key 一般来说默认是file + */ + private String upLoadKey; + + + public static TrubitProParams getTrubitProParamsConfig(Project project) { + + TrubitProParams extension = project.getExtensions().findByType(TrubitProParams.class); + if (extension == null) { + extension = new TrubitProParams(); + } + return extension; + } + + + public String getHttpUpLoadUrl() { + return httpUpLoadUrl; + } + + public void setHttpUpLoadUrl(String httpUpLoadUrl) { + this.httpUpLoadUrl = httpUpLoadUrl; + } + + public String getUpLoadKey() { + return upLoadKey; + } + + public void setUpLoadKey(String upLoadKey) { + this.upLoadKey = upLoadKey; + } + + + } diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/task/BaseTask.java b/app/src/main/java/com/trubitpro/uploadapkplugin/task/BaseTask.java index 74e60a6..8128941 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/task/BaseTask.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/task/BaseTask.java @@ -5,13 +5,17 @@ import com.android.build.gradle.api.BaseVariant; import com.google.gson.Gson; import com.trubitpro.uploadapkplugin.PluginConstants; +import com.trubitpro.uploadapkplugin.entry.FlutterGitBean; import com.trubitpro.uploadapkplugin.entry.LarkResult; -import com.trubitpro.uploadapkplugin.entry.PgyCOSTokenResult; import com.trubitpro.uploadapkplugin.help.CmdHelper; import com.trubitpro.uploadapkplugin.help.HttpHelper; +import com.trubitpro.uploadapkplugin.help.ProcessUtils; import com.trubitpro.uploadapkplugin.help.ProgressListener; import com.trubitpro.uploadapkplugin.help.ProgressRequestBody; import com.trubitpro.uploadapkplugin.help.SendMsgHelper; +import com.trubitpro.uploadapkplugin.pramars.GitLogParams; +import com.trubitpro.uploadapkplugin.pramars.SendLarkParams; +import com.trubitpro.uploadapkplugin.pramars.TrubitProParams; import org.gradle.api.DefaultTask; @@ -20,11 +24,9 @@ import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.Map; -import java.util.concurrent.TimeUnit; +import java.util.ArrayList; +import java.util.List; -import okhttp3.FormBody; -import okhttp3.HttpUrl; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.Request; @@ -40,6 +42,10 @@ public class BaseTask extends DefaultTask { protected BaseVariant mVariant; protected Project mTargetProject; + + public FlutterGitBean flutterGit; + + public void init(BaseVariant variant, Project project) { this.mVariant = variant; this.mTargetProject = project; @@ -49,7 +55,7 @@ public void init(BaseVariant variant, Project project) { /** - * 快速上传方式 获取上传的 token + * 上传apk 到自己服务器地址 * @param apkFile */ public void uploadPgyQuickWay(File apkFile) { @@ -75,13 +81,22 @@ public void onProgress(long currentBytes, long totalBytes) { } }); + TrubitProParams trubitProParams = TrubitProParams.getTrubitProParamsConfig(mTargetProject); + String url="https://test-api.trubit.com/member-api/api/v1/uploadApp"; + String fileKey="file"; + if (!trubitProParams.getHttpUpLoadUrl().isEmpty()){ + url=trubitProParams.getHttpUpLoadUrl(); + } + if (!trubitProParams.getUpLoadKey().isEmpty()){ + fileKey=trubitProParams.getUpLoadKey(); + } MultipartBody mBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) - .addFormDataPart("file" , name , progressRequestBody) + .addFormDataPart(fileKey , name , progressRequestBody) .build(); Request request = new Request.Builder() - .url("https://test-api.trubit.com/member-api/api/v1/uploadApp") + .url(url) .post(mBody) .build(); System.out.println("\n******************* TrubitPro 上传: Start *******************"); @@ -101,12 +116,39 @@ public void onProgress(long currentBytes, long totalBytes) { } if (larkResult.getData() != null) { String apkDownUrl = larkResult.getData(); + flutterGit=new FlutterGitBean("",""); System.out.println("\n 上传成功,应用链接: " + apkDownUrl); String gitLog = CmdHelper.checkGetGitParamsWithLog(mTargetProject); - System.out.println("\n Git log 日志列表:\n" + gitLog); String gitBranch = CmdHelper.exeCmd( "git symbolic-ref --short HEAD",false); - System.out.println("\n TrubitPro=========当前git=Branch====="+gitBranch); - SendMsgHelper.sendMsgToLark(mVariant, mTargetProject, larkResult.getData(), gitLog,gitBranch); + System.out.println("\n Android Project Git branch :\n" + gitBranch); + System.out.println("\n Android Project Git log 日志列表:\n" + gitLog); + SendLarkParams larkParams = SendLarkParams.getLarkParamsConfig(mTargetProject); + GitLogParams gitLogParams = GitLogParams.getGitParamsConfig(mTargetProject); + + List commend2 = new ArrayList<>(); + commend2.add("bash"); + commend2.add("-c"); + commend2.add("cd ../mexo_flutter_module && git symbolic-ref --short HEAD"); + List commend3 = new ArrayList<>(); + commend3.add("bash"); + commend3.add("-c"); + StringBuilder sb = new StringBuilder(); + sb.append("cd ../mexo_flutter_module && git log --oneline --pretty=format:\"%an—>%s\" --no-merges --since=") + .append(gitLogParams.gitLogHistoryDayTime).append("days --max-count=").append(gitLogParams.gitLogMaxCount); + commend3.add(sb.toString()); + try { + String flutterBranch = ProcessUtils.exeCmd(commend2); + String flutterLog = ProcessUtils.exeCmd(commend3); + flutterGit.setFlutterGitLog(flutterLog); + flutterGit.setFlutterGitBranch(flutterBranch); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (larkParams.isBuildFlutter){ + System.out.println("\n Flutter Project Git branch :\n" + flutterGit.getFlutterGitBranch()); + System.out.println("\n Flutter Project Git log 日志列表:\n" + flutterGit.getFlutterGitLog()); + } + SendMsgHelper.sendMsgToLark(mVariant, mTargetProject, larkResult.getData(), gitLog,gitBranch,flutterGit); } else { System.out.println("\n TrubitPro=========buildInfo: upload pgy result error : data is empty"); } diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/task/BuildFlutterTask.java b/app/src/main/java/com/trubitpro/uploadapkplugin/task/BuildFlutterTask.java index a54674f..3f30d98 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/task/BuildFlutterTask.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/task/BuildFlutterTask.java @@ -2,10 +2,13 @@ import com.android.build.gradle.api.BaseVariantOutput; +import com.trubitpro.uploadapkplugin.entry.FlutterGitBean; +import com.trubitpro.uploadapkplugin.help.CmdHelper; import com.trubitpro.uploadapkplugin.help.ProcessUtils; import com.trubitpro.uploadapkplugin.help.SystemLogUitls; import org.gradle.api.GradleException; +import org.gradle.api.Project; import org.gradle.api.tasks.TaskAction; import java.io.File; @@ -28,7 +31,7 @@ public static void buildFlutter() { commend.add("-c"); commend.add("cd ../mexo_flutter_module && pwd && flutter clean && flutter pub get && flutter build aar"); try { - ProcessUtils.exec(commend); + ProcessUtils.exec(commend); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/task/OnlyUploadTask.java b/app/src/main/java/com/trubitpro/uploadapkplugin/task/OnlyUploadTask.java index de6463c..47ecf97 100644 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/task/OnlyUploadTask.java +++ b/app/src/main/java/com/trubitpro/uploadapkplugin/task/OnlyUploadTask.java @@ -2,9 +2,6 @@ import com.android.build.gradle.api.BaseVariantOutput; -import com.trubitpro.uploadapkplugin.help.ProcessUtils; -import com.trubitpro.uploadapkplugin.help.SystemLogUitls; -import com.trubitpro.uploadapkplugin.pramars.UploadPgyParams; import org.gradle.api.GradleException; @@ -47,7 +44,6 @@ public void uploadToServer() { if (apk == null || !apk.exists()) { throw new GradleException("The compiled APK file to upload does not exist!"); } - System.out.println("Final upload apk path: " + apk.getAbsolutePath()); uploadPgyQuickWay( apk); } diff --git a/app/src/main/java/com/trubitpro/uploadapkplugin/test.java b/app/src/main/java/com/trubitpro/uploadapkplugin/test.java deleted file mode 100644 index 285fd66..0000000 --- a/app/src/main/java/com/trubitpro/uploadapkplugin/test.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.trubitpro.uploadapkplugin; - -import com.trubitpro.uploadapkplugin.task.BaseTask; - -import java.io.File; - -public class test { - - - public static void main(String[] args) { - BaseTask baseTask=new BaseTask(); - File baseFile=new File("/Users/wuao/AndroidStudioProjects/MyApplication3/app/build/outputs/apk/Facebook/debug/app-Facebook-debug.apk"); - baseTask .uploadPgyQuickWay(baseFile); - } -}