Android深入系统完全讲解(42)

news2024/11/28 7:46:26

红色部分 pc 000007cc 代表当前 pc 指向的位置。libnative-lib.so 代表在哪个库里面。于是我
们就需要知道,libnative-lib.so 库的 pc 000007cc 偏移位置,是个什么代码。
我们从 NDK 开发包中找到
D:\android-ndk-r19c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin
arm-linux-androideabi-addr2line.exe 这个工具。 然后从工程里面,将
build\intermediates\ndkBuild\debug\obj\local\x86 (如果是 armeabi-v7a,去对应目录下找)
下面的 libnative-lib.so 然后 CMD 命令,使

在这里插入图片描述
参数解释: -e 指定 so 的存放位置
-C 指定当前 pc 在 so 的位置
-f 输出函数方法名
我们可以看到结果里面,输出了方法名:
Java_hellojni_codegg_com_hellojni_MainActivity_myResultFromJNI ,并且打印了文件名
native-lib.c 和出错的代码在 C 文件的行号。
本节主要从分析的方向,将一个异常的分析思路,进行展开。除此之外,我们在分析问题时,
要去看其他线程的堆栈,以及 log 信息,将输出的 log 信息 和 自己的分析进行验证,进一
步确定异常路径。
但这个分析过程,属于本质东西,理解透这个,会用这个去定位分析问题。希望大家能够掌
握,最好跟着课程,一个个敲下来,学到知识。
19. 延伸内容
很快,就到了收尾章节。相信通过前面的课程,一个个实例讲解,拆解分析过程,能够让你
明白,这些工具之间的联系。当然,此课程不会让你一下子全都学透,但是让你明白,配置
的是怎么生效的, JNI 的实现逻辑,这个才是关键的。
在入门之后,如果你的工作,平时就是需要做 NDK 开发,经常跟它打交道,那么以下的一
些分享,会帮助到你。
19.1 一些常用工具
在 NDK 的开发包中,放置了很多有用的工具,我们平时可以看看。具体为:
arm-linux-androideabi-addr2line 分析异常地址arm-linux-androideabi-ar 输出静态库的方法,可以拆包打包
arm-linux-androideabi-objdump 输出动态库的方法
arm-linux-androideabi-ldxxx 链接器,有不同的链接器,实现了不一样的链接规则,arm 的默
认配置的是 bfb。
arm-linux-androideabi-strip 删除无效信息,调试信息,减轻可执行文件大小
如果你要深入研究编译出来的目标结构(这里指 ELF 格式),多使用这里面的工具。同时
如果不想直接用命令,可以试试 IDA Pro 工具。关于上面每个命令的用法,可以用 help 输
出,或者直接百度,比如第一个搜索 GCC addr2line 即可,搜出来的 ARM GCC 基本都能直
接用的。
19.2 gcc 参数官方文档
https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/
https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/Developer-Options.html#Developer-Options
19.3 NDK 注意事项
NDK 版本之间,是不考虑兼容性的。这个是一个注意点,所以 r8 编译能过的项目,很有可
能 r19 编译不过,这个大家要有心理准备。
19.4 abi 的相关配置
https://developer.android.google.cn/ndk/guides/abis
https://blog.csdn.net/afei__/article/details/81272251
19.5 CMake 的参考文档
https://cmake.org/cmake/help/latest/index.html
https://cmake.org/cmake-tutorial/
https://blog.csdn.net/afei__/article/details/81201039
https://www.hahack.com/codes/cmake/#自定义编译选项
19.6 JavaVM 与 JNIEnv 的关系
https://blog.csdn.net/qq_32583189/article/details/53172316
学完了 NDK,基本上打通了 JAVA 和本地的桥梁,于是我们接着来说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远程控制软件

远程控制软件1. 概述2. TeamViewer3. Todesk4. 向日葵5. AnyDesk6. Splashtop结束语1. 概述 出门在外或者工作时突然需要访问家中的电脑拿取文件或者资料时,是直接跑回家拿去、还是委托家里人员帮忙呢? 这时候你就需要一类软件来完成这个任务了&#xf…

前端图片压缩方案及代码实现

1. 为什么要进行图片压缩? 随着互联网的发展,图片在各种网站和应用中铺天盖地,运营人员在后台管理系统中上传图片时常常忽略的图片的体积大小,随之产生的带宽和服务器容量也大大增加,图片压缩的需求随之产生。 常见的压缩图片的…

【笔记】SemGCN

一. 论文总结 1.1 核心贡献 提出了一种改进的图卷积操作,称为语义图卷积(SemGConv),它源自cnn。其关键思想是学习图中暗示的边的信道权值,然后将它们与核矩阵结合起来。这大大提高了图卷积的能力。其次,我们引入了SemGCN&#x…

GPU服务器上跑深度学习模型

1 问题来源 近期在本地 Windows 系统上跑深度学习人群计数模型时,由于笔记本 NVIDIA 显卡 NVIDIA GeForce GTX 1650 的专用 GPU 内存只有 4 GB,无法设置较大的 batchsize 进行训练,导致模型训练时间过长,且易发生内存溢出&#xf…

年初五,迎财神 | 一张码如何实现多渠道(微信、支付宝、云闪付...)收款

大家好,我是小悟 今天是正月初五,天气超级好,也是迎财神的日子,祝大家顺风顺水,财源滚滚,钱兔似锦。 既然要发财,那自然少不了收款咯。如果你是一个商家,肯定是想收款的方式越方便越…

【手写 Promise 源码】第三篇 - 实现一个简版 Promise

一,前言 上一篇,结合示例介绍了 Promise 相关功能与特性分析,包含以下内容: Promise 基础特性;Promise 实例 API(原型方法);Promise 静态 API(类方法)&…

【数据结构】极致详解:树与二叉树(中)——顺序存储实现

目录 📔前言📔: 📙一、顺序存储结构📙: 📘二、堆📘: 1.堆的概念及结构: 2.堆的性质: 3.堆的实现(本文重点)&#xf…

离线用户召回定时更新系列二

3.6.3 特征处理原则 离散数据 one-hot编码连续数据 归一化图片/文本 文章标签/关键词提取embedding3.6.4 优化训练方式 使用Batch SGD优化 加入正则化防止过拟合 3.6.5 spark LR 进行预估 目的:通过LR模型进行CTR预估步骤: 1、需要通过spark读取HIVE外…

Nacos学习笔记【part1】安装与注册服务

一、概述与安装 Nacos 是是一个构建云原生应用的动态服务发现、配置管理和服务管理平台,用于发现、配置和管理微服务,提供了一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 更敏捷和容易地构建…

分享136个ASP源码,总有一款适合您

ASP源码 分享136个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 136个ASP源码下载链接:https://pan.baidu.com/s/11db_K2QXns5pm8vMZBVPSw?pwds0lb 提取码&#x…

js 文字转语音 api SpeechSynthesisUtterance

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 官方文档地址(https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesisUtterance…

【JavaEE初阶】第七节.多线程(基础篇)单例模式(案例一)

欢迎大家跟我一起来学习有关多线程的有关内容!!!!!!!!!! 文章目录 前言 一、单例模式的概念 二、单例模式的简单实 2.1 饿汉模式 2.2 懒汉模式 总结 前言…

搭建Linux环境

学习Linux之前,我们首先需要在电脑上搭建Linux操作系统环境。 就好比说你买了一台电脑,需要使用Windows10操作系统,那么首先应该安装Windows操作系统(刚买的电脑会引导你一步一步的安装)。 一、Linux环境搭建的三种方式…

数据结构 第三章 栈和队列(队列)

感谢:点击收听 1 基本知识点 1、允许删除的一端称为队头(front) 2、允许插入的一端称为队尾(rear) 3、当队列中没有元素时称为空队列 4、顺序队列: 1 使用顺序表来实现队列 2 两个指针分别指向队列的前端和尾端 **3 如果队列的大小为MaxSize个,那么元…

什么是倒排表(倒排索引)

这种搜索引擎的实现常常用的就是倒排的技术 文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word&#xff…

在Mac下如何创建文件

相比于windows中创建Mac是比较复杂的 第一步:打开启动台,依次打开「启动台-其他-自动操作」,可以按住「 Command 空格」直接搜索「自动操作」程序。 第二步:打开之后在「选取文稿类型」选项时,选择「快速操作」&#…

工地车辆未冲洗识别抓拍系统 yolov5网络

工地车辆未冲洗识别抓拍系统通过yolov5网络深度算法学习模型,自动对画面中每辆进出车辆的清洗实现自动识别判定。如果识别到车辆冲洗不合格,就会自动进行抓拍并将违规车辆信息回传。目标检测架构分为两种,一种是two-stage,一种是o…

「兔了个兔」看我如何抓取兔兔图片到本地(附源码)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

如何在IDEA中使用Maven构建Java项目?Maven的使用详细解读

文章目录1. 前言2. IDEA 中配置 Maven 环境3. Maven 的坐标问题4. IDEA 中创建 Maven 项目5. IDEA 中导入 Maven 项目6. 安装插件7. 依赖管理8. 依赖范围6. 总结Java编程基础教程系列1. 前言 前面在如何使用 Maven 构建 Java 项目一文中,我们一直在命令行中执行构建…

LabVIEW什么是实时操作系统(RTOS)

LabVIEW什么是实时操作系统(RTOS)一般而言,操作系统的任务是管理计算机的硬件资源和应用程序。实时操作系统会执行这些任务,但是运行时间精度和可靠度都极高。在实际应用中,有的系统失常代价高昂,甚至会引起安全事故。这时&#x…