JNI学习

android jni学习——1小时掌握JNI(深入浅出) 文章目录学习总结参考补充知识点1. static代码段 学习总结 我参考了以下四篇博文,基本掌握了JNI的常用知识点。 推荐学习顺序1->2->3->4。 1, 2这两篇博文写的很细致,看完基本能学会80%内容,要详读。 通过第3篇博文的例子可以进一步巩固下jni的知识。 第四篇内容最全,不过内容更像是手册,可以一扫而过 参考 Android NDK开发:JNI基础篇 Andr... 阅读详情

2.1 Overview

 write a simple Java application that calls a C function to print “Hello World!”. The pro-

cess consists of the following steps:
          1. Create a class (HelloWorld.java) that declares the native method.
          2. Use javac to compile the HelloWorld source file, resulting in the class file
              HelloWorld.class. The javac compiler is supplied with JDK or Java 2 SDK releases.
          3. Use javah -jni to generate a C header file (HelloWorld.h) containing the
              function prototype for the native method implementation. The javah tool is
              provided with JDK or Java 2 SDK releases.
          4. Write the C implementation (HelloWorld.c) of the native method.
          5. Compile the C implementation into a native library, creating HelloWorld.dll
               or libHelloWorld.so. Use the C compiler and linker available on the host environment.
          6. Run the HelloWorld program using the java runtime interpreter. Both the
              class file (HelloWorld.class) and the native library (HelloWorld.dll or libHelloWorld.so) are loaded at runtime.

              The remainder of this chapter explains these steps in detail.

觉得挺好,翻译一下啊:

      写一个java应用,调用c函数打印“Hello World”,整个过程又一下几步组成:

         1、创建一个类(HelloWorld.java),并在该类中声明native方法,即本地方法。

         2、使用javac编译这个源文件,生成字节码文件HelloWorld.class,这个编译器在jdk或java2SDK以上都支持

         3、使用javah -jni 生成一个C头文件,HelloWorld.h,这个文件中包含了这些c函数原型本地方法实现,其实就是声明c函数

         4、写一个本地方法的用C语言实现的HelloWorld.c

         5、使用主机上可用的C编译器和连接器,编译C的成为一个本地库,创建为HelloWorld.dll(windows),或者libHelloWorld.so(linux)

         6、用java运行时解析器运行HelloWorld程序,HelloWorld.class和本地库HelloWorld.dll获libHelloWorld.so都被加载到运行时虚拟机了


我看的是这本书,《The JavaTM Native Interface》  Programmer’s Guide and Specification,听不错的

      

       HelloWorld小例子

       1、写HelloWorld.java

        

class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
       2、编译生成字节码文件  

       命令:javac HelloWorld.java ->生成了HelloWorld.class

       编译生成本地调用头文件HelloWorld.h

       命令:javah -jni HelloWorld

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


       3、编写HelloWorld.c

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}

       4、编译生成动态连接库-> libHelloWorld.so

       命令:    gcc -shared -I /usr/lib/jvm/jdk1.7/include/  -I /usr/lib/jvm/jdk1.7/include/linux/ HelloWorld.c -o libHelloWorld.so
                 

                    -shared 指明是生成动态连接库
                    -I (小写字母i的大写)是生成此目标文件需要导入的库(缩写为import)
                        其中jni.h在/usr/lib/jvm/jdk1.7/include/ 下
                     jni.h中又包含了jni_md.h,文件在/usr/lib/jvm/jdk1.7/include/linux/下

                     HelloWorld.c指明要编译的c文件

                     -o 指明要生成的目标文件

        注意:不要在HelloWorld.c前加-c这样编译出来的文件就是可执行文件了,而不是动态连接库

       5、在java虚拟机上运行

       命令:java HelloWorld,会报错,如下:

~/test/jni$ java HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
	at java.lang.Runtime.loadLibrary0(Runtime.java:845)
	at java.lang.System.loadLibrary(System.java:1084)
	at HelloWorld.<clinit>(HelloWorld.java:8)

     这是因为没有指定动态连接库的路径,java本地调用库的路径可以这样,

       命令:export LD_LIBRARY_PATH=.

      这表示把当前路径加入库中

      再此运行:

      命令:java HelloWorld

~/test/jni$ java HelloWorld
Hello World!





















             

radsystems的激活(破解)和使用 上个文章讲述了radsystems的下载,但是只有30天的免费使用权,这篇文章将会讲解如何破解激活radsystems。注意:如果不想去官网下载的话,点击安装包的exe文件。不要急,打开我给你们的安装包,点击crack。如果提示done则完成(我的是激活过的)注意:这是8.7版本的。点击generate。 阅读详情

相关推荐

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2630

Jni学习

Jni学习,待续。

LoveYooY的专栏 483

SAP销售订单POD实操:从VL01N创建到VLPOD差异处理,保姆级避坑指南

本文详细解析SAP销售订单POD全流程,从VL01N创建到VLPOD差异处理,提供保姆级避坑指南。涵盖核心业务逻辑、前置配置、销售订单创建、交货单处理及差异解决方案,帮助用户高效管理供应链执行环节,确保财务与物流的准确对接。

weixin_27219587的博客 624

推荐 JNi学习

推荐 JNi学习 http://blog.csdn.net/chenjie19891104/archive/2011/05/27/6450077.aspx

Cocos2d-x,Android,IOS,游戏,HTML5开发/交流/学习/资源 沈大海 1721

visual studio 2017编译Triangle库遇到的问题和解决办法

这段时间因为一个项目需要使用到Triangle这个三角剖分工具,需要在windows环境下进行对源码编译,中间踩了很多坑,特此记录下。 1、下载 下载链接是下边这个,需要翻墙 http://www.cs.cmu.edu/~quake/triangle.html 2、编译。。超。。。级。。。麻。。。烦。。。 在ubutu下安装一切顺利,完全没遇到什么麻烦,但是换到windows下就麻烦不断...

csubai07的博客 2438

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

jni学习

待续

笔记专栏 718

Multisim 14.0 实战:手把手教你仿真一个9MHz高频小信号放大器(附完整电路文件)

本文详细介绍了如何使用Multisim 14.0仿真一个9MHz高频小信号谐振放大器,从环境准备、电路设计到仿真参数设置与调试,手把手教你掌握射频电路仿真的核心技巧。适合电子工程师和学生快速上手高频电路设计,附完整电路文件供参考。

weixin_30335575的博客 112

学习android JNI的那些事儿

边看官方资料边学习android JNI。 手册下载: http://download.csdn.net/detail/zhangjie201412/4092748 希望和大家一起学习android JNI。

zhangjie201412的专栏 3142

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5924

Logstash安装部署

1. 部署及安装所用的用户不能是root。

lmj3732018的博客 4294

android JNI学习一

记录一下自己学习JNI的过程,目标是做一个小demo,实现apk简单调用C或C++语言,从而熟悉JNI过程。并记录错误。可以实现java调用C或C++语言,并且从C或C++回调java。 以下为个人观点,未必正确,可不参考。 JNI就是java调用本地方法的意思,具体来说就是android apk里java调用.so为后缀的库文件里的C或C++函数。 我个人认为java调用C有两种,一种是j

u013820413的专栏 626

SmartFusion从FPGA到ARM(一)——MSS_GPIO点灯

文章目录前言GPIO点灯 前言 GPIO点灯

whik1194的博客 5270

JNI原理学习

根据方法名,将Java方法和JNI函数建立联系,它的缺点是:JNI层的函数名非常长,它是。

2301_79098336的博客 944

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JNI入门学习总结

一、序言 NDK开发需要用到jni,项目中的第三方库经常有个.so文件有什么用,为啥加密不用java写呢?等等,我不知道...即使知道也仅仅是概念性的。现在我知道了!! 二、JNI的好处 两个字“装逼!!”,学了之后在同行看来会有种高大上的感觉,虽然自己心里知道很简单的,但是别人不会的东西,在他们眼里,就是高大上的。我有时很赞同:装逼就是一直学习新技术的动力。也是为了升职加薪,努力为

为梦拼命的Android攻城狮 1112

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JNI 学习

使用 jni final和 private变量都能修改。1. JNI 不属于 C++,而是 JDK 的。日志失效,可以 adb kill-server。

m0_62538383的博客 176

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JNI 学习笔记

JNI 学习笔记 1.概述 Java Native Interface(JNI) 是JDK提供的一个native编程接口。JNI 允许Java程序调用其他语言编写的程序或者代码库, 比如C/C++。Java 在内存管理和性能上有一定的局限,通过JNI我们就可以利用Native程序来克服这些限制。 2.一个简单的demo(JNI静态注册) 通过一个简单的Demo我们来看一下Native 与 ...

一路奔跑94的博客 257

JNI学习要点记录

JNI学习要点记录 - 简书

力开的博客 191

AndroidCmake:Android JNI案例学习Demo

AndroidCmake:Android JNI案例学习Demo 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在移动应用开发领域,Android平台上结合C/C++代码的能力为开发者提供了更广泛的性能优化空间。AndroidCmake项目正是一个专注于展示如何在Android Studio中使用Cmake构建JNI(Java Native Interface)案例的...

gitblog_06752的博客 957

JNI学习积累之一 ---- 常用函数大全

本文原创,转载请注明出处:http://blog.csdn.net/qinjuning                最近一段时间,在工作方面比较闲,分配的Bug不是很多,于是好好利用这段时间就着源代码看了些许模块, 主要方式    还是贼看贼看代码, 同时利用烧机的便利,加Log观看,基本上都能弄个脸熟 。心里想着该写点什么了?可是水平不够,再加上    包括很多真正实现地方--

qinjuning、lets go 5万+

努力学习JNI基础

努力吧,马儿

yuesyang_的博客 244

学习JNI过程中笔记

学习JNI过程中笔记;

qq81260290的博客 135
上一篇: Android.mk学习记录
下一篇: Python学习笔记
清风乐逍遥
博客等级 码龄14年 42粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值