|
| 1 | +import groovy.json.JsonSlurper |
| 2 | + |
| 3 | +// 打包测试环境 apk 上传蒲公英 |
| 4 | +task packageApk { |
| 5 | + // 让packageApk 依赖于assembleRelease(Debug). 包构建成功后 |
| 6 | + //才会执行uploadApk() |
| 7 | + dependsOn("assemble" + BUILD_TYPE.capitalize()) |
| 8 | + doLast { |
| 9 | + uploadApk() |
| 10 | + } |
| 11 | +} |
| 12 | + |
| 13 | +def uploadApk() { |
| 14 | + // 查找上传的 apk 文件, 这里需要换成自己 apk 路径" |
| 15 | + def apkDir = new File("./app/build/outputs/apk/${BUILD_TYPE}") |
| 16 | + def apk = null |
| 17 | + for (int i = apkDir.listFiles().length - 1; i >= 0; i--) { |
| 18 | + File file = apkDir.listFiles()[i] |
| 19 | + if (file.name.endsWith(".apk")) { |
| 20 | + apk = file |
| 21 | + break |
| 22 | + } |
| 23 | + } |
| 24 | + if (apk == null || !apk.exists()) { |
| 25 | + throw new RuntimeException("apk file not exists!") |
| 26 | + } |
| 27 | + println "*************** upload start ***************" |
| 28 | + |
| 29 | + String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成 |
| 30 | + String PREFIX = "--", LINE_END = "\r\n"; |
| 31 | + String CONTENT_TYPE = "multipart/form-data"; // 内容类型 |
| 32 | + |
| 33 | + try { |
| 34 | + URL url = new URL("https://www.pgyer.com/apiv2/app/upload"); |
| 35 | + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
| 36 | + conn.setReadTimeout(30000); |
| 37 | + conn.setConnectTimeout(30000); |
| 38 | + conn.setDoInput(true); // 允许输入流 |
| 39 | + conn.setDoOutput(true); // 允许输出流 |
| 40 | + conn.setUseCaches(false); // 不允许使用缓存 |
| 41 | + conn.setRequestMethod("POST"); // 请求方式 |
| 42 | + conn.setRequestProperty("Charset", "UTF-8"); // 设置编码 |
| 43 | + conn.setRequestProperty("connection", "keep-alive"); |
| 44 | + conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); |
| 45 | + DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); |
| 46 | + |
| 47 | + StringBuffer sb = new StringBuffer(); |
| 48 | + sb.append(PREFIX).append(BOUNDARY).append(LINE_END);//分界符 |
| 49 | + sb.append("Content-Disposition: form-data; name=\"" + "_api_key" + "\"" + LINE_END); |
| 50 | + sb.append("Content-Type: text/plain; charset=UTF-8" + LINE_END); |
| 51 | + sb.append(LINE_END); |
| 52 | + sb.append("f5d3c04a2f4fc48b8b2c65eb5c331526"); |
| 53 | + sb.append(LINE_END);//换行! |
| 54 | + |
| 55 | + |
| 56 | + if (apk != null) { |
| 57 | + |
| 58 | + sb.append(PREFIX); |
| 59 | + sb.append(BOUNDARY); |
| 60 | + sb.append(LINE_END); |
| 61 | + /** |
| 62 | + * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 |
| 63 | + * filename是文件的名字,包含后缀名的 比如:abc.png |
| 64 | + */ |
| 65 | + sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + apk.getName() + "\"" + LINE_END); |
| 66 | + sb.append("Content-Type: application/octet-stream; charset=UTF-8" + LINE_END); |
| 67 | + sb.append(LINE_END); |
| 68 | + dos.write(sb.toString().getBytes()) |
| 69 | + |
| 70 | + InputStream is = new FileInputStream(apk) |
| 71 | + byte[] bytes = new byte[1024]; |
| 72 | + int len = 0; |
| 73 | + while ((len = is.read(bytes)) != -1) { |
| 74 | + dos.write(bytes, 0, len); |
| 75 | + } |
| 76 | + is.close(); |
| 77 | + dos.write(LINE_END.getBytes()); |
| 78 | + byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes(); |
| 79 | + |
| 80 | + dos.write(end_data); |
| 81 | + dos.flush(); |
| 82 | + |
| 83 | + int res = conn.getResponseCode(); |
| 84 | + if (res == 200) { |
| 85 | + println("Upload request success"); |
| 86 | + BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())) |
| 87 | + StringBuffer ret = new StringBuffer(); |
| 88 | + String line |
| 89 | + while ((line = br.readLine()) != null) { |
| 90 | + ret.append(line) |
| 91 | + } |
| 92 | + String result = ret.toString(); |
| 93 | + println("Upload result : " + result); |
| 94 | + |
| 95 | + def resp = new JsonSlurper().parseText(result) |
| 96 | + println result |
| 97 | + println "*************** upload finish ***************" |
| 98 | + sendMsgToDing(resp.data) |
| 99 | + } |
| 100 | + } |
| 101 | + } catch (MalformedURLException e) { |
| 102 | + e.printStackTrace(); |
| 103 | + } catch (IOException e) { |
| 104 | + e.printStackTrace(); |
| 105 | + } |
| 106 | +} |
0 commit comments