Skip to content

Commit

Permalink
feat
Browse files Browse the repository at this point in the history
1 新增了参数 是否编译打包Flutter 项目
2 新增了编译打包Flutter AArR
3 修改了日志打印提示
  • Loading branch information
wuao committed Sep 11, 2023
1 parent 97c567c commit 77350a3
Show file tree
Hide file tree
Showing 10 changed files with 228 additions and 208 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ public class PluginConstants {

public static final String ANDROID_EXTENSION_NAME = "android";
public static final String TASK_EXTENSION_NAME = "ApkBuildUploadPlatform";
public static final String TASK_EXTENSION_NAME_ONLY_UPLOAD = "OnlyUploadApkToPlatform";
public static final String TASK_BUILD_FLUTTER_EXTENSION_NAME = "buildFlutterParams";

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,39 @@

import com.android.build.gradle.AppExtension;
import com.android.build.gradle.api.ApplicationVariant;
import com.android.build.gradle.api.BaseVariant;
import com.trubitpro.uploadapkplugin.help.CmdHelper;
import com.trubitpro.uploadapkplugin.help.ProcessUtils;
import com.google.gson.Gson;
import com.trubitpro.uploadapkplugin.pramars.GitLogParams;
import com.trubitpro.uploadapkplugin.pramars.SendLarkParams;
import com.trubitpro.uploadapkplugin.pramars.UploadPgyParams;
import com.trubitpro.uploadapkplugin.task.BuildFlutterTask;
import com.trubitpro.uploadapkplugin.task.OnlyUploadTask;

import org.gradle.api.Action;
import org.gradle.api.DomainObjectSet;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.jetbrains.annotations.NotNull;

import java.util.Iterator;
import java.util.Locale;

import kotlin.jvm.internal.Intrinsics;

public class UploadApkPlugin implements Plugin<Project> {
int process = 0;
@Override
public void apply(Project target) {
target.getExtensions().create(PluginConstants.GIT_LOG_PARAMS_NAME, GitLogParams.class);

SendLarkParams uploadParams = (SendLarkParams)target.getExtensions().create(PluginConstants.UPLOAD_PARAMS_NAME, SendLarkParams.class, new Object[0]);

target.getExtensions().create(PluginConstants.UPLOAD_PARAMS_NAME, SendLarkParams.class);
target.afterEvaluate(project1 -> {
SendLarkParams sendLarkParams = target.getExtensions().getByType(SendLarkParams.class);
AppExtension appExtension = ((AppExtension) project1.getExtensions().findByName(PluginConstants.ANDROID_EXTENSION_NAME));
if (appExtension == null) {
return;
}
if(sendLarkParams.isBuildFlutter){
BuildFlutterTask.buildFlutter();
}
DomainObjectSet<ApplicationVariant> appVariants = appExtension.getApplicationVariants();
for (ApplicationVariant applicationVariant : appVariants) {
if (applicationVariant.getBuildType() != null) {
dependsOnTask(applicationVariant, true, project1);
}
}
});
OnlyUploadTask uploadTask = target.getTasks()
.create(PluginConstants.TASK_EXTENSION_NAME_ONLY_UPLOAD, OnlyUploadTask.class);
uploadTask.init( null, target);

}


Expand All @@ -53,14 +44,12 @@ private void dependsOnTask(ApplicationVariant applicationVariant, boolean isIni
if (variantName.isEmpty()) {
variantName ="Release" ;
}
//创建我们,上传到蒲公英的task任务
OnlyUploadTask uploadTask = project1.getTasks()
.create(PluginConstants.TASK_EXTENSION_NAME + variantName, OnlyUploadTask.class);
uploadTask.init( isInit?applicationVariant:null, project1);
//依赖关系 。上传依赖打包,打包依赖clean。
if (isInit){
applicationVariant.getAssembleProvider().get().dependsOn(project1.getTasks().findByName("clean"));
uploadTask.dependsOn(applicationVariant.getAssembleProvider().get());
uploadTask.dependsOn(applicationVariant.getAssembleProvider().get());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,9 @@ public class CmdHelper {
private static final int LOG_MAX_COUNT = 50;
private static final int LOG_MIN_COUNT = 10;
private static final String GIT_LOG_BASIC_CMD = "git log --oneline --pretty=format:\"%an—>%s\" --no-merges";
public static final String gitLogCmd = GIT_LOG_BASIC_CMD + " --since=\"2022-8-30\" --until=\"2022-9-1\"";
/**
* %ai 是时间,格式:2022-08-31 23:18:48 +0800
*/
public static final String gitLogCmd2 = "git log --oneline --pretty=format:\"%ai,%an:%s\" --no-merges --since=2days";
public static final String gitLogCmd3 = GIT_LOG_BASIC_CMD + " --max-count=10";

public static String checkGetGitParamsWithLog(Project project) {
GitLogParams gitLogParams = GitLogParams.getGitParamsConfig(project);
Expand All @@ -43,91 +40,18 @@ public static String getGitLogByTimeAndCount(int logDayTime, int logMaxCount) {
}
}
logBuilder.append(" --max-count=").append(logMaxCount);
System.out.println("获取Git log 外部命令\n" + logBuilder.toString());
System.out.println("获取Git Log外部命令=========\n" + logBuilder.toString());
return exeCmd(logBuilder.toString(),true);
}


public static boolean exeBuildFlutterAar(){

BufferedReader bufferedReader = null;
Process p = null;
String cdFir="cd ../mexo_flutter_module&&pwd&&flutter clear&&flutter build aar";
try {
p = Runtime.getRuntime().exec(cdFir );
System.out.println("cdFir Start");
Print(p,cdFir);
int exitVal = p.waitFor();
System.out.println("cdFir End==="+exitVal);
if (exitVal==0){
return true;
}

} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (p != null) {
try {
p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return false;


}


private static void Print(Process p, String s){
BufferedReader bufferedReader=null;
try {
bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8));
StringBuilder stringBuilder = new StringBuilder();
String line;
int count = 0;
while ((line = bufferedReader.readLine()) != null) {
++count;
stringBuilder.append(count).append(". ").append(line).append("\n ");
}
System.out.println( s+" result:\n" + stringBuilder);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (p != null) {
try {
p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

public static String exeCmd(String commandStr,boolean isFor) {
BufferedReader bufferedReader = null;
Process p = null;
try {
//java 调用外部命令
p = Runtime.getRuntime().exec(commandStr);
//Charset.forName("UTF-8")
bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8));
StringBuilder stringBuilder = new StringBuilder();
String line;
Expand All @@ -141,7 +65,6 @@ public static String exeCmd(String commandStr,boolean isFor) {
line = bufferedReader.readLine();
stringBuilder. append(line).append("\n ");
}
System.out.println("ExeCmd result:\n" + stringBuilder);
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
Expand Down
127 changes: 42 additions & 85 deletions app/src/main/java/com/trubitpro/uploadapkplugin/help/ProcessUtils.java
Original file line number Diff line number Diff line change
@@ -1,108 +1,65 @@
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 {
/**
* @param timeout 超时时长
* @param fileDir 所运行程序路径
* @param command 程序所要执行的命令
* 运行一个外部命令,返回状态.若超过指定的超时时间,抛出TimeoutException
*/
public static int executeProcess(final long timeout, File fileDir, final String command)
throws IOException, InterruptedException, TimeoutException {
Process process = Runtime.getRuntime().exec(command, null, fileDir);
Worker worker = new Worker(process);
worker.start();
try {
worker.join(timeout);
if (worker.exit != null){
return worker.exit;
} else{
throw new TimeoutException();
}
} catch (InterruptedException ex) {
worker.interrupt();
Thread.currentThread().interrupt();
throw ex;
}
finally {
process.destroy();
}
}

private static class Worker extends Thread {
private final Process process;
private Integer exit;

private Worker(Process process) {
this.process = process;
}
private static final Integer WAIT_TIME = 60;

/**
* 执行脚本命令
* @param commands
* @throws
*/
public static Integer exec(List<String> commands) throws Exception{

@Override
public void run() {
InputStream errorStream = null;
InputStream inputStream = null;
String[] arrCommands = list2Array(commands);
ProcessBuilder processBuilder = new ProcessBuilder(arrCommands);
processBuilder.redirectErrorStream(true);
Process process = null;
try {
errorStream = process.getErrorStream();
inputStream = process.getInputStream();
readStreamInfo(errorStream, inputStream);
exit = process.waitFor();
process.destroy();
if (exit == 0) {
System.out.println("子进程正常完成");
} else {
System.out.println("子进程异常结束");
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) {
// 处理输出(可选)
System.out.println(line);
}
reader.close();
process.waitFor(WAIT_TIME, TimeUnit.SECONDS);
return process.exitValue();
} finally {
if(process != null){
process.destroy();
}
} catch (InterruptedException ignore) {
return;
}
}
}

/**
* 读取RunTime.exec运行子进程的输入流 和 异常流
* @param inputStreams 输入流
* List转String
* @param commands
* @return
*/
public static void readStreamInfo(InputStream... inputStreams){
ExecutorService executorService = Executors.newFixedThreadPool(inputStreams.length);
for (InputStream in : inputStreams) {
executorService.execute(new MyThread(in));
}
executorService.shutdown();
private static String[] list2Array(List<String> commands){
String[] commends = new String[commands.size()];
commands.toArray(commends);
return commends;
}
public static class MyThread implements Runnable {

private InputStream in;
public MyThread(InputStream in){
this.in = in;
}

@Override
public void run() {
try{
BufferedReader br = new BufferedReader(new InputStreamReader(in, "GBK"));
String line = null;
while((line = br.readLine())!=null){
System.out.println(" inputStream: " + line);
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

}
}
Loading

0 comments on commit 77350a3

Please sign in to comment.