Centos 7配置Jenkins构建Android持续集成(离线内网环境)

安装配置Jenkins

为了安全考虑,首先需要解锁Jenkins

继续阅读Centos 7配置Jenkins构建Android持续集成(离线内网环境)

Gradle传递System Property

最近在搭建Jenkins环境,实现Android自动化编译的过程中,由于内网服务器不能访问外网,因此只能配置Robolectric访问内网的服务器。

根据官方文档 Configuring Robolectric,发现如果要更改Robolectric默认的下载服务器链接地址,需要在项目的每个lib库中都配置如下参数,才能实现:

但是这样配置有一个问题,就是没办法动态调整链接地址。

而我们使用

手工指定的参数,并没有在编译的时候生效。

参数丢失的原因是因为测试用例在新的JVM中执行,传入的参数不会自动带给新创建的JVM

这时需要在Gradle脚本中将读到的值重新设到系统属性里面,才可以被Java程序读到。

每个项目的build.gradle中都增加上面的配置之后,就可以保证在外部编译的时候动态指定参数了。

Android Studio Chipmunk | 2021.2.1 Patch 1 以及以上的版本,可能会发生如下报错:

该报错的原因是 Android Studio 没有正确读取我们配置的 robolectric.dependency.repo.url 环境变量,导致无法成功下载,当然也可能是由于高版本不支持 HTTP ,链接地址必须是 HTTPS 导致此问题,这个没有深究。

解决方法是,在命令行执行

确保在当前用户目录下的 .m2 目录下,成功完成 robolectric 需要的全部文件的下载。这样,执行测试用例的时候,就可以从本地获取依赖文件,而不需要再去服务器上获取。

参考链接


Ubuntu Server 18.04 LTS隐藏Tomcat-9.0.16.0的版本号与操作系统类型

推荐方案

另外更推荐的方法是通过 Tomcat 的配置文件完成,而不是修改代码,具体配置方法为:

conf/server.xml 配置文件中的 <Host> 配置项中添加如下配置:

配置项说明:

  • showReport:默认值为true,默认显示报错信息
  • showServerInfo:默认值为true,默认显示Tomcat的版本号

其他方案

其他的方案跟  Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型 是一致的,但是具体的细节上存在不小的差异,还是需要记录一下。

可以看到里面的内容如下:

直接注释掉里面的内容,如下:

修改完成后,把修改完成的数据存储到catalina.jar中。

把修改后的catalina.jar放回到Tomcat的目录下面:

重启Tomcat的服务

参考链接


腾讯云Ubuntu Server 16.04.7 LTS升级系统到Ubuntu Server 18.04.5 LTS之后letsencrypt证书更新出现异常“ImportError: cannot import name _remove_dead_weakref”

腾讯云Ubuntu Server 16.04.7 LTS升级系统到Ubuntu Server 18.04.5 LTS之后,letsencrypt证书更新出现异常,如下:

原因为系统版本变化过大导致以前安装的Python组件不能适应最新的系统,最简单的方法就是删除之前安装的Python组件,让letsencrypt重新安装即可。

参考链接


Cannot renew certificate “ImportError: cannot import name _remove_dead_weakref”

腾讯云Ubuntu Server 16.04.7 LTS升级系统到Ubuntu Server 18.04.5 LTS

参考 阿里云ECS ubuntu 14.04.5 LTS升级到ubuntu 16.04.2 LTS / 阿里云从ubuntu16.04.5升级到ubuntu 18.04.3后调整PHP 7.0到PHP 7.2 整个的升级步骤是差不多的,腾讯的升级流程更加顺利。

但是在升级完成之后,遇到了一个域名解析问题,报错如下:

这个原因是因为我们在安装过程中,覆盖了腾讯设置的域名解析服务配置文件。

这个配置文件是/etc/resolv.conf

但是,在Ubuntu Server 18.04.5 LTS系统上,直接修改/etc/resolv.conf的话,重启系统之后,设置会被还原。我们需要修改/etc/systemd/resolved.conf才行。

根据地域的不同,服务器的地址存在差异,参考下面的脚本即可。

广州服务器:

上海服务器:

香港服务器:

参考链接


warn: multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?

编辑strings.xml的时候

或者

提示下面的错误

出现这个错误的原因主要是因为strings字串中包含百分号(%),

有几种方式解决

1.用两个百分号表示一个百分号即

2.用转义符表示

二:无需格式化

根据错误提示可知,如果字符串无需格式化,可在<string> 标签上增加属性:formatted="false",即

三:关于上面问题的延伸

如果你需要使用String.format(String, Object...) 来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:

在这个例子中,这个格式化的字符串有2个参数, %1$s是个字符串%2$d是个浮点数,你可以在你的程序中按照下面的方法来根据参数来格式化字符串:

目前AndroidSDK已经支持直接格式化字符串,不需要使用String.format(String, Object...) ,如下

那么根据例子上说的我需要把%s换成%1$s才行了,修改后编译通过,程序成功启动。

参考链接


Ubuntu 18.04/20.04更换国内源

今天发现cn.archive.ubuntu.com不能更新了,只能换成国内源:

参考链接


ubuntu 阿里云源

关于提示“The type StringEscapeUtils is deprecated”问题的解决

如题所示,之前一直使用commons-lang3-3.x.jar 这个jar包里面的 org.apache.commons.lang3.StringEscapeUtils 类来转义特殊字符,但是最近发现使用这个类会出现以下提示:

看提示是说 StringEscapeUtils 这个类已经过期了,提醒使用新的替代类。看了下这个类的官方文档,很自然地找到了新的替代类——org.apache.commons.text.StringEscapeUtils

因此,使用Maven引用相应的jar包即可解决这个问题:

或者直接去Maven仓库下载这个jar包,下载地址如下:http://mvnrepository.com/artifact/org.apache.commons/commons-text/1.1

参考链接


关于提示“The type StringEscapeUtils is deprecated”问题的解决

apache日志中的中文如何显示?

 apache日志记录的中文,是内码如下:

编码后中文是:

完全看不懂是什么意思,如何解析出里面的中文出来呢?

php参考如下代码:

golang参考如下代码:

java参考如下代码:

参考链接