`

JNI 调用 调试

 
阅读更多

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!!!!");

 

 

 

 

 

中映射 

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

中映射方法

       静态:

getTime = (*jniEnv)->GetStaticMethodID(jniEnv, TestProvider, "getTime","()Ljava/lang/String;");

       非静态:

sayHello = (*jniEnv)->GetMethodID(jniEnv, TestProvider, "sayHello","(Ljava/lang/String;)V");

中调用 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通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...

    Android使用JNI调用Python so解释器

    要实现JNI调用Python解释器,我们需要以下步骤: 1. **创建本地库项目**:使用NDK,创建一个新的Android Studio项目,包含C/C++源代码。这个项目将包含Python解释器的封装以及与Java层的接口。 2. **集成Python...

    jni断点调试工程

    在本项目"JNI断点调试工程"中,我们聚焦于使用Visual Studio 2008(VS2008)生成一个DLL动态链接库,这个库能够被Java程序通过JNI接口调用。调试配置已经预先设定好,使得开发者可以直接使用F5快捷键启动调试,直至...

    Java JNI调用DLL方法

    在本案例中,我们讨论的是如何使用Java JNI调用一个名为"AlarmTTS"的VC(Visual C++)动态链接库(DLL)并进行调试。 首先,我们需要了解Java部分的代码。`CallAlarmTTSDll`类是Java程序的核心,它定义了三个本地...

    Android应用程序使用JNI调用驱动程序

    本文将深入探讨如何利用Android NDK(Native Development Kit)在应用程序中使用JNI调用驱动程序。 首先,我们需要了解NDK的基本概念。NDK是Google提供的一套工具集,用于在Android平台上编写和编译原生代码。它...

    JAVA JNI调用DLL完整步骤

    在某些场景下,比如调用操作系统特定的功能或者利用已有的C/C++库,我们需要使用JNI来实现Java与本地代码(如DLL动态链接库)的交互。本教程将详细介绍如何通过JNI在Java中调用DLL的完整步骤。 1. **创建Java类和...

    JNI调用第三方dll实例

    在本实例中,我们将深入探讨如何使用JNI调用第三方DLL(动态链接库)文件,这是在Java应用程序中利用C++或C代码能力的常见场景。这个实例是在Visual Studio 2010环境下构建的,但请注意,其他环境可能需要不同的配置...

    Android JNI 断点调试C++

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码调用本地(C/C++)代码,反之亦然。这对于性能敏感的应用、底层库的集成以及利用现有C/C++库是非常有用的。本教程将聚焦于如何在...

    JNI调试心得

    "JNI调试心得" JNI(Java Native Interface)是 Java programming language 的一部分,允许 Java 代码与 native 代码进行交互。下面是关于在 VS2008 中调试 JNI 的心得,主要通过截图一步一步展示如何写 JNI 代码。...

    C++库封装JNI接口-实现java调用c++

    Java程序可以通过JNI调用本地方法,这些本地方法是用其他语言编写的,并通过JNI接口暴露给Java。这个过程涉及到以下几个步骤: 1. **创建本地方法声明**:在Java类中,你需要声明本地方法。这些方法没有具体实现,...

    android jni调用demo

    本项目“android jni调用demo”是一个实际操作的例子,它提供了在Android Studio环境中运行的完整流程。 首先,我们需要理解JNI的基本概念。JNI是Java平台的一部分,允许Java代码与其他编程语言(如C/C++)进行通信...

    springboot+jna/jni调用动态so/dll库

    在这种情况下,"springboot+jna/jni调用动态so/dll库"是一个重要的主题,它涉及到Spring Boot应用如何利用Java Native Interface (JNI) 和 Java Native Access (JNA) 这两种技术来调用操作系统级别的动态链接库(.so...

    jni调用c来实现

    本篇将详细介绍如何使用JNI调用C语言来实现特定的功能。 首先,理解JNI的基本概念是关键。JNI提供了一种机制,让Java虚拟机(JVM)能够调用本地(Native)代码,也就是非Java语言编写的代码,通常是C或C++。这个...

    [转]好消息,android平台从froyo 2.2开始支持jni单步调试了

    这个项目通常包含了一些简单的JNI代码,用于演示如何在Android应用中调用本地方法,以及如何进行编译和调试。开发者可以通过这个示例来学习和实践JNI的使用和调试过程。 总结,从Froyo 2.2开始的JNI单步调试支持是...

    jni.zip_C++ JNI_JNI 调用java_c调用java_jni_jni jdk1

    通过以上步骤,我们可以实现C++通过JNI调用Java类的功能。这个过程涉及到了Java和C++的混合编程,需要对两种语言有深入的理解,并且熟悉JNI提供的接口。在实际应用中,开发者还需要考虑多线程、内存管理、错误处理等...

    JNI调用第三方库文件

    首先,要使用JNI调用第三方库,我们需要遵循以下步骤: 1. **创建Java接口**:在Java源代码中定义一个接口,这个接口将包含所有要调用的本地方法声明。这些方法的签名必须与C/C++函数的参数和返回类型匹配。 ```...

    JNI攻略之十一――启动虚拟机调用java类

    ### 二、JNI调用Java类的具体步骤 #### 1. 准备阶段 首先,我们需要一个简单的Java程序,例如上述例子中的`Prog.java`。这个程序定义了一个静态方法`main`,它接收一个字符串数组参数,并输出一段包含参数信息的...

    Java通过JNI调用C语言函数库的方法.zip

    本资料"Java通过JNI调用C语言函数库的方法.zip"提供了一个名为"JavaJNIStudy-master"的项目,下面将详细介绍这一过程的关键知识点。 1. **JNI简介** JNI是Java平台的标准接口,它使得Java应用程序可以与本地代码...

    java中使用JNI调用vs2005

    在本教程中,我们将深入探讨如何在Java程序中通过JNI调用Visual Studio 2005(VS2005)编译的C++代码。这个过程包括几个关键步骤,包括创建C++库、编写Java的JNI接口、编译C++代码以及在Java程序中加载和调用本地...

Global site tag (gtag.js) - Google Analytics