ndk

时间:2024-07-01 00:21:33编辑:流行君

android ndk是什么

NDK全称:Native Development Kit。1、NDK是一系列工具的集合。* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。[1]* NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。2、NDK提供了一份稳定、功能有限的API头文件声明。Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。来自百度百科http://baike.baidu.com/view/5962708.htm


android ndk是什么

android是安卓的缩写,NDK是日本电波工业株式会社的英文缩写,Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。NDK包括以下方面:1、从C / C++生成原生代码库所需要的工具和build files。2、将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。3、支持所有未来Android平台的一系列原生系统头文件和库。扩展资料:NDK的产品优势:1、NDK拥有培育人工水晶的丰富经验。而好的人工水晶决定了优质晶振产品的一半的品质。2、NDK晶振产品尺寸、规格全面,既可满足中小型、超小型电子元器件的要求,也适用于各类规格要求的细分市场。3、NDK晶体谐振器、晶体振荡器具有非常优越的频率一致性和稳定性。特别在汽车电子市场,即使在严峻的宽温(-40度到150度)和震动撞击环境下,都能保持良好的稳定性。参考资料来源:百度百科:NDK

android ndk是什么

android是安卓的缩写,NDK是日本电波工业株式会社的英文缩写,Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。NDK包括以下方面:1、从C / C++生成原生代码库所需要的工具和build files。2、将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。3、支持所有未来Android平台的一系列原生系统头文件和库。扩展资料:NDK的产品优势:1、NDK拥有培育人工水晶的丰富经验。而好的人工水晶决定了优质晶振产品的一半的品质。2、NDK晶振产品尺寸、规格全面,既可满足中小型、超小型电子元器件的要求,也适用于各类规格要求的细分市场。3、NDK晶体谐振器、晶体振荡器具有非常优越的频率一致性和稳定性。特别在汽车电子市场,即使在严峻的宽温(-40度到150度)和震动撞击环境下,都能保持良好的稳定性。参考资料来源:百度百科:NDK

“Android NDK ”是什么,在什么情况下使用?

Android 应用是在dalvik虚拟机中运行的。NDK可以让你使用本地代码语言来开发应用,比如说C/C++,这种方法对某些类型的应用的是有好处的,可以充分利用本地代码和在某些情况下加速代码的执行。对于绝大多数的应用来说,使用NDK并不是一个明智的选择,作为一个开发者,我们需要衡量它所带来的好处和缺点。使用本地代码并不一定可以使性能得到优化,但是通常使得应用代码变得复杂。一般来说,我们将应用中关键部分的代码用C/C++写,而不能由于我们习惯于用C/C++开发而把所有的代码都用C/C++来实现。有下面这些特点的应用可以考虑使用NDK:1 独立的,不和其他应用有关系的2 频繁占用CPU但是申请的内存空间不是很大的操作,像信号的处理,物体的模拟等等简单的用C/C++重写我们的代码是不会带来很大的性能提升的。在考虑是否采用本地代码开发的时候,要结合应用的实际需求并且看看Android 的framework层是否提供了我们需要的API,但是用NDK可以充分利用本地已经有的代码。Android framework提供下面两种方法来使用本地代码:1 在Android framework的框架下面开发应用,使用JNI的方法来使用NDK本地方法提供的API。这样的好处就是我们可以很好的利用的Android的framework提供的框架,但是需要编写本地具体实现的代码。这样的APK可以在Android 1.5及其之后的版本上面运行。2 写一个本地的Activity,在本地代码中实现生命回调函数,AndroidSDk提供了类,这个类可以方便的让你在你的本地代码中实现回调函数(OnCreate,OnPause),从而当这些事件发生的时候处理。


Android JNI和NDK有什么区别

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。 标准的java类库可能不支持你的程序所需的特性。 JNI·或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能。 NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了C/C++的头文件、库文件、说明文档和示例代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的问题,所以推荐初学者学好Java后再学习JNI。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。


“Android NDK ”是什么,在什么情况下使用?

1、NDK是一系列工具的集合。2、NDK提供了一份稳定、功能有限的API头文件声明。3、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。4、NDK将使Android平台支持C开发的开端。NDK使得在android中,java可以调用C函数库。我们都知道,java是半解释型语言,很容易被反汇编后拿到源代码文件,在开发一些重要协议时,我们为了安全起见,使用C语言来编写这些重要的部分,来增大系统的安全性。还有,在一些接近硬件环境下,相信大家都清楚C与java的优劣。顺带提一下:NDK并不能显著提升应用效率。why?我们都觉得C语言比起java来说效率要高出很多,一方面,随着jdk的不断更新,java的效率也随之提高;另一方面,即便使用C语言编码提高了应用效率,但是在java与C相互调用时平白又增大了开销。1、NDK是一系列工具的集合。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。2、NDK提供了一份稳定、功能有限的API头文件声明。Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。3、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)4、NDK将使Android平台支持C开发的开端。NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在NDK后续版本中提高“可调式”能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持”只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。

如何定位Android NDK开发中遇到的错误

  NDK错误发生时,我们能拿到什么信息?

  利用Android
NDK开发本地应用的时候,几乎所有的程序员都遇到过程序崩溃的问题,但它的崩溃会在logcat中打印一堆看起来类似天书的堆栈信息,让人举足无措。单靠添加一行行的打印信息来定位错误代码做在的行数,无疑是一件令人崩溃的事情。在网上搜索“Android
NDK崩溃”,可以搜索到很多文章来介绍如何通过Android提供的工具来查找和定位NDK的错误,但大都晦涩难懂。下面以一个实际的例子来说明,首先生成一个错误,然后演示如何通过两种不同的方法,来定位错误的函数名和代码行。

  首先,看我们在hello-jni程序的代码中做了什么(有关如何创建或导入工程,此处略),看下图:在JNI_OnLoad()的函数中,即so加载时,调用willCrash()函数,而在willCrash()函数中, std::string的这种赋值方法会产生一个空指针错误。这样,在hello-jni程序加载时就会闪退。我们记一下这两个行数:在61行调用了willCrash()函数;在69行发生了崩溃。

  下面来看看发生崩溃(闪退)时系统打印的logcat日志:

  [plain] view
plain copy

  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

  Build fingerprint: 'vivo/bbk89_cmcc_jb2/bbk89_cmcc_jb2:4.2.1/JOP40D/1372668680:user/test-keys'

  pid: 32607, tid: 32607, name: xample.hellojni >>> com.example.hellojni <<>> com.example.hellojni <<>> com.example.hellojni <<::basic_string(char const*, std::allocator const&)+44): Routine basic_string at /android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/_string.c:639 Stack frame #03 pc 00004fb4 /data/app-lib/com.example.hellojni-2/libhello-jni.so (willCrash()+68): Routine willCrash() at /home/testin/hello-jni/jni/hello-jni.cpp:69 Stack frame #04 pc 00004f58 /data/app-lib/com.example.hellojni-2/libhello-jni.so (JNI_OnLoad+20): Routine JNI_OnLoad at /home/testin/hello-jni/jni/hello-jni.cpp:61 Stack frame #05 pc 000505b9 /system/lib/libdvm.so (dvmLoadNativeCode(char const*, Object*, char**)+516) Stack frame #06 pc 00068005 /system/lib/libdvm.so Stack frame #07 pc 000278a0 /system/lib/libdvm.so Stack frame #08 pc 0002b7fc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180) Stack frame #09 pc 00060fe1 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272) ……(后面略) 我们重点看一下#03和#04,这两行都是在我们自己生成的libhello-jni.so中的报错信息,那么会发现如下关键信息:[plain] view plain copy #03 (willCrash()+68): Routine willCrash() at /home/testin/hello-jni/jni/hello-jni.cpp:69 #04 (JNI_OnLoad+20): Routine JNI_OnLoad at /home/testin/hello-jni/jni/hello-jni.cpp:61 回想一下我们的代码,在JNI_OnLoad()函数中(第61行),我们调用了willCrash()函数;在willCrash()函数中(第69行),我们制造了一个错误。这些信息都被准确无误的提取了出来!是不是非常简单?先获取日志,再使用ndk-stack分析这种方法其实和上面的方法没有什么大的区别,仅仅是logcat日志获取的方式不同。可以在程序运行的过程中将logcat日志保存到一个文件,甚至可以在崩溃发生时,快速的将logcat日志保存起来,然后再进行分析,比上面的方法稍微灵活一点,而且日志可以留待以后继续分析。[plain] view plain copy adb shell logcat > 1.log ndk-stack -sym $PROJECT_PATH/obj/local/armeabi –dump 1.log 第二种方法:使用addr2line和objdump命令这个方法适用于那些,不满足于上述ndk-stack的简单用法,而喜欢刨根问底的程序员们,这两个方法可以揭示ndk-stack命令的工作原理是什么,尽管用起来稍微麻烦一点,但是可以满足一下程序员的好奇心。先简单说一下这两个命令,在绝大部分的linux发行版本中都能找到他们,如果你的操作系统是linux,而你测试手机使用的是Intel x86系列,那么你使用系统中自带的命令就可以了。然而,如果仅仅是这样,那么绝大多数人要绝望了,因为恰恰大部分开发者使用的是Windows,而手机很有可能是armeabi系列。别急,在NDK中自带了适用于各个操作系统和CPU架构的工具链,其中就包含了这两个命令,只不过名字稍有变化,你可以在NDK目录的toolchains目录下找到他们。以我的Mac电脑为例,如果我要找的是适用于armeabi架构的工具,那么他们分别为arm-linux-androideabi-addr2line和arm-linux-androideabi-objdump;位置在下面目录中,后续介绍中将省略此位置:[plain] view plain copy /Developer/android_sdk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/ 假设你的电脑是windows, CPU架构为mips,那么你要的工具可能包含在这个目录中:[plain] view plain copy D:\ android-ndk-r9d\toolchains\mipsel-linux-android-4.8\prebuilt\windows-x86_64\bin\

android studio支持 ndk了吗

Android Studio 1.3 版本新增了NDK支持,能够很方便的在上面开发C++或者C代码。 简单介绍方法:一.首先将Android Studio更新到1.3版本:1.检查Android Studio更新. 可能会遇到问题:版本低于1.3检查更新却提示已经是最新版本。 那是因为更新渠道不是Beta渠道,需要先将渠道设置为Beta渠道才能更新到1.3: 然后重新检查更新就可以更新到1.3了. 二.将gradle切换到实验版本.根据Google官方提供的方法修改Gradle文件.(官方说法为测试版本不完善,需要手动修改Gradle文件以便兼容Gradle实验版,他们会在release版本中实现程序自动修改Gradle) Google原文链接:http://tools.android.com/tech-docs/new-build-system/gradle-experimental 1.将Gradle更新到2.5版本. 在这里将GradleVersion改为2.5 点击OK键就会开始自动更新Gradle了. 2.Android NDK r10e ,将NDK更新到这个版本 3.BuildTools版本要求大于19.0.0

上一篇:americanexpress

下一篇:安桌