NDK开发实操,原来可以如此简单!

今天给大家分享一下NDK开发流程,首先要明白JIN和NDK是什么,不熟悉的可以先看这篇博文Android:JNI与NDK到底是什么?然后进入我们的开发实践过程。(基于Android studio版本大于2.2)

1、新建项目工程,勾选C++支持。


2、项目新建完成会默认添加Java调C程序,我们只需在cpp/native-lib.cpp文件写C部分,然后在Java中调用。通过一个案例给大家操作一下,需求是这样的:Java传递两个整数到C端方法,C端再调用Java求和的方法,得到结果后再返回个Java部分。逻辑有点绕,有人也许疑惑直接在Java就可以调用求和的方法为什么还要通过C中转呢?这里我只是给大家介绍一下Java调C和C调用Java的方法。

(1)在MainActivity中定义add方法。


(2)在nativie-lib.cpp中编写调用add方法的callJava函数


注意:a.FindClass参数为方法所在的包名/类名

          b.GetMethodID第二参数为方法名,第三个参数(II)I,括号里两个I表示2个int参数,括号后的I表示返回类型为int。如果方法是无参返回类型为空则用()V,参数为String返回空则用(Ljava/java/lang/String;)V表示

      c.CallIntMethod方法表示返回类型为int,如果返回类型为空则用CallVoidMethod方法,静态方法则用CallStaticVoidMethod

(3)编写提供给Java的C端方法Java_com_lpf_testndk_MainActivity_intFromJNI方法


注意:a.如果本地代码是C++(.ccp或.cc),需要添加extern "C"

          b.JNIEXPORT 和JNICALL是固定格式不能省,其中jint是返回类型

          c.方法命名规则:Java_包名_类名_方法名,其中Java_必须大写,包名中的.替换成_,包名中的_替换成_1

          d.此方法调用了callJava方法,其中callJava要放到调用方法的前面,不然找不到callJava方法

(4)在MainActivity中引入native-lib,并声明native方法,然后调用native方法


(5)到此已实现Java调C,C调Java操作,下面是完整代码


另附JNI与Java类型对照表



猜你喜欢

转载自blog.csdn.net/yufumatou/article/details/80371796
今日推荐