背景
项目存在严重的Native内存泄露问题,android studio自带的工具目前无法很好的分析Native层的问题。
从网上找了一遍,没有靠谱的的方案(包括使用DDMS的隐藏native分析方法,我在自己开发的android设备上,使用eng版本无法正常操作,设置系统参数后,系统无法正常启动)
无意中发现了腾讯开源了LoliProfiler项目,一款Android内存分析工具。
LoliProfiler github链接
LoliProfiler 国内地址
自己简单看了下,基于QT5开发,cmake编译的,内部用到了XHook等三方库来hook底层
编译
我下载源码,在mac和windows上都尝试编码,奈何能力有限(windows编译总失败)
我说下mac上编译的流程和注意点
下载源代码后,配置环境
1、下载QT5 SDK 我基本把相关选项都选择安装
参考文章
2、NDK配置,我原本就开发Android,有NDK
3、配置Cmake环境;我开始使用Android SDK的cmake,编译异常,改为官方cmake安装就正常了
参考文章
修改源码的build.sh
set -xeuo pipefail
export QT5Path=/Users/fucongping/Qt5.14.1/5.14.1
# for gcc
export Ndk_R16_CMD=/Users/fucongping/Library/Android/sdk/ndk/16.1.4479499/ndk-build
# for llvm
export Ndk_R20_CMD=/Users/fucongping/Library/Android/sdk/ndk/20.0.5594570/ndk-build
# if [ ! -f $QT5Path ];then
# echo QT5Path not found ERROR: $QT5Path
# exit -1
# fi
# if [ ! -f $Ndk_R16_CMD ];then
# echo Ndk_R16_CMD not found ERROR: $Ndk_R16_CMD
# exit -1
# fi
# if [ ! -f $Ndk_R20_CMD ];then
# echo Ndk_R20_CMD not found ERROR: $Ndk_R20_CMD
# exit -1
# fi
echo QT5Path path: $QT5Path
echo Ndk_R16_CMD: $Ndk_R16_CMD
echo Ndk_R20_CMD: $Ndk_R20_CMD
sh scripts/EnterPoint.sh
但是最后还是失败,报错macdeployqt命令参数无效
分析后,是编译脚本存在问题,在scripts/EnterPoint.sh
MacdeployqtPath=find $QT5Path -name "macdeployqt"
,这个命令会在我的Mac中找到三个路径,导致异常;
我直接修改成对应文件路径
set -xeuo pipefail
export AndroidPluginPath="./plugins/Android"
export ReleasePath="./build/cmake/bin/release/LoliProfiler.app"
#export MacdeployqtPath=`find $QT5Path -name "macdeployqt"`
export MacdeployqtPath=/Users/fucongping/Qt5.14.1/5.14.1/clang_64/bin/macdeployqt
export QT5_Clang=`find $QT5Path -name "clang_64"`
export DeployPath="./dist"
echo deleting dir
rm -rf ./build
rm -rf ./dist
sh scripts/BuildProject.sh
sh scripts/BuildAndroidLibs.sh
sh scripts/CopyConfig.sh
sh scripts/Deployqt.sh
最后在build/cmake/bin/release/下可以获取到应用安装包
使用
我一开始拿到源码有点迷,没有现成的应用直接用吗?
后经同事指点,github上有release版本:
release版本页面
路径:https://github.com/Tencent/loli_profiler/releases/tag/v1.1.2
macos版本
使用上,直接看官方的文档就非常好:
使用文档