练习Sample跑起来 | 热点问题答疑第1期
孙鹏飞
该思维导图由 AI 生成,仅供参考
你好,我是专栏的“学习委员”孙鹏飞。
专栏上线以来很多同学反馈,说在运行练习 Sample 的时候遇到问题。由于这些 Sample 多是采用 C/C++ 来完成的,所以在编译运行上会比传统的纯 Java 项目稍微复杂一些。今天我就针对第 1 期~第 4 期中,同学们集中遇到的问题做一期答疑。设置练习的目的,也是希望你在学习完专栏的内容后,可以快速上手试验一下专栏所讲的工具或方法,帮你加快掌握技术的精髓。所以希望各位同学可以多参与进来,有任何问题也可以在留言区给我们反馈,后面我还会不定期针对练习再做答疑。
编译环境配置
首先是同学们问得比较多的运行环境问题。
前几期的练习 Sample 大多是使用 C/C++ 开发的,所以要运行起来需要先配置好 SDK 和 NDK,SDK 我们一般都是配置好的,NDK 环境的配置有一些特殊的地方,一般我们的 Sample 都会使用最新的 NDK 版本,代码可能会使用 C++11/14 的语法进行编写,并且使用 CMake 进行编译,我这里给出 NDK 环境的配置项。
首先需要去 NDK 官网下载最新版本,下载后可以解压到合适的地方,一般 macOS 可以存放在 ANDROID_SDK_HOME/ndk_bundle 目录下,Android Studio 可以默认找到该目录。如果放到别的目录,可能需要自己指定一下。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文是一期热点问题答疑专栏,作者孙鹏飞解答了读者在运行练习Sample时遇到的问题。文章首先介绍了配置C/C++编译环境的步骤,包括配置SDK、NDK、CMake和LLDB。接着针对第1期Sample中的热点问题进行了详细解答,包括如何解决模拟器无法获取Crash日志的问题、获取日志解析工具以及解析抓取下来的Minidump日志的步骤。此外,还介绍了Hook框架的原理和函数符号的获取方法。整体内容涵盖了C/C++编译环境配置、NDK集成编译器、日志解析工具获取、Crash日志解析等方面的内容,对于需要运行练习Sample的读者来说,提供了实用的技术指导和解决问题的方法。文章还提到了Breakpad的源码,以及第2期和第3期的Sample,分别涉及了解决系统异常的思路和简单的Memory Allocation Trace监控模块。这些内容涵盖了信号捕获、ptrace的使用、进程fork/clone机制、主进程子进程通信、unwind stack、system info的获取、memory maps info的获取、symbol的dump,以及symbol反解等技术,以及Inline Hook Substrate框架的使用、使用ndk_dlopen来绕过Android Classloader-Namespace Restriction机制,以及C++里的线程同步等内容。整体而言,本文为读者提供了丰富的技术知识和解决问题的方法。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》,新⼈⾸单¥59
《Android 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- CathyChen置顶非常感谢你们的分享,帮助其他人快速成长,虽然有些地方看不懂,还是会坚持下去,(*^__^*) 嘻嘻……2018-12-183
- peedeep请问下老师,这篇文中提到:5. 如果我们没有原始的 obj,那么需要通过libcrash-lib.so 的导出符号来进行解析。我有以下疑问:这里原始的obj指的是Chapter01/sample/build/intermediates/cmake/debug/obj目录下面的so库吗?什么情况下会变成非原始的呢?
作者回复: 正式的So会去掉debug info
2019-01-072 - 曹昆请问下老师:Chapter01/sample/build/intermediates/cmake/debug/obj目录下面的so库, ample/build/intermediates/transforms/mergeJniLibs/debug/0/lib和apk包里的so,这三个so有什么区别呢?还有正式包的so去掉debug info,那aarch64-linux-android-addr2line工具执行之后就没效果了,那正式包怎么看native的crash呢?
作者回复: 会把obj保留下来到服务器中的
2019-03-15 - Lakersdump_syms 在mac上面怎么生成?这个要在linux下编译才行吗?
作者回复: 对的,要在linux下生成
2018-12-29 - 我的心情在荡漾鹏飞大佬也好厉害2018-12-174
- 大白菜Breakpad 抓取闪退信息后执行DumpCallback后就马上闪退了,怎么和java log 当时堆栈关联起来?2019-05-10
- wiikzhaogradle文件下,找不到cppFlags和arguments,请问什么原因?2018-12-29
- sudump_syms 这个工具在哪里呢?2018-12-24
收起评论