设为首页 加入收藏

TOP

Android的NDK开发入门示例
2014-11-24 02:33:49 来源: 作者: 【 】 浏览:1
Tags:Android NDK 开发 入门 示例

NDK: NativeDevelopment Kit


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:\LHANDROID\code\hello


* 3. md jni;


* 4. 运行项目,编译HelloJni.java,或者手工使用javac编译,在目录


* C:\LHANDROID\code\Hello\bin\classes\com\example\hello


* 中生成HelloJni.class


* 5. 根据HelloJni.class中本地函数的定义生成c语言头文件:


cd C:\LHANDROID\code\Hello\


javah -classpath bin\classes -d jni com.example.hello.HelloJni


* 6. 根据生成头文件cd C:\LHANDROID\code\Hello\jni\com_example_hello_HelloJni.h


中的定义,编写hello-jni.c的函数定义;


* 7. 拷贝一个Android.mk到jni中修改


* 8. 编译:C:\LHPROGRAM\android-ndk-r8d\ndk-build.cmd


结果


C:\LHANDROID\code\hello>C:\LHPROGRAM\android-ndk-r8d\ndk-build.cmd


C:/LHPROGRAM/android-ndk-r8d/build/core/add-application.mk:128: Android NDK: WAR


NING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./Androi


dManifest.xml


"Compile thumb : hello-jni <= hello-jni.c


SharedLibrary : libhello-jni.so


Install : libhello-jni.so => libs/armeabi/libhello-jni.so


* 9. 直接编译运行apk


*


*/


建议


最初觉得自己对c/c++还算熟悉,结果发现其实会那个还远远不够,核心的问题是要搞清楚那个jni.h,明白java的数据类型在ndk中的映射,同时知道对该类型的操作方法。强烈建议仔细看看jni.h文件。


GOD BLESS U!


示例参考下载


具体下载目录在 /2013年资料/10月/13日/Android的NDK开发入门示例


推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android生命周期测试 下一篇通过GPS测试跑步速度可行性验证

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: