在 Android Studio 中分析 Proguard 优化构建的最佳方式?
Posted
技术标签:
【中文标题】在 Android Studio 中分析 Proguard 优化构建的最佳方式?【英文标题】:Best way to profile Proguard-optimized build in Android Studio? 【发布时间】:2019-07-14 22:55:16 【问题描述】:我们希望对我们的代码进行分析,使其尽可能接近我们发布版本中的样子,即使用相同的 Proguard 优化。明显的问题是所有类名/方法都被混淆了,使得分析/调试变得困难。解决此问题的最佳做法是什么?
有没有办法将 proguard 映射上传到 android Studio?或者是一种更好的方法来拥有不同的 Proguard 配置,保留所有类/方法名称但仍运行所有其他优化?
【问题讨论】:
进行除重命名之外的所有优化似乎完全合适。 【参考方案1】:从 Android Studio 4.0 开始,无法向分析器提供映射。存在feature request,因此任何感兴趣的人都可以对其加注星标,以引起 Android 工具团队的注意。这看起来是一个合理的功能,其他 Java 分析器可以做到。
目前最好的选择是将-dontobfuscate
添加到配置文件的Proguard/R8 配置中,如the Android docs 中所述。不过也有一些潜在的缺点:
-
理论上的一个:保持长名称可能会稍微歪曲性能配置文件,因为类稍大,这可能会影响类加载时间。但是,这不太可能改变您在分析期间寻找的答案:热方法仍然很热。
轶事一:优化管道中的某些工具可能不喜欢生成的配置 - 这取决于项目和工具。因此,我在 Facebook 的 Redex 中看到了崩溃。
【讨论】:
【参考方案2】:您可以分析 deobfuscate proguarded build,但不能使用 Android Studio,您必须使用 Android Studio CPU Profiler 下方的 simpleperf
工具包和另一个 UI:Firefox Profiler。
先决条件:
检查你是否在 python >= 3.8
python3 -V
安装Android NDK
安装最新的simpleperf
:
$ git clone https://android.googlesource.com/platform/system/extras ~/extras
$ cd ~/extras/simpleperf/scripts
使用app_profiler.py
的个人资料,例如当线程阻塞(off-cpu 分析)10 秒时,Google Maps @4000Hz 采样堆栈和抓取堆栈:
$ ./app_profiler.py \
--app com.google.android.apps.maps \
--record_options "-g -e cpu-clock --trace-offcpu -f 4000 --duration 10" \
--activity com.google.android.maps.MapsActivity
转换为 Firefox Profile 格式,使用 proguard map 去混淆:
$ ./gecko_profile_generator.py \
--proguard-mapping-file proguard.map \
| gzip > gecko_profile.json.gz
将gecko_profile.json.gz
拖放到https://profiler.firefox.com/中
【讨论】:
以上是关于在 Android Studio 中分析 Proguard 优化构建的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2008 中分析 MsTest 的单元测试?
当我在 Zend Studio 中分析 CLI PHP 时如何传递参数?