美文网首页
Android Ndk 入门

Android Ndk 入门

作者: struggle_2a26 | 来源:发表于2018-02-02 11:52 被阅读0次

    首先 看一下程序的运行效果

    准备工作:

    参考文章:NDK 开发 从入门到放弃

    1.首先从官网下载ndk开发工具 ndk_bundle

      在Android Studio中进行配置

      File->Project Structure->Android NDK Location-> 选择ndk下载路径 -> OK

    so   easy!!!!!!!!

    配置NDK

    2.开发前需要对Android Studio 进行 命令配置

      两个命令 javah和ndk-build.cmd

      javah 用于生成与JNI对应的 c/c++ 头文件

      配置 Setting->Tools-> External Tools -> 添加

          Name : javah.jni

          Description: 什么乱七八糟 

          Tool Setting 

              Program: 选择javah 路径; 我的路径为 C:\Program Files (x86)\Java\jdk1.8.0_144\bin\javah.exe

              Parameters:命令参数    -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$

              Working directory: 工作路径  $ModuleFileDir$\src\main\java

    配置javah

      ndk-build.cmd 根据c/c++生成so文件

      Setting->Tools-> External Tools -> 添加

          Name : ndk-build

          Description:随便填

          Tool Setting

              Program:  ndk-build安装路径  G:\AndroidNDK\ndk-bundle\ndk-build.cmd 

              Parameters:

              Working Directory:  工作路径  $ModuleFileDir$\src\main\

    配置 ndk-build

    开始编码 

    1.新建java Class JniClass, 添加 native 方法 egtStringFromC()  ,注意添加 native字段 ,标明该方法是原生方法。

    在目录 选择该类 点击鼠标右键 选择 External Tools 可以看到 javah.jni 的命令 点击 

    可以看到 main目录下多了一个jni目录 ,有一个以包名加类名为命名方式的c语言头文件 ,

    C语言头文件

    可以将 改头文件重命名 为 jniclass.h(任意名字)

    需要用到里面的 一个以包名加类名加方法名的方法  JNIEXPORT jstring JNICALL Java_com_micheal_testndk_JniClass_getStringFromC

    (JNIEnv *, jclass);  

    新建文件 jniclass.c  将头文件里面的方法copy到 cpp文件中(最好是复制 自己写也行 不过必须相同   ) 方法里面的参数 JNIEnv 代表指向java虚拟机的指针  ,jclass 代表调用 ndk方法的java对象 ,如果 native方法 中有入口参数 ,紧跟在 第二个参数后面 ,前两个参数在使用 javah生成头文件时一定会生成的   ,之后的参数根据native方法生成。。。。。

    jniclass.cpp

    代码编写完成,需要在目录下添加 两个mk文件 

        Android.mk    用于指定生成编译生成的so库名称 引用的头文件目录 ,需要编译的 c/c++ 文件和静态库文件   用法参考 : Android.mk 用法详解

        Application.mk 指定需要编译的cpu架构平台  APP_ABI有四种类型(默认armeabi),armeabi、armeabi-v7a、x86、mips

    一切就绪  选中之前新建的 jniclass.cpp 文件   使用ndk-build命令生成so库  

    生成so库

    可以看到 libs文件夹下面 生成了 各个平台下的 so文件  至此 编码 已经完成   用 Android Studio的同学注意了 ,so文件编译生成的路径在 main/libs下 但是 Android Studio 默认so文件路径 在 jniLibs下 ,所以需要在main文件夹下 新建jniLibs文件夹 将所有的so文件复制过去 ,否则运行时会抛出异常

    接下来开始运行 

    运行结果

    和预期效果相同,多谢阅读。

    文章仅供新手参考,存在错误之处 ,敬请指出, 本人也是新手,求交流,求批评。

    相关文章

      网友评论

          本文标题:Android Ndk 入门

          本文链接:https://www.haomeiwen.com/subject/gvqlzxtx.html