腾讯云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很高,以及这些进程是干啥的

Robolectric单元测试报错“ReflectionHelpers.java java.lang.IllegalAccessException at UnsafeFieldAccessorImpl.java”

macOS Catalina 10.15.6,使用HomeBrew执行brew install java,安装了目前最新的openjdk-14.0.1之后,执行bash gradlew clean build,报告如下错误信息:

目前测试发现,升级Robolectric版本并不能解决问题。其实对于Android Studio来说,完全可以指定Android Studio自带的JDK进行编译。

关闭SHELL,之后重新打开新的SHELL,重新执行编译命令即可。

建议Android版本发布使用的JDK就是Android Studio自带的JDK,这样可以保证应用的稳定性,减少由于JDK差异导致的各种问题。

当前建议的版本

参考链接


Robolectric单元测试报错“org.mockito.exceptions.base.MockitoException Caused by: java.lang.ClassCastException”

使用Robolectric进行Android代码测试的时候,随着测试用例的增多,可能会报告如下错误(Windows下常见):

原因为Mockto使用了编译缓存导致加载类的时候出现异常。解决方法是禁止Mockto缓存测试类的代码。

Android测试项目的src/test/java下创建一个名为org.mockito.configuration的包,然后实现一个名为MockitoConfiguration.java的类,如下:

这样当再次执行测试用例的时候,就已经不使用缓存了。

参考链接