mlt android 内存,使用bat自动处理dumpsys meminfo内存信息

54707bc970eb239cf7702e9cab60b482.pngAndroid内存查看有两种方法,procrank 和 dumpsys meminfo,procrank计算GPU内存不准确,所以选择meminfo指令。

但meminfo需要一遍一遍的敲命令,而且结果比较乱,那能不能有批处理工具呢?答案是肯定的。

MemoryLeakTool是Robin Hu编写的一款用于监测Android进程内存使用情况的脚本工具,简称为MLT。具体使用方法请参考

http://hubingforever.blog.163.com/blog/static/171040579201243071752744/

这里不再赘述(CSDN下载要10分,痛心啊!)。

整套工具使用起来很简单,有图形界面。

1.在config.bat中配置包名

2.根据需要运行各种工具。

一般的Android开发已经够用了。如果你对这一套bat有兴趣或者想自定义输出或者运行出了问题,那么请往下看。

我遇到的问题是,我在非标准的Android上运行了dumpsys meminfo,输出结构跟Android不一致,所以没有得到我想要的结果。那就需要改造脚本。

getMemoryState.bat

核心是这一句

adb shell "dumpsys meminfo %curProcessName%" >%meminfoFile%

在shell下执行 dumpsys meminfo %curProcessName%指令并将结果输出到%meminfoFile%

%%是bat语法,通过set 定义一个变量

如 set test=1,通过%test%来引用它

curProcessName和meminfoFile是在第一个步骤config.bat中配置的。

这样我们就拿到了一个meminfo文件,我这里的输出是这样的(非标准):

d088ceebcd5e31cc12c5de2f705c3fce.png

修改后的处理脚本

Shell

FOR /F "skip=5 tokens=1,2,3,4,5,6,7,8" %%i in (%meminfoFile%) do (

if !cnt! EQU 0 (

set NativePSS=!NativePSS!%slipChar%%%k

echo NativePSS:%%k

)

if !cnt! EQU 3 (

set GfxDev=!GfxDev!%slipChar%%%k

echo GfxDev:%%k

)

if !cnt! EQU 5 (

set SoMap=!SoMap!%slipChar%%%k

rem set SoPrivateDirty=!SoPrivateDirty!%slipChar%%%l

rem set SoPrivateClean=!SoPrivateClean!%slipChar%%%m

)

if !cnt! EQU 8 (

set UnknownPSS=!UnknownPSS!%slipChar%%%j

echo UnknownPSS:%%j

rem set UnknownSize=!UnknownSize!%slipChar%%%l

rem set UnknownAllocated=!UnknownAllocated!%slipChar%%%l

rem set UnknownFree=!UnknownFree!%slipChar%%%l

)

if !cnt! EQU 9 (

set TotalPSS=!TotalPSS!%slipChar%%%j

echo TotalPSS:%%j

rem set TotalPrivateDirty=!TotalPrivateDirty!%slipChar%%%k

rem set TotalPrivateClean=!TotalPrivateClean!%slipChar%%%l

)

set /a cnt+=1

)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

FOR/F"skip=5 tokens=1,2,3,4,5,6,7,8"%%iin(%meminfoFile%)do(

if!cnt!EQU0(

setNativePSS=!NativePSS!%slipChar%%%k

echoNativePSS:%%k

)

if!cnt!EQU3(

setGfxDev=!GfxDev!%slipChar%%%k

echoGfxDev:%%k

)

if!cnt!EQU5(

setSoMap=!SoMap!%slipChar%%%k

remsetSoPrivateDirty=!SoPrivateDirty!%slipChar%%%l

remsetSoPrivateClean=!SoPrivateClean!%slipChar%%%m

)

if!cnt!EQU8(

setUnknownPSS=!UnknownPSS!%slipChar%%%j

echoUnknownPSS:%%j

remsetUnknownSize=!UnknownSize!%slipChar%%%l

remsetUnknownAllocated=!UnknownAllocated!%slipChar%%%l

remsetUnknownFree=!UnknownFree!%slipChar%%%l

)

if!cnt!EQU9(

setTotalPSS=!TotalPSS!%slipChar%%%j

echoTotalPSS:%%j

remsetTotalPrivateDirty=!TotalPrivateDirty!%slipChar%%%k

remsetTotalPrivateClean=!TotalPrivateClean!%slipChar%%%l

)

set/acnt+=1

)

Shell

FOR /F "skip=5 tokens=1,2,3,4,5,6,7,8" %%i in (%meminfoFile%)

1

FOR/F"skip=5 tokens=1,2,3,4,5,6,7,8"%%iin(%meminfoFile%)

这一句是逐行读取文件,参数

skip=n 跳过n行

tokens 将要处理的列

还有一个参数delims,分隔符,默认是空格

%%i,可以理解为对应前面的tokens,从i开始,ijklmn这样的顺序使用,如你想用第二列的数据,就是%%j。

bat学习:

1.rem是注释

2.set 定义变量  %%引用变量 !!也是引用变量  (有什么区别?)

3.将文件清空 echo. >%path%,其实就是重写这个文件。(如何修改文件中某一行某一列内容?)

4.ren 修改文件名

5.set变量时,设置失败。需要开启延迟

Setlocal enabledelayedexpansion

之后启用变量引用符号 !!

6.检查str是否包含substr

if not "!str!" == "!str:substr=!"

str:substr= 表示将str中的substr置为空。

7.得到一个长路径的文件名

call :getname %path%

:getname

set outName=%~nx1

8.延时

延时有很多方法,最方便的一种是

设置延时6秒

@ping 127.0.0.1 -n 6 >nul

不精确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值