今天写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 ;   education.bbk.com.myapplication.TestJJ

我的是:


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



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


* DO NOT EDIT THIS FILE - it is machine generated */#include #include #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 __cplusplusextern "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.大家有什么疑问,欢迎讨论


更多相关文章

  1. 在Android中applicationId与package name的那些事
  2. 记录----编译libyuv、迁移至Android(安卓)studio的操作和遇到的
  3. 下载Android单个项目源码的方法
  4. Android适配之dimens适配终极攻略(实际项目中应用方案)
  5. Android(安卓)两个Activity之间传值
  6. cocos编译android命令
  7. 如何解决Android(安卓)SDK无法下载Package的问题(.net)
  8. Android中AIDL的使用
  9. 类似Lazy Android的插件,根据layout的xml文件自动生成findViewByI

随机推荐

  1. CentOS下实现Flask + Virtualenv + uWSGI
  2. PySide-QtWebKit: CSS font-family没有效
  3. python学习笔记10(函数一): 函数使用、调用
  4. python爬取csdn的博客内容
  5. 利用python Pandas进行数据预处理
  6. python 带正则的search 模块
  7. Python基础1--数据类型
  8. 第四章 Python 对象
  9. python调用shell命令之三慷慨法
  10. ML笔记之choosing right estimator——有