jni _helloworld
a.声明一个native方法,native方法不用实现
//通过native关键字 声明了一个本地方法, 本地方法不用实现 ,需要jni调用c的代码来实现
public native String helloInC();

b.项目根目录下创建的jni文件夹,在jni目录下创建.c代码
c函数命名规则 Java_包名_native方法所在类名_native方法名(JNIEnv* env,jobject thiz)
#include<stdlib.h>
#include<stdio.h>
#include<jni.h>
//本地函数命名规则 Java_包名_native方法所在类名_native方法名
//第二个参数 jobject就是调用当前native方法的java对象
//第一个参数 JNIEnv* JNIEnv是结构体,JNINativeInterface这个结构体的一级指针
//env又是JNIEnv的一级指针,那么env就是JNINativeInterface的二级指针
//结构体JNINativeInterface定义了大量的函数指针,这些函数指针在JNI开发中十分常用

//(env).func (*env)—>func
//jstring Java_com_example_hellojni_Hellojni_stringFromJNI(JNIEnv * *env,jobject thiz)
jstring Java_com_example_hellojni_Hellojni_stringFromJNI(JNIEnv
env,jobject thiz){
//jstring (NewStringUTF)()JNIEnv,const char*) 指针函数
char* str="hello ";
//通过newSrting把c的字符串转换成java的jstring类型
return (*env)—>NewStringUTF(env,str);
}

3.在jni目下创建一个 Android.mk
#mk (makefile)作用就是向编译系统描述,我要编译的文件在什么位置,要生成的文件叫什么名字,是什么类型
LOCAL_PATH:=$(call my-dir)
#清除上次编译的信息
include $(CLEAR_VARS)
#在这里指定最后生成的文件的名字
LOCAL_MODOULE :=hello
LOCAL_SRC_FILES :=hello.c
#要编译的c的代码的文件名
include $(BUILD_SHARED_LIBRARY)
#要生成的是一个动态链接库(linux动态链接库是.so,windows动态链接库是.dll)

4.通过ndk-build在项目根目录下编译.c文件生成.so
5.调用.so之前需要使用system.loadlibrary来加载.so文件
public void jniHello(View v){
System.loadlibrary(“hello”);
//调用本地方法,并且把返回的值通过toast显示出来
Toast.maketext(this,helloInc(),Toast.LENGTH_SHORT).show();
}

}

2020-11-11(C语言下JNI开发hello过程)相关推荐

  1. IOS学习笔记05---C语言程序的开发运行过程

    IOS学习笔记05---C语言程序的开发运行过程 0 5.C语言3-C语言程序的开发运行过程 ----------------------------------------------------- ...

  2. Android studio 下 JNI 开发实例

    在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为"交叉编译"? 先看什么是 JNI?JNI 的全称就是 Java ...

  3. LKT5103A Hid接口LINUX系统下JNI开发流程

    一.什么是JNI Java以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能.解决Java对本地操作的一种方法就是JNI.JNI是Java ...

  4. IDEA下JNI开发快速生成头文件方法

    JNI生成头文件的命令是: javah -jni -classpath (搜寻类目录) -d (输出目录) (类名) 步骤: 打开File->Setting->Tools->Ente ...

  5. 2020-11-13(c++下JNI开发不同点)

    a.在c++环境下,JNIE不再是结构体的一级指针,而是结构体_JNIEnv的别名 env是JNIEnv的一级指针,所以env就是结构体 _JNIEnv的一级指针,访问结构体函数env-----> ...

  6. eclipse+adt+android sdk,64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细)...

    Ubuntu 11.10 下 Android开发完全安装另一篇: 平台: 操作系统:ubuntu11.10 1.在ubuntu11.10下的ubuntu软件中心中有自带的eclipse,但是这里我们不 ...

  7. ubuntu 11.04下Android开发环境的搭建!

    ubuntu 11.04下Android开发环境的搭建! 1.安装JDK 首先到oracle的官网上下载linux版本的JDK,网址为:http://www.oracle.com/technetwor ...

  8. 设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

    十一.设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统? 一.钱包业务背景介绍 一个简单的钱包业务功能如下 1.充值 用户通过三方支付渠道,把自己银行卡账户内的钱, ...

  9. 2020 年 11 月程序员工资统计,Java 市场占有率仍第一

    如果问你最成功的和最流行的编程语言是什么?你肯定回答 Java. 2020 年 11 月 中国大陆编程语言排行显示,Java 程序员招聘需求达 13 万人,占27.8%,市场占有率位居第一. 图片来源 ...

最新文章

  1. 3D-camera结构光原理
  2. 【问题收录】在ubuntu14.04 64位下运行jd-gui
  3. ListView隐藏HeadView
  4. Free Code Camp现在有本地组
  5. 揭秘5位爬藤“牛娃” 他们吸引藤校的到底是什么?
  6. Struts2 s:iterator 用法
  7. [Android] 混音线程MixerThread
  8. 飞信2009_从飞信倒下的八个原因看运营商的复兴之路
  9. Android 图片虚化
  10. VSCode沙绿色主题设置
  11. python提取关键词_【Python工具】30万关键词提取疑问词只需2秒,效率高到飞起!...
  12. 重发布,路由策略实验
  13. 一键调用API,聚合数据API服务助力企业应用创新
  14. 苏黎世联邦理工学院计算机怎么样,苏黎世联邦理工学院计算机
  15. 【POJ No. 3275】奶牛排序 Ranking the Cows
  16. KVM虚拟化技术学习笔记2
  17. Mysql导出逗号分隔的csv文件
  18. hdl_graph_slam源码分析(4)——SLAM建图
  19. 活动运营专员认证考试
  20. 为什么我的眼里常含泪水? 因为我对这土地爱得深沉……

热门文章

  1. 成功解决ImportError: cannot import name 'pywrap_tensorflow'
  2. ML之DTRFRExtraTRGBR:基于四种算法(DT、RFR、ExtraTR、GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
  3. Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图
  4. python-day2~3
  5. window文件过长无法删除的处理方式
  6. [数据结构与算法]平衡二叉树实现
  7. WIN5语音ic注意事项
  8. ST17H26代码优化的疑问
  9. D3ctf-D3MUG(u3d
  10. Kubernetes各组件的功能