记一次 Charles 抓包 Android 10.0 HTTPS 请求

Android 7.0 以后系统收紧了安全策略,其中一方面表现为:不再信任用户的 CA 证书,Android 官方文档作以下描述:

默认情况下,面向 Android 7.0 的应用仅信任系统提供的证书,**且不再信任用户添加的证书颁发机构 (CA)**。如果面向 Android N 的应用希望信任用户添加的 CA,则应使用网络安全性配置以指定信任用户 CA 的方式。

Read More

Kotlin 之对 Backing Field 的理解

在对 Kotlin 属性相关内容的学习过程中,遇到了一个新的属性 – Backing Field,对此比较疑惑。在这里按照网上的一种方式暂且把它翻译为 幕后属性 ,本博客为翻阅资料后记录对 幕后属性 的理解。

0x0001 不使用幕后字段的后果

首先需要明确的是 幕后字段 的作用域为 属性默认访问器 或者 在自定义访问器 中通过 field 标识符访问属性,编译器就会为属性自动生成幕后字段。 这就是说其在默认访问器实现了幕后字段,但是当我们在自定义访问器时如果忽略了此操作,那么程序将会报你以崩溃。那么下面我们就看一下这样的情况:

Read More

Alfred4 使用

0x0001 Alfred4 的基本使用

Mac 的 spotlight ,可以帮你搜索本机的一些内容,比如文件、应用程序、浏览器书签……,但功能仅限于此。Alfred 与 Spotlight 相似,操作方式也类似,但功能比 Spotlight 强大的多。除了包含 Spotlight 的功能,Alfred还可以设置 action,用某个关键词触发一个动作,或者设置快捷键。

Read More

Linux

lsof

lsof -i 显示所有的连接

lsof -i | grep 8080

找到使用 8080 端口的进程信息。

kill -9 pid

杀死进程 pid

git reset 指令

git reset 使用场景为丢弃 commit 后的 commit 信息、index 信息或者源码。

git reset 三种模式

  • soft
  • mixed(默认)
  • hard

1. git reset –soft HEAD~n 或 commit id

回退项: commit信息

回退情况: 当前 commit 与目标 commit 信息之间的 commit 信息丢失,此时index信息未发生改变,执行 git commit 信息,此时相当于 将丢失的 commit 信息合并为新的 commit 信息

2. git reset (–mixed)HEAD~n 或 commit id

回退项: index 信息、commit 信息

回退情况: 当前 commit 与目标 commit 信息之间的 commit 信息丢失,此时 index 信息也发生改变—变为
unstage 状态,即丢失的 commit 信息对应的源码变为 unstage 状态,需执行 git add . 将文件变更暂存,执行 git commit 将本次操作提交到本地分支,那么此次 commit 内容包括所有丢失的 commit 内容的总和。

3. git reset –hard HEAD~n 或 commit id

回退项: index 信息、commit信息、源码

回退情况: 当前 commit 与目标 commit 信息之间的 commit信息、index 信息、源码全部丢失。

adb shell top

0x0001 adb shell top

执行如下命令,查看该命令的用途:

adb shell top --help

打印结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]

Show process activity in real time.// 实时显示进行信息

-H Show threads // 展示线程
-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)
-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)
-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)
-s Sort by field number (1-X, default 9)
-b Batch mode (no tty)
-d Delay SECONDS between each cycle (default 3)// 设置刷新频率,默认 3 秒
-m Maximum number of tasks to show // 展示最大的几项
-n Exit after NUMBER iterations // n 次刷新后结束
-p Show these PIDs
-u Show these USERs
-q Quiet (no header lines)

Cursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force update, R to reverse sort, Q to exit.

执行 adb shell top,结果为:

其中列表属性含义见下表:

|PID|USER|PR|NI|VIRT|RES|SHR|S|%CPU|%MEM|TIME+|
|–|–|–|–|–|–|–|–|–|–|–|–|–|–|–|–
|进程id|进程所有者|进程优先级|nice值。负值表示高优先级,正值表示低优先级|进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES|进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA|共享内存大小,单位kb|进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程|上次更新到现在的CPU时间占用百分比|进程使用的物理内存百分比|进程使用的CPU时间总计,单位1/100秒|

性能优化之卡顿优化

0x0001 查看 CPU 使用率

深入理解 Android 屏幕绘制原理 一文中提到定位卡顿问题,首先要寻找哪些进程占用大量的 CPU,从而一步一步分析卡顿问题,其实造成卡顿的原因有千百种,最终都会反映在 CPU 时间上。

出现卡顿问题后,首先应该查看 CPU 使用率,

  • /proc/stat:查看整个系统的 CPU 使用情况;
  • 通过 /proc/[pid]/stat:查看指定进程的 CPU使用情况;

关于 stat 文件各个属性的含义,以及 CPU 使用率的计算,请查看 Linux环境下进程的CPU占用率

  1. 12940
  2. (d.kfc.activitys)
  3. S
  4. 3560
  5. 3557
  6. 0
  7. 0
  8. -1
  9. 4211008
  10. 141412
  11. 1650
  12. 130
  13. 0
  14. 4181
  15. 866
  16. 1
  17. 1
  18. 20
  19. 0
  20. 93
  21. 0
  22. 104303639
  23. 2147409920
  24. 47524
  25. 18446744073709551615
  26. 1
  27. 1
  28. 0
  29. 0
  30. 0
  31. 0
  32. 4612
  33. 1
  34. 1073776376
  35. 18446744073709551615
  36. 0
  37. 0
  38. 17
  39. 0
  40. 0
  41. 0
  42. 0
  43. 0
  44. 0
  45. 0
  46. 0
  47. 0
  48. 0
  49. 0
  50. 0
  51. 0
  52. 0

同时也可以使用以下几个命令协助排查问题:

0x0002 Android 卡顿分析工具分类

按照获取函数调用的时机,这类工具分为两类:

  • instrument

获取一段时间的所有函数调用,分析这段时间内函数调用流程,寻找待优化的点。

  • sample

采用抽样方式获得某些函数调用,比如每 5 秒获取一次,分析这段时间内的函数调用,寻找待优化的点,然后继续细化分析。

0x0003 TraceView

属于 instrument 类型的分析工具,但是在 Android 5.0 后新增 startMethodTracingSample 方法,用于采样分析。TraceView 利用 Android Runtime 函数调用的 event 时间,将函数运行的耗时和函数调用关系写入 trace 文件。

0x0004 Systrace

Linux 常用的命令工具