android jni使用


JNI 作用:    是为了让 java代码 能调用c写的代码.


使用方法. :   先在我们的java类中 把 native 方法定义好, 例如 :


 

public native String  javaCallC();

然后我们进入dos,  如果你的工具是 android studio, 我们切换到工程的 java目录下, 然后使用 javah 包名+类名    生成一个头文件, 下面 是生成好的文件


    /* DO NOT EDIT THIS FILE - it is machine generated */
        #include <jni.h>
/* Header for class com_itcs_cscompany_jni_MainActivity */

        #ifndef _Included_com_itcs_cscompany_jni_MainActivity
        #define _Included_com_itcs_cscompany_jni_MainActivity
        #ifdef __cplusplus
        extern "C" {
            #endif
/*
 * Class:     com_itcs_cscompany_jni_MainActivity
 * Method:    javaCallC
 * Signature: ()V
 */
                    <pre name="code" class="cpp">JNIEXPORT jstring JNICALL Java_com_itcs_cscompany_jni_MainActivity_javaCallC
                    (JNIEnv *, jobject);


#ifdef __cplusplus}#endif#endif

 

可以看到. 

JNIEXPORT jstring JNICALL Java_com_itcs_cscompany_jni_MainActivity_javaCallC
(JNIEnv *, jclass);


这句话就是我们在c中 写方法的规范..


接下来我们在java目录 下 创建个c++文件.

然后把生成的头文件全部复制到 c++里面去.


  

JNIEXPORT jstring JNICALL Java_com_xxx_xx_ui_activity_SwipeLayoutTest_getContent
(JNIEnv *env,jobject jclass){
    return env->NewStringUTF("gaga");
}


并且在 JNIEnv *, jclass  改成 JNIEnv *env, jobject jclass,  并且写好返回值



注意........... 这里我们要写 #include "jni.h" 这就好比java中的import    什么是jni.h呢?   其实它是一个头文件, 里面包含的 c与java的 互调规范. 想了解的可自行去看~

我们直接返回了一个字符串



接下来 我们要在 build.gradle里面 的 defaultConfig下配置  ndk{  moduleName "firstJNI"}    这里的配置是指 编译出so库的名称


在我们的主activity中,  我们需要


static {
    System.loadLibrary("firstJNI");
}

加载这个so库, so库我们可以在build->intermediates->ndk里找到


然后直接调用方法就可以了~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值