2行代码就能实现HTML自动化转图片!

我们构建组除了负责bk-ci插件开发,还负责监控使用构建平台的所有项目的打包流水线、质量检查流水线的执行情况。

最初,这些都是让实习生来手动查看质量流水线的执行情况、再做表,跟进、然后手动发到群里。

今年中,我在研究了bk-ci的API后,已经将其改为自动抓取和生成报表,但仅作为参考。 报表使用Velocity模版引擎生成,是一个HTML文件,然后通过邮件发送。

不过邮件的实效性并不强,有时候会积累很多封邮件,也不知处理了没有。

阅读全文
区分gradle三个不同层次的依赖

Gradle是一个非常灵活、强大的构建系统,但其概念也相对复杂,但只要抓住核心,做好区分,就不会觉得混乱。

下面的构建脚本,是否觉得难以理解:

buildscript {
    构建脚本依赖的仓库
    repositories {
        mavenCentral()
    }
    // 构建脚本依赖
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
    }
}
repositories {
    mavenCentral()
    jcenter()
    google()
}
dependencies {
    implementation 'com.google.guava:guava:30.1-jre'
    testImplementation 'junit:junit:4.13.2'
}  
plugins {
      id 'com.android.application'
      id 'org.jetbrains.kotlin.jvm' version '1.5.10'
}

阅读全文
Invalid cookie header Invalid 'expires' attribute

当请求URL返回的cookie中expires为如下格式时,

Expires=Mon, 26 Apr 2021 14:34:27 GMT

报错:

Invalid 'expires' attribute: Mon, 26 Apr 2021 14:34:27 GMT

按网上说法修改CookiePolicyCookieSpec,实际都无效果。这是因为使用的httpclient库并不支持这种新格式(定义于RFC 6265)。

可以使用Apache HttpClient5解决此问题,此版本已支持最新格式。这是一个新版本,有不同的artifactId

Maven中使用如下方式引用依赖:

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5-fluent -->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5-fluent</artifactId>
    <version>5.1.3</version>
</dependency>

阅读全文
不打开编辑器配置UE4 Android NDK SDK和JDK

为什么不打开编辑器呢?

因为构建机GPU配置太差了,打不开……

这里介绍个直接修改UE4配置文件的方法。

BaseEngine.ini中,设置如下变量即可:

[/Script/AndroidPlatformEditor.AndroidSDKSettings]
SDKAPILevel=latest
NDKAPILevel=android-21
SDKPath=(Path="D:/Android/SDK")
NDKPath=(Path="D:/Android/NDK")
JavaPath=(Path="D:/Android/OpenJDK")

特别注意JDK路径的KeyJavaPath,而非官方文档上写的JDKPath,我这里使用的为UE4.27,测试可用。

阅读全文
找不到sun.misc.BASE64Encoder类报错原因及修复方法

调用apktool工具签名apk时遇到sun/misc/BASE64Encoder报错。

是因为此类只在jdk1.8之前的版本存在,jdk9以后的版本,就不存在了。

检查环境的JDK版本为11,所以会报错。

解决办法也明了,安装JDK8。

这里介绍个Windows 10下一键安装JDK8的方法,直接cmd窗口执行以下命令即可:

winget install AdoptOpenJDK.OpenJDK.8

安装后,JDK位于C:\Program Files\AdoptOpenJDK\jdk-8.0.292.10-hotspot

阅读全文
gradle构建涉及的几个文件介绍

Ant只有build.xmlMaven只有pom.xml不同,使用gradle的项目一般有以下几个文件:

gradlew
gradlew.bat

build.gradle
gradle.properties

gradle/gradle-wrapper.jar
gradle/gradle-wrapper.properties

在调用顺序上,gradlew(Windows下为gradlew.bat)读取gradle.properties配置文件内容,然后执行build.gradle构建脚本,而build.gradle脚本可以从gradle.properties中读取属性值。此设计的好处是用户无需预先安装gradle到本地,gradlew脚本会自动下载。下文会详述。

阅读全文
Gradle依赖使用最新版本

Gradle中配置依赖,如果不指定版本,是会报错找不到依赖的。 但如果依赖很多,还需要去仓库一个个看依赖库的最新版本是多少。

那么gradle是否支持直接使用依赖的最新版本呢? 答案是肯定的,不过在gradle的文档中并没有在显著位置标识。

方式就是在version处填加号+gradle就会去自动识别最新版本去下载。

全部指定最新版本后,再根据日志去解决个别依赖冲突报错,事半功倍。

阅读全文