最近回头复习了一下android 的jni调用,却发现按以前的方法调用失败,一怒之下就重新摸索,碰了几次壁,发现网上好多教程都不能成功调用,于是记录一下现在AS版本成功好用的调用方法。

这里设定你的ndk已经下载并且设置没问题.源码链接:http://download.csdn.net/download/yeyuehei/10149844

当前android studio 版本3.0.1,步骤如下:

1.设置jni -h 和ndk -build的快捷方式

2.java代码写c回调的方法,及grade的配置

3.快捷键jni -h生成头文件.h

4.建立c资源文件和mk文件及c函数的调用

5.快捷键ndk-build生成三种.so库文件

以上是步骤,具体如下:

1.置jni -h 和ndk -build的快捷方式

新建项目,成功后点击File,然后找到Settings...点击找到External Tools,然后如下图添加java -jni快捷键

Tool settings中三行可以直接copy上去:
$JDKPath$\bin\javah.exe
-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
$ModuleFileDir$\src\main\java

添加ndk-build快捷键如下图:

Tool settings 的两行:

F:\software\androidstudio\sdk\ndk-bundle\ndk-build.cmd(根据自己的ndk目录设置这个路径)

$ModuleFileDir$\src\main(直接copy)

添加成功后随便右键点击一个文件找到External Tools就会发现刚才添加的快捷键

2.java代码写c回调的方法,及grade的配置

新建一个class 名称随便,这里是JniKet,如下

打开build.gradle 添加ndk和 sourceSets如下图

注意:

1.ndk中的moduleName要和上图中的libName一致

2.sourceSets中的两行都要加上缺一不可

3.图中红框的代码会在图下面出现。。。

ndk {moduleName "JniDemo"abiFilters "armeabi", "armeabi-v7a", "x86"//cpu的类型
}sourceSets {main {jniLibs.srcDirs  'src/main/libsjni.srcDirs = []}
}

以上配置就够了,其他都不需要

3.快捷键jni -h生成头文件.h,建立c资源文件和mk文件及c函数的调用

选中刚才建的class(这里是JniKet),右键找到External Tools,选中jni -h,然后会在main下成jni文件夹,里面包含生成的头文件,名称格式:包名+类名.h

打开.h文件如下图:

右键->new->c/c++ source file->type选.c(名称随便,这里是TestJni),然后copy上图红框中的两个函数到新建的.c文件

为了验证 能调用c方法,再建立一个c方法的头文件和资源文件(同一个文件夹下):

test.h:

#include <string.h>#include <jni.h>int addValue(int x, int y);

test.c

#include "test.h"
int addValue(int x, int y){return x*10+y*10;
}

最后将test.c引入刚才建立的jni资源文件中(这里是TestJni))最后TestJni如下:

#include  "lifaair_edifier_com_myjni_JniKet.h"
#include "test.c"JNIEXPORT jstring JNICALL Java_lifaair_edifier_com_myjni_JniKet_testJni(JNIEnv *env, jclass jc){return (*env)->NewStringUTF(env,"fuck your father,langfei laozi's time");}
JNIEXPORT jint JNICALL Java_lifaair_edifier_com_myjni_JniKet_getValue(JNIEnv *env, jclass js ){return addValue(10, 8);}

当然别忘了mk文件两个:

名称:Android.mk

内容:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)  LOCAL_MODULE := JniDemo
LOCAL_C_INCLUDES := lifaair_edifier_com_myjni_JniKet.h
LOCAL_SRC_FILES := TestJni.cLOCAL_LDLIBS := -llog  include $(BUILD_SHARED_LIBRARY)

名称:Application.mk

内容:

APP_ABI := armeabi armeabi-v7a x86

5.快捷键ndk-build生成三种.so库文件

右键点击Jniket(步骤2中生成的 java class),右键找到External Tools,选中ndk-build,就会生成三种.so文件如下图:

当然还有最重要的调用:

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv_hello = findViewById(R.id.tv_hello);tv_hello.setText("this message from jni,its value is:\n"+JniKet.testJni()+"\n getValue():"+JniKet.getValue()); }}

编译运行,成功运行如下图:

转自:https://blog.csdn.net/yeyuehei/article/details/78741753

android JNI调用(Android Studio 3.0.1)(转)相关推荐

  1. android jni调用so库

    今天,讲讲android studio 使用jni调用其他so库的使用. 首先说一下在网上查找资料时,对于调用第三方so库,有人说有两种方法: 1.    对于so库的API符合JNI格式(即使用ja ...

  2. arch linux arm下载_linux系统下编译给android JNI调用的Gmssl库

    编译给android JNI调用的Gmssl库的方法,网络上并不多.按照叶大强(CSDN账号:hkNaruto)写的<GmSSL Android NDK编译 (版本95c0dba>的帖子编 ...

  3. android jni 调用java_Android JNI开发系列(九)JNI调用Java的静态方法实例方法

    JNI调用Java的静态方法&实例方法 package org.professor.jni.bean; import android.util.Log; /** * Created by pe ...

  4. Android JNI调用概要

    一.Java调C 编写Native方法. 使用javah命令生成.h头文件. 复制.h头文件到CPP工程中. 复制jni_md.h和jni.h到CPP工程中. 实现.h头文件中生成的. 生成dll文件 ...

  5. 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(上)

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html ☞ ...

  6. Android Jni 调用

    Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...

  7. android demo 调用,Android中调用C++函数的一个简单Demo

    这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手 .废话少说直接进入正题. 一.在Eclipse中创建一个Android Applica ...

  8. android jni gbk,Android之NDK编码转(UTF8-GBK)

    基于NDK下的编码转换,当然是直接调用C/C++下的实现效率更高,下面介绍2种方案(不建议通过JNI调用JAVA的实现,尽管这样也能实现编码的转换). 1. 采用Android系统自带的libicuu ...

  9. android jni总结,Android JNI总结.doc

    Android JNI总结 JNI总结 JNI有多重实现方式,一下会详细讲解多种方式: 1 应用级 用eclipse构建一个应用程序,JNITest1. Xml代码 < ?xml version ...

最新文章

  1. 二值化函数Threshold
  2. 八城联动 丨 神策 2020 数据驱动用户大会「杭州站」邀您赴约!
  3. Android Service和Binder、AIDL
  4. metrics的timer功能在java项目中的使用方法
  5. welearn随行课堂刷题教程
  6. VS实现格式化代码及代码缩进
  7. Excel批量调整图片大小适应单元格且整齐排列
  8. 区块链是什么,如何简单易懂地介绍区块链
  9. 查看树莓派I2C设备是否正常
  10. NILM:非侵入式电力负荷监测之我见(一)
  11. Android-模块化-面向接口编程深度解析,值得收藏
  12. 白屏、首屏的定义、影响因素、优化方法
  13. 区域工业互联网市场成绩单,百度智能云开物第二
  14. 一路走来(1)-我的人生历程
  15. 登录路由器显示服务器拒绝访问,ie浏览器拒绝访问原因如何解决
  16. C++ ID3决策树
  17. 【JSOI2018】潜入行动
  18. 【点云配准-4PCS(2008)】4-Points Congruent Sets for Robust Pairwise Surface Registration
  19. Django urls 下划线的坑-Using the URLconf defined in xxx, Django tried these URL patterns, in thi
  20. 高斯随机信号matlab,高斯随机信号生成初探.ppt

热门文章

  1. 零拷贝、mmap、sendfile
  2. ffmpeg-从mp4、flv、ts文件中提取264视频流数据
  3. python datetime.date 和数据库date_Python成为专业人士笔记-date 对象、time 对象及datetime用法深度剖析...
  4. java activemq 断线_java - 防止ActiveMQ重新连接失败时自动退出 - SO中文参考 - www.soinside.com...
  5. hana数据库导入mysql_【SAP HANA】新建表以及操作数据(3)
  6. HDU 5832——A water problem 2016CCPC网络赛1001
  7. uva 10692——Huge Mods
  8. 【Java学习笔记十一】图形用户界面
  9. 【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
  10. c++11 你需要知道这些就够了