Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52721 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

练习Sample跑起来 | 热点问题答疑第1期

C++线程同步
ndk_dlopen绕过Android Classloader-Namespace Restriction机制
Inline Hook Substrate框架使用
自动性能分析体系
FinalizerWatchdog机制
反射或代理机制
Native Crash日志获取和解读
解析抓取的Minidump日志
日志解析工具获取
NDK集成的编译器
模拟器无法获取Crash日志问题
CMake和LLDB安装
NDK环境配置
SDK配置
邀请朋友一起学习
Memory Allocation Trace监控模块
解决系统异常的思路
Breakpad的Sample
热点问题答疑
运行环境问题
下次内容分享
第3期
第2期
第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
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • CathyChen
    置顶
    非常感谢你们的分享,帮助其他人快速成长,虽然有些地方看不懂,还是会坚持下去,(*^__^*) 嘻嘻……
    2018-12-18
    3
  • peedeep
    请问下老师,这篇文中提到:5. 如果我们没有原始的 obj,那么需要通过libcrash-lib.so 的导出符号来进行解析。我有以下疑问:这里原始的obj指的是Chapter01/sample/build/intermediates/cmake/debug/obj目录下面的so库吗?什么情况下会变成非原始的呢?

    作者回复: 正式的So会去掉debug info

    2019-01-07
    2
  • 曹昆
    请问下老师: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
  • Lakers
    dump_syms 在mac上面怎么生成?这个要在linux下编译才行吗?

    作者回复: 对的,要在linux下生成

    2018-12-29
  • 我的心情在荡漾
    鹏飞大佬也好厉害
    2018-12-17
    4
  • 大白菜
    Breakpad 抓取闪退信息后执行DumpCallback后就马上闪退了,怎么和java log 当时堆栈关联起来?
    2019-05-10
  • wiikzhao
    gradle文件下,找不到cppFlags和arguments,请问什么原因?
    2018-12-29
  • su
    dump_syms 这个工具在哪里呢?
    2018-12-24
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部