如何通过崩溃堆栈中的资源ID查找对应资源
如何逆向解析Android资源ID定位对应资源?
当遇到Resources$NotFoundException崩溃,日志只给出资源ID(比如#0x7f070912)时,可以通过以下几种方法逆向找到对应的资源:
方法1:使用Android Studio Resource Manager搜索
- 打开Android Studio,切换到左侧边栏的Resource Manager面板
- 在顶部搜索框直接输入资源ID的十六进制值(无需加
#,比如输入0x7f070912),搜索结果会直接显示对应的资源文件和名称。
方法2:用aapt命令行工具解析APK
- 找到崩溃版本对应的APK文件(通常位于
app/build/outputs/apk/目录下) - 打开终端,进入Android SDK的
build-tools对应版本目录(比如$ANDROID_SDK_ROOT/build-tools/34.0.0/),执行以下命令:aapt dump resources your-app.apk | grep "0x7f070912" - 输出结果会包含资源类型和名称,示例:
drawable/ic_error_icon (0x7f070912)。
方法3:查看编译生成的R.java文件
- 编译项目后,在
app/build/generated/not_namespaced_r_class_sources/debug/r/[你的应用包名]/R.java路径下找到R.java文件 - 在文件内搜索目标资源ID的十六进制值,找到对应的字段,比如:
由此可知该ID对应的是public static final class drawable { public static final int ic_error_icon=0x7f070912; }drawable类型的ic_error_icon资源。
注意事项
- 必须使用崩溃版本对应的APK或编译产物,不同版本的资源ID可能因资源增减而变化
- 资源ID不会被代码混淆工具处理,所以即使是混淆后的APK,也能正常解析
内容的提问来源于stack exchange,提问作者Haroun Hajem
相关产品推荐
相关产品推荐

