jni即java native interface,使用jni我们可以在JAVA中调用C代码,提高了效率,可以复用代码,可以灵活的应用于各种场景

怎么使用JNI

安装软件

1.NDK 用于将C代码编译成so库

2.CygWin 在windows下模拟linux环境

3.CDT 在eclipse下编写C与C++环境搭建

JNI实现

1 定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的

    public native String helloWorldFromC();

2 步 实现C代码

注意:方法名 严格按照jni的规范 jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj)

其中Java是大写的,函数名必须包括正确的包名,笔者就因为在这里出了错,导致找不到库文件

#include <stdio.h>
#include <jni.h> //public native String helloWorldFromC();
jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv*env,jobject obj)
{
//返回一个java String类型的字符串
// jstring (*NewStringUTF)(JNIEnv*, const char*);
//return (**env).NewStringUTF(env,"hello wrold From C"); return (*env)->NewStringUTF(env,"hellowroldFromC"); //把C代码打包成函数库 }

3 生成android.mk 告诉编译器 如何把c代码打包成函数库

如果没有mk文件,就使用ndk-build就会报错

android.mk文件格式如下

   LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
# 对应打包成函数库的名字
LOCAL_MODULE := hello
# 对应c代码的文件
LOCAL_SRC_FILES := Hello.c include $(BUILD_SHARED_LIBRARY)

4步 把c代码 打包成函数库 用到了安装的环境

生成了libhello.so库文件,就可以使用了

5 步在java代码中 引入库函数

    static{
System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so }

6 使用方法

public void click(View view)
{
//弹出一个吐司,吐司内容为C代码内容
Toast.makeText(getApplicationContext(), helloWorldFromC(), 0).show();
}

运行效果

最新文章

  1. 设置line-height:1.5和line-height:150%或者line-height:150px的区别
  2. Neutron 物理部署方案 - 每天5分钟玩转 OpenStack(68)
  3. C程序范例(1)——学生管理系统”数组“实现
  4. 与你相遇好幸运,使用gulp流程化Typescript后端开发
  5. Delphi文件操作函数
  6. jquery click点击事件重复执行多次
  7. 《c程序设计语言》读书笔记--反转字符串
  8. ASP.NET 将DataTable解析成JSON简介
  9. 【水一发next_permutation】poj 1146——ID Codesm
  10. C++自删除
  11. &quot;The Application was unable to start correctly (0xc000007b). Click OK to close the application&quot;
  12. [SCOI2008]天平
  13. Java对字符串加密并返回星号※
  14. [COCI11-12 #4]删数游戏(贪心+数据结构)
  15. Springboot的日志管理&amp;Springboot整合Junit测试&amp;Springboot中AOP的使用
  16. Shift键的三个妙用!Word又现神操作!
  17. python,接口自动化有几大类
  18. Linux学习之CentOS(二)----远程登录管理工具SecureCRT的使用
  19. ZooKeeper启动报错 JAVA_HOME is incorrectly set
  20. SWIFT中函数返回值为Tuple

热门文章

  1. Android:View中的performClick()触发条件
  2. 安装make命令
  3. ECSHOP验证码背景图修改教程
  4. SpringServletContext简单案例
  5. C++_Eigen函数库用法笔记——The Array class and Coefficient-wise operations
  6. WPF TabControl 模拟动画
  7. Swift翻译之-关于Swift
  8. android-解决 Android N 上 报错:android.os.FileUriExposedException
  9. HDOJ 1083 Courses
  10. PHP访问,增删改查,小结