希望看看大家对这两个概念的认识,深入的最好,浅显的也欢迎!谢谢~

解决方案 »

  1.   

    jni是java语言调用native语言的方式,类似c#的p/invoke,ndk是android上的native 语言开发的sdk工具包,jni一般在j2se上,pc上可以用java调用windows的c api
      

  2.   

    最近项目中使用到了JNI,被折腾的不行,没有java基础搞这块还真不容易
      

  3.   

    jni,编译c写的代码
    ndk,编译C++的代码,例如用到opencv的api,需要用ndk编译。
      

  4.   


    都可以编译C或者C++的代码。NDK在JNI的基础上做了一些针对Android开发方面的修改,大致是一样的。
      

  5.   

    ndk(Native Development Kit)“原生”也就是二进制了
    android常用的开发方式是java封装的库
    而这些库的底层实现是由C/C++实现,如媒体,图形库等
    java调用这样实现就需要用jni(Java Native Interface)了
    平时用的也就是google给我们封装的好的库,即便是底层实现用的不是Java
    但都有统一的Java接口而NDK的作用是“我们自己写本地代码”(C/C++),自己用jni封装成Java接口
    比如我们想做个计算,二这不是Java的强项,可以用C/C++来写实现,返回一个运算结果就行了
    NDKr5已经实现了不用写一行Java代码二开发程序了,只不过还是用到了虚拟机
    细节被封装隐藏起来了而已仅个人理解
      

  6.   


    all of  them   c/c++ 
      

  7.   

    JNI和NDK,以及像.net中的PInvoke都是为了提供ABI(Application Binary Interface),即在二进制层面上的应用接口。
      

  8.   


    jni只是一个java调用本地语言api的方式, 我在2楼说的够明白了,没啥神奇的,纯体力活
      

  9.   

    NDK其实多了一个把.so和.apk打包的工具,这个是很重要的。而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。如果是做应用开发,则需要NDK工具,不然你开发的应用程序怎么给用户用呢?难道帮他重新编译文件系统?其他至于实现,java调用本地C/C++函数,及其编写方式,我觉得JNI和NDK没有什么区别。还有一个我个人理解,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件,比如utils/Log.h,而后者的资源更多,当然NDK正在努力开发中,以便支持更丰富的接口。