Android-NDK的基础使用

                                                NDK基础

 

目录

 环境信息

NDK是什么

JNI是什么

如何进行NDK开发

              总结两点   

              创建工具

进行具体操作

第一步:  进行NDK开发的当然是下载NDK开发包  ,并在项目中配置好   

第二步:  新建Java类,编写 native 方法

第三步:  根据新建的java类,生成 .h 头文件(javah)

第四步: 根据生成的.h文件生成 .so文件(ndk-build)

第五步: 使用生成的SO库

第六步     结束总结 

 

 

 

 

 

 

 

环境信息

           AndroidStudio 3.4.1      JDK1.8.211      运行与Android7.1 (项目本身不需要申请权限)

  

  • NDK是什么

         NDK 是一组使您能将 C 或 C++(“原生代码”)嵌入到 Android 应用中的工具。能够在 Android 应用中使用原生代码对于想执行以下一项或多项操作的开发者特别有用:

  • 在平台之间移植其应用。
  • 重复使用现有库,或者提供其自己的库供重复使用。
  • 在某些情况下提高性能,特别是像游戏这种计算密集型应用
  • JNI是什么

         JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++进行交互。

  • 在Java代码中调用C/C++等语言的代码
  • 在C/C++代码中调用Java代码

Android-NDK的基础使用_第1张图片

                               想了解详情请参考谷歌官方NDK开发指南 https://developer.android.google.cn/ndk/guides

 

  • 如何进行NDK开发

              总结两点   

                            1.   将 java 文件转换为  .h 头文件

                            2.   创建C/C++文件将头文件引入,重新方法。再编译成 静态链接库(.a)或者动态链接库  (.so)

              创建工具

                            上述第一步使用工具是 JDK中的 javah 命令 ,生成.h文件

                            上述第二步使用工具是NDK中的 ndk-build 命令,编译成库

 

  • 进行具体操作

        

第一步:      进行NDK开发的当然是下载NDK开发包  ,并在项目中配置好   

 

Android-NDK的基础使用_第2张图片

Android-NDK的基础使用_第3张图片

 

第二步:      新建Java类,编写 native 方法

     

Android-NDK的基础使用_第4张图片

 

第三步:  根据新建的java类,生成 .h 头文件(javah)

          为了便于以后使用,我直接配置在Android Studio 的工具里 : Settings  ——>  Tools ——>External Tools ——>点击 + 号

Android-NDK的基础使用_第5张图片

          Program: D:\Software\Java\jdk1.8.0_211\bin\javah.exe      (根据自己JDK安装位置修改)

          Arguments:-classpath $ModuleFileDir$\src\main\java -jni $FileClass$   (参数最好别改)

          Working directory:  $ModuleFileDir$\src\main\jni  (根据自己想法更改  $ModuleFileDir$ 是项目路径)

设置好以后记得在项目中新建jni文件夹(如果无法找到文件夹会无法执行命令,这一步需要根据自己命令中设置的工作目录来具体分析)

Android-NDK的基础使用_第6张图片

会在命令设置的工作目录中出现 .h 头文件

Android-NDK的基础使用_第7张图片

 

第四步: 根据生成的.h文件生成 .so文件(ndk-build)

        为了便于以后使用,我直接配置在Android Studio 的工具里 : Settings  ——>  Tools ——>External Tools ——>点击 + 号

Android-NDK的基础使用_第8张图片

          Program: D:\Software\Android\Sdk\ndk-bundle\build\ndk-build.cmd      (根据自己NDK安装位置修改)

          Arguments:NDK_LIBS_OUT=$ModuleFileDir$\src\main\jniLibs  (参数最好别改)

          Working directory:  $ModuleFileDir$\src\main\jniLibs  (根据自己想法更改  $ModuleFileDir$ 是项目路径)

设置好以后记得在项目中新建jniLibs文件夹(如果无法找到文件夹会无法执行命令,需要根据自己命令中设置的工作目录来具体分析)

jni目录下创建 Android.mk  Application.mk   和 .c 或者 .cpp 的  C/C++文件

Android-NDK的基础使用_第9张图片

 

Android-NDK的基础使用_第10张图片

Android-NDK的基础使用_第11张图片

 

第五步: 使用生成的SO库

    Android-NDK的基础使用_第12张图片

在实例化 NDKTools  的时候  加载 so库     

 static { }    静态代码块 :类进行初始化时  第一加载,切只加载一次  (再次实例化 不会再运行)

      { }        代码块         :类进行初始化时  第二加载,  再次实例化 会再运行

类名{}  构造方法      :类进行初始化时  第三加载,  再次实例化 会再运行

 

第六步  结束总结 

                    1    jniLibs 文件夹是 Android应用调用 C/C++ 默认找的文件夹 ,不需要再build.gradle 里配置了

                    2    在新建 C/C++文件后  一定要添加 生成的 .h头文件,将头文件里的方法复制到C/C++ 文件里后,

                           要注意添加 变量名    ,在实现这个方法的时候要注意 C和C++ 在语法上的差别  。

                    3   在使用Android Studio 里添加的 javah 和 ndk-build  命令时,要注意在创建命令时,填写的

                         工作目录的文件夹一定要存在。

                    4   Android.mk Application.mk  .h文件   C/C++ 文件  要在同一个文件夹   ,如果不在,需要具体配置

                         Android.mk 里的文件信息

                    5   好像无法生成 armeabi  cpu 架构的 so库了  (我是没成功)

                    


 

 

你可能感兴趣的:(Android-NDK的基础使用)