Gradle传递System Property

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

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

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

而我们使用

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

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

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

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

参考链接


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

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

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

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

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

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

重启Tomcat的服务

参考链接


Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型

腾讯云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更换国内源

今天发现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参考如下代码:

参考链接


macOS Catalina(10.15.6)文件大量变动后mds/mds_stores/mdworker引发系统卡顿

最近在执行bash gradlew clean build之后,macOS Catalina(10.15.6)系统处于长时间的卡顿状态。尽管已经编译结束了,依旧要持续非常长的一段时间才能恢复顺畅。

在执行top命令之后,发现进程mds,mds_stores 持续维持在高负荷运行状态,基本上把CPU跟磁盘IO全部占用。

网上搜索了一下,这两个服务是macOS Catalina(10.15.6)系统的索引服务,由于编译过程中瞬间删除,又重新产生大量的临时文件,数量在几万个,大小达到若干GB。索引服务尝试对这些文件进行索引,引起极大的系统开销。

解决方法就是临时或者永久关闭索引服务

重新打开的话,执行

参考连接


Mac系统 mds、mds_stores、mdworker 占cpu很高,以及这些进程是干啥的