• ndk 入门实例


    引用:http://zctya.blog.163.com/blog/static/1209178201181074018603/

    目标:

    利用NDK 生成 SO 库,使用 SO 库进行 JNI 调用,在 Android sdcard 创建文件并写入数据。
    工具:NDK 1.6 、Eclipse for java 、android SDK 、Cygwin

    一、下载  Cywin
    从Cywin官网 
    http://www.cygwin.com/ 下载所需要的版本,这里仅介绍在Windows下使用  Cywin
    二、下载 NDK 
    这个直接从Android 官网下载就好了,现在不用FQ了。
    www.android.com
    三、安装 Cywin 参考 【eoe特刊】第七期:NDK.pdf 大家可以去看这个PDF
    下载到的Cywin 的程序文件为 setup.exe 文件 
    1、双击这个文件,启动安装
    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog
    2、下一步

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    3、在线安装

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    4、选择安装路径

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog

     
    5、下载文件缓存路径

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    6、选择网络连接方式

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    7、选择下载镜像站点,目前有一个最新的镜像是163.com,大家选择这个速度快,网易提供的源

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    8、下载安装

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog

     
    9、选择安装项

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    10、启动 Cywin 测试 

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    11、输入命令测试

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    四、配置Cywin
    先找到安装路径下的 .bash_profile 文件,
    我的环境位于:

    2.修改 /home/$your computer's login name$/.bash_profile 在其中添加下面两句

     # 这个里面的f/Android/android-ndk-r6b是存放NDK的目录,我的是F盘下Android文件夹中的android-ndk-r6b文件夹就是NDK的目录
    ANDROID_NDK_ROOT=/cygdrive/f/Android/android-ndk-r6b
    # 你懂的
    export ANDROID_NDK_ROOT

        其中前一句需要修改为你自己的路径,保存后,重新启动 Cygwin 。 注意:这里如果是中文 OS 使用记事本或者写字板打开编辑后,重新启动 Cygwin 会报错。
    五、编译NDK实例( hello-jni),测试一下
    我们使用NDK自带的一个例子来生成.so文件
    生成 .so 的步骤 ①、在Cywin中,首先跳转到NDK实例目录下面,

     cd /cygdrive/f/Android/android-ndk-r6b//samples/hello-jni/

    ②、执行下面的命令

    $ANDROID_NDK_ROOT/ndk-build

        等待片刻,就会有提示

     # $ANDROID_NDK_ROOT/ndk-build
    Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
    Gdbsetup : libs/armeabi/gdb.setup
    Gdbsetup : libs/armeabi/gdb.setup
    SharedLibrary : libhello-jni.so
    Install : libhello-jni.so => libs/armeabi/libhello-jni.so

        此时.so文件生成成功
    六、现在我们来写一个自己的程序来试一下.so,本人使用1.6以上版本 
    1.用Eclipse 创建一个Android程序,MyNDK

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 


    2. 

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    3.

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    4.

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    5 生成 JNI  头文件

    下面生成JNI 头文件啦,使用 javah 命令,对 JNI..java 这个文件生成,别搞错啦!

    使用cmd 进入 android 项目的 bin 目录中,然后执行  javah -classpath .  -jni cc.androidos.jni.JNI 这个命令。别忘记包名!( ^_^


    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    生成了一个cc_androidos_jni_JNI.h

    打开看看:(里面都是c 语言的头文件声明)  
    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog

     6.书写C 代码,写入数据

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    com_zctya_jni_MyJni
    .h内容不变
      com_zctya_jni_MyJni.c的内容

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 


    在这里的代码会在运行的时候向sdcard 写入 12530文件夹中的bj12530.log文件中写入 数据”
    aaaa“。
    7.  编译SO 文件

    在NDK的主目录 android-ndk-r6b 下面有个 sources 文件夹中创建一个名为 myndk 的文件夹
    不知道这里是为什么与网上的介绍不太一样

    我这里需要在 myndk 文件夹下面再创建一个名为 jni 的文件夹,文件夹中有如下三个文件

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 

    这里的Android.mk文件中的内容如下

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog
     
    执行过程中
    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 
    执行后,结果如 

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 

    8、把生成的so库,放到Android 工程下面
    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog

      
    把 libs 文件夹,复制到 android中MyNDK工程的主目录

    9、启动模拟器测试:注明这里的12530文件夹和bj12530.log文件是原来创建好的

    这里还有个疑问为什么别人用 make APP=××× -B 之类的就可以通过,而我就不行呢,郁闷中...,还望知者赐教

    [  make APP=××× -B 是NDK1.4之前的版本  

    附相关源码:

    NDK入门实例,生成.so文件 - 心海飘云 - zctyas blog 

    http://u.115.com/file/bhixb5c3 NDK_demo.rar

  • 相关阅读:
    图文讲解ImageView的ScaleType
    android问题总结:
    芯片介绍
    js正则表达式中/=s*".*?"/g表示什么意思?
    fidder配置 https设置 手机客户端
    JAVAAndroid 多线程实现方式及并发与同步
    多线程之问题总结
    html_学习地址
    java保留小数后两位的四种写法
    Glide 加载部分圆角图片
  • 原文地址:https://www.cnblogs.com/sode/p/2886299.html
Copyright © 2020-2023  润新知