JNI相关

  • 配置ndk路径(local.properties)
ndk.dir=D\:\\AndroidStudio_2.3\\sdk\\ndk-bundle
* gradle配置使用ndk(gradle.properties)
android.useDeprecatedNdk=true
* 在module下的build.gradle添加ndk以及jni生成目录
ndk{ 
moduleName "native-lib" 
abiFilters "armeabi", "armeabi-v7a", "x86"
}

下面这个例子中,我们首先实例化JNI,通过JNI对象调用call()方法,然后就会执行c++中对应的方法,在c++方法中执行一系列操作后,我们可以通过反射调用JNI中的另一个方法addition(int x,int y),可以传递数据

  • JNI.java
public class JNI{
static {
        System.loadLibrary("native-lib");
    }

  public native void call();

  public int addition(int x, int y) {
        int result = x + y;
        return result;
    }
}

生成.h头文件

javah -jni com.sakuraqh.ndkdemo.JNI

  • native-lib.cpp
#include "com_sakuraqh_ndkdemo_JNI.h"
#include <string>

extern "C" {
JNIEXPORT void JNICALL Java_com_sakuraqh_ndkdemo_JNI_call(JNIEnv *env, jobject instance) {
    jclass clazz = (*env).FindClass("com/sakuraqh/ndkdemo/JNI");
    jobject obj = (*env).AllocObject(clazz);
    jmethodID methodId = (*env).GetMethodID(clazz, "addition", "(II)I");
    //调用JNI中的addition方法
    (*env).CallIntMethod(obj, methodId, 1, 2);
}
}

详细步骤参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值