android的ndk开发入门示例

4 篇文章 0 订阅
1 篇文章 0 订阅


 

NDK: NativeDevelopment Kit

 

Android程序运行在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:\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!

 

 

示例参考:

http://download.csdn.net/detail/testingba/5203811

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Testingba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值