NDK 开发记录

来源:互联网 发布:苏州 矩阵光电 新三板 编辑:程序博客网 时间:2024/06/06 17:21
NDK 开发记录
 写这篇博文也就是记录下用 eclipse NDK开发的点滴,以便积累,后续再总结Studio的。
  1.环境搭建:
    下载最新版的NDK,NDK官网下载地址
  2.配置环境变量:
    添加 ANDROID_NDK_HOME; path
   
    测试:
    
    3.配置项目编译项:
      项目右键-->properties-->Builders-->New...-->Program-->OK-->如图配置
    
    
    
    
    
    4.新建 Android 项目:
    5.在项目根目录下新建 jni 文件夹(固定格式),用来存放jni相关文件
    6.新建 java 文件,声明 native 方法,用来生成头文件
    
    7.此时eclipse已经将HelloJni.java 编译成了 HelloJni.class,打开CMD,cd 到 工程目录下的bin/classes,输入 javah com.jni.HelloJni  生成 com_jni_HelloJni.h 头文件
    
    8.将 com_jni_HelloJni.h 拷贝到 项目下的 jni 目录下,新建 com_jni_HelloJni.c 文件(此时这个文件名可以自由命名,但为了可读性,不要更改),实现头文件中声明的函数:
    
    9.在jni目录下新建 Android.mk 和 Application.mk 文件:
  
  
    10.此时保存一下,控制台就会生成相关so信息(这和CMD运行 ndk-build 一样):
    
  11.到此,so文件生成完毕,看下工程结构目录:
    
  12.之后就是正常调用了。这里提一下动态加载so库,一般我们在修改native层代码后重新生成so,那么之前集成了该so的项目就得重新替换so,再打包发版,很是麻烦。那么我们可不可以在so更新之后,APP自动替换so,并加载呢?答案是肯定的,在加载so库的时候有两个方法:
  System.loadLibrary(String libName);  该方法为一般加载,so需要放到项目libs下,只需传入so的模块名即可(与在 Android.mk 中定义的 LOCAL_MODULE 一致);
  System.load(String pathName);  该方法需要传入so的完整的,可执行的目录。有两个路径:/system/lib/ (该路径的读写需要root权限) 和  /data/data/<packageName>/  (应用的私有目录,无需权限)
  那么我们使用第二种方法实现动态加载so,就需要将外部网络下载到sd卡上的so拷贝到私有目录下,即可。具体操作请看我的之前博客:Android 动态加载so

  到此,基本的NDK开发就算完成了,后续将继续研究上传。
  路漫漫其修远兮,吾将上下而求索!
0 0
原创粉丝点击