Android studio 使用ndk开发JNI

今天写JNI Demo搞了一天,其中遇到了许多错误,不过一一解决了,下面是我根据网上总结的开发过程:

0.配置ndk路径

在project项目的local.properties里面加上ndk路径

ndk.dir=D\:\\NDK\\android-ndk-r11b


1.在project 下的gradle.properties,里面加上:

android.useDeprecatedNdk=true


2.在app 的build.gradle的

defaultConfig里面加入
ndk {
    moduleName "JniTest"
    ldLibs "log", "z", "m"
    abiFilters "armeabi", "armeabi-v7a", "x86"
}

moduleName 就是so库的库名。第二行打印log,第三行是支持的体系架构,完整如下


3.我们写本地方法(可以单独创建类,也可以直接在已有的类里面写),



4.调用本地方法,然后build项目(我此处,点击button,改变textview的文本),你会在 项目名\app\build\intermediates\classes\debug\(项目包名) 下找到生成的class文件


5.最重要的一步:打开as 的terminal,进入 项目名\app的main目录下,输入:

javah -d jni -classpath <SDK_android.jar>;<APP_classes>   education.bbk.com.myapplication.TestJJ

我的是:


此时你会发下生成了.h文件



6.创建main.c文件(文件命任意),打开.h文件,我们复制方法名过来,写好的如下,我们再次build


* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include <android/log.h>

#ifndef LOG_TAG
#define LOG_TAG "ANDROID_LAB"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#endif

/* Header for class lab_sodino_jnitest_MainActivity */

#ifndef _Included_lab_sodino_jnitest_MainActivity
#define _Included_lab_sodino_jnitest_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class: lab_sodino_jnitest_MainActivity
 * Method: getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_education_bbk_com_myapplication_TestJJ_getString
  (JNIEnv * env, jobject jObj){
      LOGE("log string from ndk.");
      return (*env)->NewStringUTF(env,"Hello From JNI!");
  }

#ifdef __cplusplus
}
#endif
#endif

7.buid后,我们发现已经生成了so包,然后在代码中加载库:

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


  

8.运行项目,点击按钮,c代码成功调用

 


9.大家有什么疑问,欢迎讨论


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值