首页 / 操作系统 / Linux / Android的NDK开发入门示例
NDK: NativeDevelopment KitAndroid程序运行在Dalvik虚拟机中,NDK允许用户使用类似C /C++之类的原生代码语言执行部分程序。NDK包括了:从C / C++生成原生代码库所需要的工具和build files。将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。支持所有未来Android平台的一些列原生系统头文件和库使用NDK的理由:1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。上面内容摘自百度百科。有天有个哥们找到我,考虑到java的apk不够安全,想将协议部分封装到so库文件中,需要做个技术前期验证,看看效果如何,于是有了下面的示例。这个示例分步骤实现了:1. java调用.so文件2. 显示char数组的字符串3. 不同进制显示char数组4. java调用so从本地返回char数组5. java传递char数组给so,然后so修改后再返回char数组给java基本步骤是:/* 1. 先编写java文件,定义好本地函数名称和参数;* 2. cd C:LHANDROIDcodehello* 3. md jni;* 4. 运行项目,编译HelloJni.java,或者手工使用javac编译,在目录* C:LHANDROIDcodeHelloinclassescomexamplehello* 中生成HelloJni.class* 5. 根据HelloJni.class中本地函数的定义生成c语言头文件:cd C:LHANDROIDcodeHellojavah -classpath binclasses -d jni com.example.hello.HelloJni* 6. 根据生成头文件cd C:LHANDROIDcodeHellojnicom_example_hello_HelloJni.h中的定义,编写hello-jni.c的函数定义;* 7. 拷贝一个Android.mk到jni中修改* 8. 编译:C:LHPROGRAMandroid-ndk-r8d
dk-build.cmd结果:C:LHANDROIDcodehello>C:LHPROGRAMandroid-ndk-r8d
dk-build.cmdC:/LHPROGRAM/android-ndk-r8d/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml"Compile thumb : hello-jni <= hello-jni.cSharedLibrary : libhello-jni.soInstall : libhello-jni.so => libs/armeabi/libhello-jni.so* 9. 直接编译运行apk**/建议:最初觉得自己对c/c++还算熟悉,结果发现其实会那个还远远不够,核心的问题是要搞清楚那个jni.h,明白java的数据类型在ndk中的映射,同时知道对该类型的操作方法。强烈建议仔细看看jni.h文件。GOD BLESS U!示例参考下载:免费下载地址在 http://linux.linuxidc.com/用户名与密码都是www.linuxidc.com具体下载目录在 /2013年资料/10月/13日/Android的NDK开发入门示例下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm推荐阅读:使用hello-gl2建立NDK-gdb环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm基于Android NDK开发实践案例解析 http://www.linuxidc.com/Linux/2013-03/81676.htm解决不使用Android NDK编译的bin文件No such file or directory问题 http://www.linuxidc.com/Linux/2013-03/80591.htmAndroid NDK :编写清晰的代码结构 http://www.linuxidc.com/Linux/2012-07/66105.htmAndroid开发教程:NDK编译静态库失败 http://www.linuxidc.com/Linux/2012-06/64020.htm更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11