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

运行效果

Android之jni入门的更多相关文章

  1. Android NDK JNI 入门笔记-day04-NDK实现Hash算法

    * Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...

  2. 三、Android NDK编程预备之Java jni入门创建C/C++共享库

    转自: http://www.eoeandroid.com/thread-264971-1-1.html 应网友回复,答应在两天前要出一篇创建C/C++共享库的,但由于清明节假期,跟朋友出去游玩,丢手 ...

  3. 二、Android NDK编程预备之Java jni入门Hello World

    转自:  http://www.eoeandroid.com/forum.php?mod=viewthread&tid=264543&fromuid=588695 昨天已经简要介绍了J ...

  4. Android Studio JNI开发入门教程

    Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报  分类: JNI(3)    目录(?)[+]   概述 在Andorid ...

  5. 【转】 Android 开发 之 JNI入门 - NDK从入门到精通

    原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub  ...

  6. Android JNI入门第二篇——Java参数类型与本地参数类型对照

    前面一篇通过简单的例子介绍了android中JNI的使用.这一篇从基础上了解一些Java参数类型与本地参数类型区别. 1)        java中的返回值void和JNI中的void是完全对应的哦! ...

  7. 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通

    NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...

  8. Android 开发 之 JNI入门 - NDK从入门到精通

    NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...

  9. android的JNI 、 NDK 学习!

    转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...

随机推荐

  1. 编译java文件,出错:Failed to establish a connection with the target VM

    helloword程序,所有java学习人员人生第一个程序,哎妈,基础太差,出错 public class Helloword{ public Helloword() { public static ...

  2. HD2157How many wasy??(十大矩阵问题之八 + 邻接矩阵的应用)

    How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. MyEclipse2014中SVN的使用方法

    MyEclipse中的SVN操作手册 1.导入项目 点击工具栏上的[File-Import],进入下图 (如果你的对话框中没有SVN这一条目,可能是因为你没有安装SVN插件,请安装完成后,在看这篇博客 ...

  4. ppa安装php版本

    如果你想安装PHP的特定版本,那么这篇文章可以帮助你.这篇文章将帮助您安装PHP 5.4和PHP 5.5 PHP 5.6,通过使用PPA在Ubuntu 15.10 LTS,14.04或12.04 LT ...

  5. ci中如何私有化方法

    私有方法 在某些情况下,你可能想要隐藏一些方法使之无法对外查阅.将方法私有化很简单,只要在方法名字前面加一个下划线("_")做前缀就无法通过 URL 访问到了.例如,如果你有一个像 ...

  6. 序列化LinkedHashMap,有序输出Json字符串

    LinkedHashMap本身是有序的,使用JDK自带的序列化代码或者fastJson代码序列化后,字符串并非按照插入顺序输出 Map<String,String> linkedMap=n ...

  7. shell中的循环

    shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...

  8. NAT/PAT

    NAT/PAT 编辑 NAT就是网络地址翻译的英文缩写,在路由器上配置NAT服务,可提供公司内100~200人同时上网的服务.不需要Proxy Server,所有的服务都可顺利使用(除Netmeeti ...

  9. c++中try catch的用法

    c++中try catch的用法 标签: c++exception数据库sqlc 2011-10-24 21:49 45622人阅读 评论(3) 收藏 举报  分类: 一点小结(267)  版权声明: ...

  10. show slave各项参数解释

    how slave status 各个参数的解释 -- mysql 分类: mysql基础2012-08-23 11:03 2315人阅读 评论(0) 收藏 举报 服务器sslfilesqltable ...