NDK调用三方库崩溃--【事件记录及分析】

news/2024/11/28 2:37:15/

问题:

NDK编译的so库libA.so调用了libB.so。

报错提示:(手机MX3,非root)

1)日志生成不了。

2)函数初始化崩溃。

3)某函数调用崩溃。


经分析原因如下:

1)未创建日志文件所在的目录,导致写失败。

2)非root下,需要实现调用libgnustl_shared.so,否则报错;root后的手机,不存在此问题。

3)非root下,pthread_kill第一个参数线程ID不可以为0,否则崩溃;root后的手机,不存在此问题。


解决问题,需要做的一些准备:


1 如何真机调试一个Android程序

步骤:

1 下载手机的驱动,让电脑连接上手机

2 手机要开启USB调试模式

3 写个demp apk联机调试

2 如何往手机上移动文件

1 利用豌豆荚等工具(不建议)

2 使用adb命令

adb kill-server

adb start-server

adb devices 列出设备,看看是否有设备

adb shell 进入shell模式

adb push && adb pull 实现文件移动

3 如何查看设备信息

system_profiler SPUSBDataType

M356:Product ID: 0x4e26Vendor ID: 0x18d1  (Google Inc.)Version: 2.33Serial Number: 356BCHSN2EKJSpeed: Up to 480 Mb/secManufacturer: MEIZULocation ID: 0x14241000 / 25Current Available (mA): 500Current Required (mA): 2

4 Android Studio调用NDK动态库失败,提示找不着,Eclipse则可以

原因:

so文件+引用头文件;
比Eclipse多一步,需要配置build.gradle。Eclipse 调用动态库成功,出现问题
直接在libs下放置动态库即可。sourceSets {main {jniLibs.srcDirs = ['libs']}}
否则找不到对应的动态库。

5 Android Studio 调用NDK库写文件失败,提示权限不对

manifest中配置的权限android.permission.WRITE_EXTERNAL_STORAGE
尤其要注意位置,和Application的相对位置。否则无效。

6 思路

 一般打日志,出错的地方,打印出原因码,诸如dlerror等方法的使用


7 过程中,遇到的一些疑问,还未来地及搞明白,先记录下来

1 是否一定要静态链接编译,LOCAL_SHARED_LIBRARIES :=
2 Android.mk用途,能仅仅编译so库吗
3 NDK要调用三方库,如何编写Android.mk
4 确认dlopen失败原因码(提示找不到libgnustl_shared.so)
5 Application.mk又做何用
6 APP_STL这个值很有用,通过首先加载libgnustl,规避掉问题




http://www.ppmy.cn/news/865275.html

相关文章

制作svg动画

要实现一步一步画出来一个图片,css3做不到吧。除非一张张的图片定时显示。想不到别的招了。如今用的是一个插件,做了一个svg动画。 插件地址:http://lazylinepainter.info/ 先用AI做好路径,保存为svg格式的文件。 使用插件。先引入…

【Keil MDK】(一)Keil MDK 5.28 的下载、安装、破解

1.Keil MDK介绍 Keil MDK是适用于各种基于Arm Cortex-M的微控制器器件的完整软件开发环境。 MDK包括μVision IDE 和调试器,Arm C / C 编译器以及必要的中间件组件。 2.获取MDK安装包 Keil MDK的安装包可以从官方网站获取,最新版为5.28:…

放屁的犀牛(farting rhino)

犀牛 示例HTMLCSSJS 更多有趣示例 尽在 知屋安砖社区 示例 HTML <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 566.93 567.32"><ellipse id"shadow" cx"271.09" cy"401.98" rx"124.49" ry&quo…

matlab中的addemup是什么,毕业论文-rsa密码体制的设计及matlab语言下的实现

四川理工学院毕业论文RSA密码体制的设计及MATLAB语言下的实现学生XXX学号06121020230专业数学与应用数学班级20062指导教师张金山四川理工学院理学院二O一O年六月摘要RSA算法是一个能同时用于加密和数字签名的算法&#xff0c;易于理解和操作&#xff0c;有较高的安全性&#x…

C语言程序设计作业模拟答案,《C语言程序设计》模拟题及答案

《C语言程序设计》模拟题及答案 一.单项选择题 1.有char c=’1’,下面说法中正确的是( )。 A.语句putchar(c+2);的输出结果为51 B.语句putchar(“%d”,c+2);的输出结果为3 C.语句putchar(“%c”,c+2);的输出结果为51 D.语句putchar(“%c”,c+2);的输出结果为3 2.设c1,c2均是ch…

[渝粤教育] 西南科技大学 程序设计语言(C) 在线考试复习资料

程序设计语言&#xff08;C&#xff09;——在线考试复习资料 一、单选题 1.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( ) A.地址传递 B.单向值传递 C.由实参传给形参,再由形参传回实参 D.传递方式由用户指定 2.下列关于C语言用户标识符的叙述中正确…

ES(5)单节点集群

分布式集群 创建单节点集群 PUT http://101.43.146.44:9200/users body: {"settings":{"number_of_shards":3,"number_of_replicas":1} }返回结果 {"acknowledged": true,"shards_acknowledged": true,"index&quo…

java中http请求,记得加字符集 UTF-8,StringEntity

http请求经常会遇到一些奇怪的问题&#xff0c;例如发送请求失败&#xff0c;或者response出现问题&#xff0c;或者参数中带了url调接口失败&#xff0c;调用微信接口失败&#xff0c;调用nginx转发失败&#xff0c;等等。 但用postman调用不会有问题。 这说明参数本身没有问…