You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重新编译Android APK并植入LeakCanary以检测内存泄漏?

无源码APK集成LeakCanary进行内存泄漏分析

前置工具准备

  • Apktool:用于APK的反编译与回编译
  • LeakCanary的aar包:从Maven仓库下载对应版本的leakcanary-android库
  • 签名工具:如apksigner或jarsigner,用于签名回编译后的APK
  • Android SDK:提供adb和dx工具

具体操作步骤

1. 反编译目标APK

执行命令将目标APK反编译到本地目录:

apktool d target.apk -o target-decompiled

2. 引入LeakCanary依赖

  • 下载对应版本的LeakCanary aar包,解压后提取其中的classes.dex,放到反编译目录的lib/文件夹(无则新建)。
  • 或者用Android SDK的dx工具将aar转为dex:
dx --dex --output=leakcanary.dex leakcanary-android-x.x.x.aar

将生成的leakcanary.dex移入target-decompiled/lib/目录。

3. 修改Application类(核心步骤)

  • 查看反编译目录下的AndroidManifest.xml,找到application标签的android:name属性,确定原应用的自定义Application类(如com.example.MyApp)。
  • 进入对应smali文件目录(如target-decompiled/smali/com/example/MyApp.smali),修改代码:
    • 若原Application已有onCreate方法,在方法开头添加LeakCanary初始化代码:
      invoke-static {}, Lcom/squareup/leakcanary/LeakCanary;->install(Landroid/app/Application;)Lcom/squareup/leakcanary/RefWatcher;
      move-result-object v0
      
    • 若原Application无onCreate方法,直接添加该方法并插入上述初始化代码。
  • 若原应用无自定义Application,直接修改AndroidManifest.xml的application标签,设置android:name="com.squareup.leakcanary.LeakCanaryApplication"。

4. 回编译APK

将修改后的目录重新编译为APK:

apktool b target-decompiled -o modified-target.apk

5. 签名APK

回编译后的APK未签名,需签名才能安装:

  • 用apksigner(推荐支持V2签名):
apksigner sign --ks your-keystore.jks modified-target.apk
  • 或用jarsigner:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your-keystore.jks modified-target.apk alias-name

6. 安装测试

  • 安装签名后的APK:
adb install -r modified-target.apk
  • 打开应用后,LeakCanary会自动运行,检测到内存泄漏时会在通知栏弹出提示,点击即可查看泄漏详情。

注意事项

  • 确保LeakCanary版本与目标APK的minSdkVersion兼容。
  • 加固过的APK需先脱壳才能进行反编译操作。
  • 修改smali代码时需注意语法正确性,可通过Apktool的报错信息排查问题。

内容的提问来源于stack exchange,提问作者RexSolus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:06:10