• Android Studio JNI体验


    近期项目中须要调用c/c++的实现,Android是支持JNI的。所以体验了一下JNI的全过程


    1. 前期环境准备

    (1) 下载NDK,网址是https://developer.android.com/ndk/downloads/index.html。 国内用户须要翻墙。
    眼下官网上mac版最新的是android-ndk-r10e-darwin-x86_64.bin。 文件比較大,300多M。


    下载下来后,解压到对应文件夹,备用。

    解压命令例如以下:


    ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
    ndk$ ./android-ndk-r10c-darwin-x86_64.bin
    解压后在原文件夹会生成一个新的文件夹(android-ndk-r10e), 里面即是NDK的各种工具。


    windows系统应该是能够直接用7zip或者zip工具解压,生成一个包括NDK环境的目录。 都比較简单。




    (2) 设置NDK环境变量


    跳转到用户文件夹下,打开.bash_profile文件
    cd ~
    touch .bash_profile
    open -e .bash_profile
    加入例如以下:
    export NDK_ROOT=/Users/your_account/.../android-ndk-r10e


    source .bash_profile 
    然后重新启动terminal, 输入ndk-build, 应该会输出一大堆的信息。


    类似以下的信息:
    MacBook-Pro:~$ndk-build
    Android NDK: Could not find application project directory !    
    Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
    /Users/xxxxx/android-ndk-r10e/build/core/build-local.mk:143: *** Android NDK: Aborting    .  Stop.


    这样前期的环境准备就完毕了。




    2. JNI的编写


    这是官网上一篇介绍JNI的文章, http://developer.android.com/training/articles/perf-jni.html。

    里面有提到怎样调用JNI的方法,
    以及怎样在JNI中訪问java的对象或者方法或者属性。 这里就不具体介绍了。


    在Android Studio中,在响应的java代码的地方写好native的方法。
    接着就是要生成c的头文件,须要用到javah命令,首先cd到source文件夹文件夹下。android studio中的文件夹是src/main/java


    调用javah生成头文件,调用方法例如以下:


    javah -classpath /Users/....../sdk/platforms/android-21/android.jar:. -d jni com.test.native.nativeUtils


    运行完没有问题的话,会在同文件夹生成jni文件夹。里面包括了生成的c的头文件。




    须要注意的两点。 classpath的最后有:., 第二点是java的class名称,用.替代文件夹分隔符。




    3. 编写JNI程序,这个没啥说的,就是c或者c++程序。


    4. 编写Android.mk和Application.mk
    相同的。android官网提供了非常多的帮助性文档 
    https://developer.android.com/ndk/guides/android_mk.html


    https://developer.android.com/ndk/samples/sample_na.html#apm


    简略例如以下:
    生成的so的名字,相同也是在java中loadlibrary中的名字。


    LOCAL_SRC_FILES 指定了编译的源码的文件名称,能够指定多个


    LOCAL_MODULE    := native-test


    LOCAL_SRC_FILES := main.c


    LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv1_CM


    然后编写Application.mk, 指定最小支持的api level等属性


    APP_ABI := all
    APP_PLATFORM:= android-21
    APP_OPTIM := release


    5. 生成so文件
    最后ndk-build命令。会生成各种格式的so文件。 大功告成。


    6. 在java程序中载入生成的so文件。


    static {
    loadLibrary("native-test");
    }

  • 相关阅读:
    ELK 5.6.8 安装部署
    Port Forwarding in Windows
    python 压缩文件为zip后删除原文件
    Windows安装nginx服务
    redis 启动停止脚本
    使用sed替换指定文件指定行的指定文本
    auto和bool
    宽字符
    函数递归
    关于主机用户名显示为"-bash-4.1$"
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6971027.html
Copyright © 2020-2023  润新知