`
- 浏览:
365697 次
- 性别:
- 来自:
福州
-
一:创建 HelloNative.java文件
vim HelloNative.java
class HelloNative {
public native static void greeting();
static {
System.loadLibrary("HelloNative");
}
}
二:编译 HelloNative.java 生成 HelloNative.class文件。
javac HelloNative.java
ls查看编译结果:
HelloNative.class HelloNative.java
三:利用javah产生一个C的头文件。javah可执行文件可以在jdk/bin目录下查找到。
javah HelloNative
ls查看结果:
HelloNative.class HelloNative.h HelloNative.java
四:编写HelloNative.c文件
vim HelloNative.c
#include "HelloNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloNative_greeting(JNIEnv* env, jclass cl)
{
printf("Hello Native World!\n");
}
五:生成libHelloNative.so文件
gcc -fPIC -I /usr/lib/jvm/default-java/include -I /usr/lib/jvm/default-java/include/linux -shared -o libHelloNative.so HelloNative.c
ls查看结果:
HelloNative.c HelloNative.class HelloNative.h HelloNative.java libHelloNative.so
六:在HelloNative.java中加载libHelloNative.so库,如:
static {
System.loadLibrary("HelloNative");
}
七:编写测试代码HelloNativeTest.java
vim HelloNativeTest.java
class HelloNativeTest {
public static void main(String[] args) {
HelloNative.greeting();
return;
}
}
八:编译HelloNativeTest.java文件
javac HelloNativeTest.java
ls查看结果:
HelloNative.c HelloNative.class HelloNative.h HelloNative.java HelloNativeTest.class HelloNativeTest.java libHelloNative.so
当执行java HelloNativeTest 时,会报如下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at HelloNative.<clinit>(HelloNative.java:4)
at HelloNativeTest.main(HelloNativeTest.java:3)
这时需要执行第九步。
九:把当前目录添加到库路径中:
java -Djava.library.path=. HelloNativeTest
或者 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
十:终端输出最终结果:
Hello Native World!
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
总结来说,Android Studio中的JNI学习涉及项目配置、数据类型转化、本地方法调用以及可能的JSON操作。理解这些基础知识是掌握JNI的关键,这能帮助开发者在遇到需要混合编程的场景时游刃有余。在实际应用中,务必注意...
总结,通过"android JNI学习三实例",我们可以掌握JNI的基本使用,理解如何在Android应用中集成C/C++代码,以及如何利用JNI进行跨语言交互,从而提高应用的性能和功能。实践中,我们需要结合具体的项目需求和性能...
### JNI学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)是Java平台提供的一种强大机制,它允许Java程序直接调用本地代码(通常是C或C++编写)。这为Java应用程序带来了额外的灵活性,使得开发者能够...
JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码...这个示例中的"JNI学习二:字符串参数传递与返回值"就是一个很好的起点,通过实践可以深入理解JNI的工作原理和使用技巧。
总结起来,Android JNI的学习涉及环境配置、头文件生成、原生代码编写、编译生成.so文件以及Java调用原生函数等多个步骤。这个资源提供了一个完整的实践环境,适合初学者深入理解和掌握JNI技术。通过实际操作和参考...
针对所有初学JNI的人员的一个最全面的笔记,对于有过基础的朋友来说又是一个更好的助手. 省去了你自己去总结的时间,有更多的时间去敲代码. ------------黑马程序员学员-------------------
在本示例中,我们看到的是一个JNI的学习实践,它在Linux环境下成功地执行了。这个例子展示了如何通过Java调用本地(C/C++)代码,并且提供了完整的流程,包括从Java类型转换为C类型,特别是将`jstring`转化为`char`...
总结来说,JNI为Java和C/C++之间的通信提供了一种强大而灵活的方式。通过学习如何访问和操作简单类型数组,我们可以利用C/C++的性能优势处理大规模数据或执行低级操作,同时保持Java代码的可移植性和易维护性。在...
1. **Android_JNI总结.doc**:这份文档可能是对Android平台上JNI应用的总结,涵盖了JNI的基本概念、环境设置、头文件生成、本地方法定义、本地函数实现以及在Android Studio中的配置步骤。通过阅读,学习者可以了解...
Android JNI(Java Native Interface)是...通过学习这些实例,你可以掌握JNI的基本用法,包括调用本地方法、数据类型转换、回调以及文件操作等。这些知识对于开发高性能的Android应用或利用现有C/C++库至关重要。
### JNI学习指南:Java调用C/C++接口详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程成为一种重要的技能。Java作为一种广泛使用的编程语言,因其跨平台特性和丰富的生态系统受到欢迎。然而,Java作为一...
总结来说,这个压缩包为学习和掌握JNI提供了一套完整的资源,无论是初学者还是有经验的开发者,都能从中受益。通过阅读CHM文档和PDF资料,你将能深入了解JNI的概念、使用方法以及编程规范,从而在实际项目中更加...
总结来说,`jni.h`是JNI的核心,它定义了Java和本地代码之间交互的接口。`jni-test.cpp`是实现这些接口的本地代码示例。通过这两个文件,开发者可以构建Java程序与本地库的桥梁,实现高性能计算、利用现有C/C++库等...
做为Android JNI还未入门的同志们,我这个总结的文档对你们真的很有用处,几乎大部分常规的Java访问C/C++以及C/C++访问Java的内容都包含在内。
总结一下,这个"jniDemo简单版"项目涵盖了以下知识点: 1. JNI接口的声明与使用。 2. Android NDK的简介及其在Java代码中加载本地库的方法。 3. C/C++本地方法的编写,包括JNI函数原型和`JNIEnv`指针的使用。 4. ...
总结起来,JNI是Android开发中一个不可或缺的工具,它使得Java代码能够充分利用本地代码的高性能和灵活性。掌握JNI不仅可以提升应用性能,还能更好地利用已有的C/C++库,为Android应用开发带来更大的便利。在这个...
总结来说,JNI层内存泄漏检测工具LeakTracer是Android开发中的一个强大工具,它可以帮助开发者有效地定位和解决JNI层的内存泄漏问题,提升应用的性能和可靠性。通过深入研究和实践,开发者可以更好地掌握JNI内存管理...
9. **总结**:这个教程资料“Android--JNI-Device.zip”对于希望深入了解Android硬件驱动开发的开发者来说非常有价值,它将帮助开发者学习如何利用JNI高效地与设备驱动进行交互,提高应用程序的性能和功能。