最新资讯 New
- 2019-09-15
- 莱芜微信小程序开发需要认真思考几个必要问题:
- 2019-09-15
- 泰安APP软件开发公司如何开发更高效的移动应用?
- 2019-09-14
- 莱芜APP软件开发公司发展的风口,你知道几个?
- 2019-09-14
- 社交APP软件开发会有怎样的特点
- 2019-09-12
- 泰安APP开发之用户行为分析的三个方法
Android NDK开发中的错误来自泰安软件开发的介绍
文章作者:佚名 时间:2015年08月04日
Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。泰安软件开发向您介绍,NDK包括:
从C / C++生成原生代码库所需要的工具和build files;
将一致的原生库嵌入可以在Android设备上部署的应用程序包文件中;
支持所有未来Android平台的一系列原生系统头文件和库。
为何要用到NDK?概括来说主要分为以下几种情况:
代码保护,由于APK的Java层代码很容易被反编译,而C/C++库反汇难度较大;
在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的;
便于移植,用C/C++写的库可以方便地在其他的嵌入式平台上再次使用。
Java Native Interface标准是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在Java虚拟机内部运行的Java代码能够与用其它编程语言编写的应用程序和库进行交互操作。
简单来说,泰安软件开发提示,可以认为NDK就是能够方便快捷开发.so文件的工具。JNI的过程比较复杂,生成.so需要大量操作,而NDK的作用则是简化了这个过程。
NDK编译生成的.so文件作为程序的一部分,在运行发生异常时同样会造成程序崩溃。不同于Java代码异常造成的程序崩溃,在NDK的异常发生时,程序在Android设备上都会立即退出,即通常所说的闪退,而不会弹出“程序xxx无响应,是否立即关闭”之类的提示框。
NDK是使用C/C++来进行开发的,熟悉C/C++的程序员都知道,指针和内存管理是最重要也是最容易出问题的地方,稍有不慎就会遇到诸如内存无效访问、无效对象、内存泄露、堆栈溢出等常见的问题,最后都是同一个结果:程序崩溃。例如我们常说的空指针错误,就是当一个内存指针被置为空(NULL)之后再次对其进行访问;另外一个经常出现的错误是,在程序的某个位置释放了某个内存空间,而后在程序的其他位置试图访问该内存地址,这就会产生无效地址错误。
泰安软件开发认为,利用Android NDK开发本地应用时,几乎所有的程序员都遇到过程序崩溃的问题,但它的崩溃会在logcat中打印一堆看起来类似天书的堆栈信息,让人举足无措。单靠添加一行行的打印信息来定位错误代码做在的行数,无疑是一件令人崩溃的事情。在网上搜索“Android NDK崩溃”,可以搜索到很多文章来介绍如何通过Android提供的工具来查找和定位NDK的错误,但大都晦涩难懂。
如果你看过logcat打印的NDK错误的日志就会知道,我省略了后面很多的内容,很多人看到这么多密密麻麻的日志就已经头晕脑胀了,即使是很多资深的Android开发者,在面对NDK日志时也大都默默地选择了无视。
其实,只要你细心的查看,再配合Google 提供的工具,完全可以快速地准确定位出错的代码位置,这个工作我们称之为“符号化”。需要注意的是,如果要对NDK错误进行符号化的工作,需要保留编译过程中产生的包含符号表的so文件,这些文件一般保存在$PROJECT_PATH/obj/local/目录下。
从C / C++生成原生代码库所需要的工具和build files;
将一致的原生库嵌入可以在Android设备上部署的应用程序包文件中;
支持所有未来Android平台的一系列原生系统头文件和库。
为何要用到NDK?概括来说主要分为以下几种情况:
代码保护,由于APK的Java层代码很容易被反编译,而C/C++库反汇难度较大;
在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的;
便于移植,用C/C++写的库可以方便地在其他的嵌入式平台上再次使用。
Java Native Interface标准是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在Java虚拟机内部运行的Java代码能够与用其它编程语言编写的应用程序和库进行交互操作。
简单来说,泰安软件开发提示,可以认为NDK就是能够方便快捷开发.so文件的工具。JNI的过程比较复杂,生成.so需要大量操作,而NDK的作用则是简化了这个过程。
NDK编译生成的.so文件作为程序的一部分,在运行发生异常时同样会造成程序崩溃。不同于Java代码异常造成的程序崩溃,在NDK的异常发生时,程序在Android设备上都会立即退出,即通常所说的闪退,而不会弹出“程序xxx无响应,是否立即关闭”之类的提示框。
NDK是使用C/C++来进行开发的,熟悉C/C++的程序员都知道,指针和内存管理是最重要也是最容易出问题的地方,稍有不慎就会遇到诸如内存无效访问、无效对象、内存泄露、堆栈溢出等常见的问题,最后都是同一个结果:程序崩溃。例如我们常说的空指针错误,就是当一个内存指针被置为空(NULL)之后再次对其进行访问;另外一个经常出现的错误是,在程序的某个位置释放了某个内存空间,而后在程序的其他位置试图访问该内存地址,这就会产生无效地址错误。
泰安软件开发认为,利用Android NDK开发本地应用时,几乎所有的程序员都遇到过程序崩溃的问题,但它的崩溃会在logcat中打印一堆看起来类似天书的堆栈信息,让人举足无措。单靠添加一行行的打印信息来定位错误代码做在的行数,无疑是一件令人崩溃的事情。在网上搜索“Android NDK崩溃”,可以搜索到很多文章来介绍如何通过Android提供的工具来查找和定位NDK的错误,但大都晦涩难懂。
如果你看过logcat打印的NDK错误的日志就会知道,我省略了后面很多的内容,很多人看到这么多密密麻麻的日志就已经头晕脑胀了,即使是很多资深的Android开发者,在面对NDK日志时也大都默默地选择了无视。
其实,只要你细心的查看,再配合Google 提供的工具,完全可以快速地准确定位出错的代码位置,这个工作我们称之为“符号化”。需要注意的是,如果要对NDK错误进行符号化的工作,需要保留编译过程中产生的包含符号表的so文件,这些文件一般保存在$PROJECT_PATH/obj/local/目录下。
想要了解更多详情欢迎来电咨询18678812288,或登陆网址www.sdxinnongcun.com。联系人:王经理。
上一篇:莱芜软件开发向您介绍软件危机