防止系统字体大小变化导致app字体大小变化

大屏手机,防止系统字体大小变化导致app字体大小变化。本来是这样写的,但是在25601440上表现出现是要相对耗时500ms,而xiaop

Configuration config = context.getResources().getConfiguration(); config.fontScale = 1; context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());

所以,改成下面的写法,当fontScale不等于1的时候,设置fontScale等于1,就不会对ui有耗时的表现

Configuration config = context.getResources().getConfiguration(); if (config.fontScale != 1) { config.fontScale = 1; context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); }

小米手机在android studio ide上run不了的奇葩问题

instant run会导致一直报有一个新的app在手机里,要卸载

Error:Execution failed for task ‘:app:transformClassesWithInstantRunForDebug’.

android/hardware/fingerprint/FingerprintManager$AuthenticationCallback

终极方案:
关instant run+关miui优化+开usb安装+开未知来源

idea使用单元测试并且合理查看代码覆盖率

没有单元测试的代码是不可靠的,写好类的同时需要些单元测试,尽量保证代码覆盖率高,来保证代码比较高的无故障率。

代码覆盖率:写的单元测试覆盖着类的行数和方法数。方法数是指单元测试覆盖了被测试类的多少个方法,行数是指单元测试覆盖了多少个逻辑分支,例如ifelse。

idea里如何看代码覆盖率:
先写被测试类,写好了以后,按快捷键commant+shift+t,创建一个测试类,写好测试类。在测试类右键点击“run ‘xxx’ with” coverage,运行后,在类右边就可以看到覆盖了多少方法数和行数。
在Edit Configurations 里可以选择单元测试的引擎,有idea和jacoco两个选择。
所以每次写好类后(尤其是工具类),要写好单元测试,尽量覆盖所有的逻辑分支,而case的质量则影响单元测试的正确性和深度。覆盖率并不能减少所有的错误,但是可以减少逻辑错误。

android颜色的一个坑

在使用android xml的背景颜色值的时候,有个需求,有两种不同的case,一种是选中,一种是不选中,不选中表现为整体透明,方案为在layout上加一个view,然后这view的颜色值为#99ffffff的透明颜色值。

现象:下面的这个layout如果加了shape的圆角,会发现四个角有问题,查了好久,还以为是shape的问题,结果发现是上面这个透明view的问题,虽然是透明,但是还是有值,所以会看到四个角有颜色,而不是全部是圆角。

解决方案:透明层也要加shape圆角。。

android生成jni的c++部分的坑(集成openssl)

jni里集成openssl,最好在build.gradle做些处理

sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir 'src/main/jniLibs'
    }

在android.mk写个dir指向自定义文件夹jniLibs

NDK_APP_DST_DIR := ../jniLibs/$(TARGET_ARCH_ABI)

c++语法处理部分细节坑

1、记得无论什么时候,都要对数组初始化,不然多余的数值会对调试生成影响
memset(a, 0x00, sizeof(a));

2、对字符数组求长度的时候,在c++里遇到0x00或者’\0’的时候strlen会提前结束,导致错误的输出,这点在调试过程中是个问题
strlen(a)

3、记得字符数组转成16进制后再输出,原因就是字符有些是不可见的

4、从其他地方接收的参数如果是16进制的字符串,记得先转成10进制的字符数组,再参与计算

5、使用PEM_read_bio_PrivateKey可以读取rsa的私钥,而PEM_read_bio_RsaPrivateKey也可以读,不过是两个不同的结果,两种key的类型可以互转
EVP_PKEY_get1_RSA 
EVP_PKEY_set1_RSA