Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestNdk
LOCAL_SRC_FILES := test-ndk.c
LOCAL_LDLIBS := -lGLESv1_CM
include $(BUILD_SHARED_LIBRARY)
java:
native private char test (char[] chs);
static {
System.loadLibrary("TestNdk");
}
目录: jni |-Android.mk
|-Application.mk
|-test-ndk.c
LOCAL_SRC_FILES := test-ndk.c
错误原因 多了找不到的.c 文件
make: *** No rule to make target `jni/brcommon.c', needed by `obj/local/armeabi/objs/TestNdk/brcommon.o'. Stop.
jni LOG配置
1 .LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
jni.c 文件定义:
2. #include<android/log.h>
3,
#define LOG_TAG "debug"
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, fmt, ##args)
用法:
LOGI("test log!!!!");
C 中映射 类
TestProvider = (*jniEnv)->FindClass(jniEnv,"com/duicky/TestProvider");
C中新建对象
jmethodID construction_id = (*jniEnv)->GetMethodID(jniEnv, TestProvider,"<init>", "()V");
TestProvider mTestProvider = (*jniEnv)->NewObject(jniEnv, TestProvider,construction_id);
C 中映射方法
静态:
getTime = (*jniEnv)->GetStaticMethodID(jniEnv, TestProvider, "getTime","()Ljava/lang/String;");
非静态:
sayHello = (*jniEnv)->GetMethodID(jniEnv, TestProvider, "sayHello","(Ljava/lang/String;)V");
C 中调用 Java的 方法
静态:
(*jniEnv)->CallStaticObjectMethod(jniEnv, TestProvider, getTime);
非静态:
(*jniEnv)->CallVoidMethod(jniEnv, mTestProvider, sayHello,jstrMSG);
注意 GetXXXMethodID 和 CallXXXMethod 。
第一个XXX 表示的是映射方法的类型,如: 静态 跟非静态
第二个 XXX 表示 调用方法的返回值 ,如:Void,Object,等等。(调用静态方法的时候Call后面要加Static)
01-02 00:02:35.064: E/dalvikvm(4223): JNI ERROR (app bug): local reference table overflow (max=512)
向JNI传递大量的数据,或new出大量对象时,如果不及时释放,则会造成上述错误。
1.在将java string转换为native string之后,要调用ReleaseStringUTFChars释放。
释放资源 :
(JNIEnv* env, jobject thiz, jobjectArray inputPath, jstring outputFolder, jint outWidth, jdouble outHeight)
jstring srcImage = (jstring)((env)->GetObjectArrayElement(inputPath, cnt));
const char *srcfileName = env->GetStringUTFChars(
srcImage , 0);
(env)->DeleteLocalRef(
srcImage ) ;
JNI OPENCV 图像处理
环境变量中要设置: 变量名: OPENCV_PACKAGE_DIR ======== 变量值: D:\OpenCV231\OpenCV-2.3.1
LOCAL_PATH := $(call my-dir)
LOCAL_CPP_EXTENSION := .cpp
include $(CLEAR_VARS)
include $(OPENCV_PACKAGE_DIR)\share\OpenCV\OpenCV.mk
LOCAL_MODULE :=
LOCAL_SRC_FILES := .
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
分享到:
相关推荐
Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...
要实现JNI调用Python解释器,我们需要以下步骤: 1. **创建本地库项目**:使用NDK,创建一个新的Android Studio项目,包含C/C++源代码。这个项目将包含Python解释器的封装以及与Java层的接口。 2. **集成Python...
在本项目"JNI断点调试工程"中,我们聚焦于使用Visual Studio 2008(VS2008)生成一个DLL动态链接库,这个库能够被Java程序通过JNI接口调用。调试配置已经预先设定好,使得开发者可以直接使用F5快捷键启动调试,直至...
在本案例中,我们讨论的是如何使用Java JNI调用一个名为"AlarmTTS"的VC(Visual C++)动态链接库(DLL)并进行调试。 首先,我们需要了解Java部分的代码。`CallAlarmTTSDll`类是Java程序的核心,它定义了三个本地...
本文将深入探讨如何利用Android NDK(Native Development Kit)在应用程序中使用JNI调用驱动程序。 首先,我们需要了解NDK的基本概念。NDK是Google提供的一套工具集,用于在Android平台上编写和编译原生代码。它...
在某些场景下,比如调用操作系统特定的功能或者利用已有的C/C++库,我们需要使用JNI来实现Java与本地代码(如DLL动态链接库)的交互。本教程将详细介绍如何通过JNI在Java中调用DLL的完整步骤。 1. **创建Java类和...
在本实例中,我们将深入探讨如何使用JNI调用第三方DLL(动态链接库)文件,这是在Java应用程序中利用C++或C代码能力的常见场景。这个实例是在Visual Studio 2010环境下构建的,但请注意,其他环境可能需要不同的配置...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码调用本地(C/C++)代码,反之亦然。这对于性能敏感的应用、底层库的集成以及利用现有C/C++库是非常有用的。本教程将聚焦于如何在...
"JNI调试心得" JNI(Java Native Interface)是 Java programming language 的一部分,允许 Java 代码与 native 代码进行交互。下面是关于在 VS2008 中调试 JNI 的心得,主要通过截图一步一步展示如何写 JNI 代码。...
Java程序可以通过JNI调用本地方法,这些本地方法是用其他语言编写的,并通过JNI接口暴露给Java。这个过程涉及到以下几个步骤: 1. **创建本地方法声明**:在Java类中,你需要声明本地方法。这些方法没有具体实现,...
本项目“android jni调用demo”是一个实际操作的例子,它提供了在Android Studio环境中运行的完整流程。 首先,我们需要理解JNI的基本概念。JNI是Java平台的一部分,允许Java代码与其他编程语言(如C/C++)进行通信...
在这种情况下,"springboot+jna/jni调用动态so/dll库"是一个重要的主题,它涉及到Spring Boot应用如何利用Java Native Interface (JNI) 和 Java Native Access (JNA) 这两种技术来调用操作系统级别的动态链接库(.so...
本篇将详细介绍如何使用JNI调用C语言来实现特定的功能。 首先,理解JNI的基本概念是关键。JNI提供了一种机制,让Java虚拟机(JVM)能够调用本地(Native)代码,也就是非Java语言编写的代码,通常是C或C++。这个...
这个项目通常包含了一些简单的JNI代码,用于演示如何在Android应用中调用本地方法,以及如何进行编译和调试。开发者可以通过这个示例来学习和实践JNI的使用和调试过程。 总结,从Froyo 2.2开始的JNI单步调试支持是...
通过以上步骤,我们可以实现C++通过JNI调用Java类的功能。这个过程涉及到了Java和C++的混合编程,需要对两种语言有深入的理解,并且熟悉JNI提供的接口。在实际应用中,开发者还需要考虑多线程、内存管理、错误处理等...
在提供的资源"使用C++创建java虚拟机JVM,使用JNI调用java函数"中,可能详细介绍了以上步骤的实际应用,包括代码示例和可能遇到的问题及解决方案。通过学习和实践这个教程,开发者可以更好地理解和掌握C++与Java之间...
首先,要使用JNI调用第三方库,我们需要遵循以下步骤: 1. **创建Java接口**:在Java源代码中定义一个接口,这个接口将包含所有要调用的本地方法声明。这些方法的签名必须与C/C++函数的参数和返回类型匹配。 ```...
### 二、JNI调用Java类的具体步骤 #### 1. 准备阶段 首先,我们需要一个简单的Java程序,例如上述例子中的`Prog.java`。这个程序定义了一个静态方法`main`,它接收一个字符串数组参数,并输出一段包含参数信息的...
本资料"Java通过JNI调用C语言函数库的方法.zip"提供了一个名为"JavaJNIStudy-master"的项目,下面将详细介绍这一过程的关键知识点。 1. **JNI简介** JNI是Java平台的标准接口,它使得Java应用程序可以与本地代码...