Android Studio下的JNI使用全解析(一)

一:创建工程

  • 1.1 创建新的工程时勾选上Include c++ support,然后一路next
    这里写图片描述
    勾选的目的是为了写C代码时有代码提示

  • 1.2 创建完毕之后修改CMake你要生成的so库的名称
    这里写图片描述

  • 1.3 把Src/main/cpp文件夹下默认生成的c文件删除,并把MainActivity中默认生成与JNI有关的代码删除,然后Build->clean Project

二:环境配置

  • 2.1 在local.properties文件中,加上本地NDK的路径,如果本地没有ndk,可在设置中下载
    这里写图片描述
    这里写图片描述

  • 2.2 在gradle.properties中添加配置android.useDeprecatedNdk=true
    这里写图片描述

  • 2.3 修改gradle文件的default config领域中,添加 ndk{
    moduleName “test-lib” //so文件: lib+moduleName+.so
    abiFilters “armeabi”, “armeabi-v7a”//cpu的类型
    }
    定义so库的名称和CPU类型
    这里写图片描述

三:代码实现

  • 3.1创建一个类,类名为JNI,在其中定义本地方法
    public native int[] increaseArrayEles(int[] intArray);表示将一个int数组中的每个元素都+1并返回

  • 3.2生成头文件,在java目录下执行 (javah 类的全路径)命令,并把生成的头文件移动到cpp文件夹下
    这里写图片描述

这里写图片描述

  • 3.3 在cpp文件夹下创建c文件,并编写C代码,C代码如何编写请查阅相关资料
    这里写图片描述

这里写图片描述
* 3.4加载动态链接库,在JNI类,也就是定义本地方法的类中添加静态代码块,并在其中加载动态链接库
这里写图片描述

  • 3.5此时,进行编译(Build->Rebuild Project),生成so库,路径在Build->intermediates->cmake->debug->obj 下
    这里写图片描述

  • 3.6此时在MainActivity中调用改本地方法,看是否成功
    这里写图片描述
    运行截图如下:
    这里写图片描述
    可见,输入的是10,20,30,输出的是20,30,40,运行成功,这里java调C就完成了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章