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.cinclude $(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();}

运行效果

Android之jni入门相关推荐

  1. Android入门简书,android ndk开发入门随笔(一)

    ndk,jni入门随笔 因为工作缘故最近在研究jni,ndk方面知识,在此总结入坑以来的一些问题. 配置环境可以在下面geogle官方看.下面是链接 我一说ndk,jni可能小伙伴要问了这是什么,在此 ...

  2. Android混淆从入门到精通

    Android混淆从入门到精通 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读.混淆概念虽然容易,但很多初学 ...

  3. Android中JNI开发之常见错误

    JNI开发中的常见问题 1. C文法声明与java中native方法声明,不对应时,报如下异常: java.lang.IllegalStateException: Could not execute ...

  4. Android APP开发入门

    Android APP开发入门 目录 android_studio很好用的一个就是debug 1 1导入demo编译出错 1 4使用as运行安装不了apk安装adb 2 5SeekBar组件使用 2 ...

  5. android 开发从入门到精通

    Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...

  6. Android Monkey测试入门:安装sdk、studio、模拟器,并分析monkey日志

    Android Monkey测试入门:安装sdk.studio.模拟器,并分析monkey测试报告结果 1. 安装Java JDK和android SDK 2. 安装Andriod studio及模拟 ...

  7. devc 如何编写java,Android For JNI(1)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序...

    Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...

  8. JNI入门课程-第二章:JNI基础调用

    序章: 1.本篇是JNI入门教程的第二篇,偏基础功能的实现.完整教程连接如下: https://blog.csdn.net/rzleilei/article/details/122084609http ...

  9. Android通过jni调用本地c/c++接口方法总结

    网上有网友问android的原生应用,上层java代码如何通过jni调用本地的c/c++接口或第三方动态库 ?之前搞过android应用开发和底层c/c++接口开发都是一个人搞定,觉得还是蛮简单的.其 ...

最新文章

  1. Solo 博客系统 1.7.0 发布 - 新版 MD 编辑器
  2. JavaScript 私有成员
  3. InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor
  4. 常用自动化框架简单的分析与介绍
  5. 我所知的javascript之prototype
  6. SpringFramework核心技术一(IOC:命名bean)
  7. php里建立数据库和表,PHP 创建数据库和表 | w3cschool菜鸟教程
  8. mysql的命令行常用命令_MySQL Command Line[mysql命令行常用命令]
  9. Interbase浴火重生:开源数据库Firebird更新到2.12
  10. Sql Server 知识
  11. USB Server解决虚拟化部署UKey远程调用
  12. HandlerSocket + MySQL
  13. 区块链入门教程 。阮一峰
  14. word,wps设置页眉和页码
  15. wangeditor光标乱跑,回车换行又返回来问题
  16. 基本农田卫星地图查询_天地图山东,购房者勘测利器,国产骄傲
  17. FoveaBox(Beyond Anchor-based Object Detector) 学习笔记
  18. ASP.NET限制上传文件类型
  19. CAD中的标注文字如何沿弧线排列?
  20. zxing 二维码生成深度定制

热门文章

  1. 调研了下 AI 作曲,顺便做了期视频...快进来听歌!
  2. 全栈深度学习第5期: 神经网络调试技巧
  3. 史上最简单的决策树模型讲解
  4. Eureka Client注册到Eureka Server的秘密
  5. 论文浅尝 | IRW:基于知识图谱和关系推理的视觉叙事框架
  6. 资源征集 | 2021年全国知识图谱与语义计算大会开放资源征集(Resource Track)通知...
  7. 研讨会 | 知识图谱引领认知智能+
  8. 论文浅尝 | 基于属性嵌入的知识图谱间实体对齐方法
  9. 2017-12-09 JavaScript实现ZLOGO子集: 测试用例
  10. 为什么操作dom会消耗性能