NDK 开发实例



NDK开发实例

  1. 刚接触android studio,正好手头有个移植任务,把以前的eclipse的工程移植到androidstudio开发环境。

    移植过程中,发现要用到NDK(android native develop kits)

    NKD可以把c/c++ ->编译成一个linux下可以执行的二进制文件, java代码里面就可以通过jni调用执行二进制的文件.

     

     什么是JNI java本地开发接口,JNI是一个协议这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。

     

     JNI开发用途:驱动开发 (wifi-hotspot) 2.3无线热点共享  Native code效率高,数学运算,实时渲染的游戏上,音视频处理(极品飞车,opengl,ffmpeg),复用代码(文件压缩,人脸识别…)等。

     

  2. 开发环境介绍:

    Android studio 1.5

            

  3. 建立一个空的工程NDKTest

  4. 声明一个native函数:

    public native StringgetStringFromNative();

     

    然后在工具栏选择make->build在目录C:\Users\leo.liu\AndroidStudioProjects\NDKTest\app\build\intermediates\classes\debug\com\example\leoliu\ndktest下,会生成MainActivity.class文件。

     

  5. 根据生成的MainActivity.class文件,使用javah命令生成需要的.h头文件。具体命令如下:

    javah -d jni -classpathC:/Users/leo.liu/AppData/Local/Android/sdk/platforms/android-23/android.jar;C:/Users/leo.liu/AppData/Local/Android/sdk/extras/android/m2repository/com/android/support/appcompat-v7/23.1.1/appcompat-v7-23.1.1-sources.jar;C

    :/Users/leo.liu/AndroidStudioProjects/NDKTest/app/build/intermediates/classes/debugcom.example.leoliu.ndktest.MainActivity

     

    注意:文件路径标识符是‘/’,该标识符符合linux的书写规范

     

    该命令运行完之后,在目录C:\Users\leo.liu\AndroidStudioProjects\NDKTest\app\src\main下,生成新的目录jni。新的头文件com_example_leoliu_ndktest_MainActivity.h存放在jni目录下面。

  6. 由于工程下面没有自动生成jni目录和头文件com_example_leoliu_ndktest_MainActivity.h可以手动添加目录jni,然后将生成的头文件拷贝到jni目录下。

  7. 修改3个文件

    build.gradle中,增加:


     

    Gradle.properties增加:


     

     

    Local.properties增加:

     

     

     

    注: nkd r10是从网上下载的,然后解压到与sdk相同的目录。

     

  8. 修改MainActivity

  9. 编译运行程序

    发现编译错误。原来还要在jni目录下,添加意义空的c文件。

    现在工程就可以运行了。

     


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值