`

android jni调用心得

 
阅读更多
jni 的调用分几种方式:
1。静态调用
2。动态调用


动态调用就是,平时说的,在项目中新建jni目标,用NDK方法来编译。最终生成so文件借当前项目需要的时候,调用 


静态调用就是开机的时候加载到虚拟机里面的方式,这里也分两种方式,
  1。同样Simplejni  路径:/rowboat-android/development/samples/SimpleJNI
    从这个例子可以看出,这种方式调用是,采用封装好的形式,加载到虚拟机里面去,然后调用的方式也区别于ndk,因为方法名前面不用加包名
  2。另外一个是把.cpp文件放在framework下面,来保证开机加载到虚拟机里面去,文件存放目录为:rowboat-android/frameworks/base/core/jni
    在这个目录下面也有类似的例子,如:

android_os_Power.cpp


static void releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj)
{
    if (idObj == NULL) {
        throw_NullPointerException(env, "id is null");
        return ;
    }

    const char *id = env->GetStringUTFChars(idObj, NULL);

    release_wake_lock(id);

    env->ReleaseStringUTFChars(idObj, id);

}


把定义的方法加载到方法列表当中
static JNINativeMethod method_table[] = {
    { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock },
    { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock },
    { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout },
    { "setScreenState", "(Z)I", (void*)setScreenState },
    { "shutdown", "()V", (void*)android_os_Power_shutdown },
    { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
    { "VirtualKey", "()V", (void*)android_os_Power_VirtualKey },
    { "sendKye", "()V", (void*)android_os_Power_sendKey },
};       


//注册所有方法到虚拟机
int register_android_os_Power(JNIEnv *env)
{
    return AndroidRuntime::registerNativeMethods(
        env, "android/os/Power",
        method_table, NELEM(method_table));
}    


//AndroidRuntime.cpp
extern int register_android_os_Power(JNIEnv *env);   

REG_JNI(register_android_os_Power),


在这里增加到总的虚拟机上面,方便统一加载 
在这个文件当中完成统一的开机,虚拟机统一加载 。。。。。。




如果 是这种方式调用,那么在程序当中只要直接调用方法名就行了,不需要像NDK   那样System.loadLibrary("demo");
分享到:
评论

相关推荐

    Android通过JNI调用.so动态库

    Android 通过 JNI 调用.so 动态库 Android 通过 JNI(Java Native Interface)调用.so 动态库是 Android 开发中的一种常用技术。JNI 是一种允许 Java 代码与 native 代码之间进行交互的接口。通过 JNI,我们可以在 ...

    Android使用JNI调用Python so解释器

    在这个特殊的场景中,我们讨论的是如何通过JNI在Android应用中调用Python解释器,这通常用于实现动态脚本执行或者利用Python丰富的库资源。 首先,我们需要理解Android的NDK(Native Development Kit),它是...

    android jni调用demo

    Android的JNI(Java Native Interface)调用是Android应用开发中的一个重要技术,允许Java代码与本地C/C++代码交互。在Android NDK(Native Development Kit)的帮助下,开发者可以利用C/C++的强大性能处理复杂的...

    android 使用jni调用c++

    本教程将详细介绍如何在Android项目中使用JNI调用C++代码。 首先,你需要配置Android的NDK(Native Development Kit)。NDK是一组工具,开发者可以用它来编写用C和C++编写的应用程序模块,这些模块可以直接在...

    android JNI C 调用Java

    Android JNI(Java Native Interface)是Android系统提供的一种机制,它允许Java代码调用C/C++原生代码,同时也允许C/C++代码调用Java的方法。JNI在开发高性能、低级硬件交互、使用现有C库或者优化性能的关键部分时...

    android jni调用jni 方法

    本篇文章将深入探讨如何在Android中使用JNI以及如何在JNI层调用方法。 1. **JNI基本概念** - JNI是一种接口,让Java应用程序能够调用本地(非Java)代码,同时也允许本地代码调用Java方法。 - 在Android中,JNI...

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

    在Android应用程序开发中,有时需要访问底层硬件功能或者优化性能,这时就可能需要用到JNI(Java Native Interface)技术来调用C/C++代码。JNI允许Java应用程序与本地代码进行交互,包括操作系统内核、驱动程序等。...

    andoid studio中JNI调用第三方库例子

    这个例子"android studio中JNI调用第三方库例子"是基于谷歌官方提供的"hello-libs"示例项目,旨在帮助开发者了解如何在Android Studio中使用JNI来调用预编译的第三方动态链接库(.so文件)。 首先,我们需要理解JNI...

    android jni调用详细解说

    ### Android JNI调用详解 #### 一、简介与环境配置 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。对于Android开发来说,使用JNI可以实现用C/C++来编写性能...

    Android Jni调用实例

    在Android Jni调用实例中,我们通常会经历以下几个步骤: 1. **创建本地方法声明**:在Java层,我们需要声明一个native方法,该方法将在C/C++代码中实现。例如: ```java public class NativeDemo { static { ...

    Android Studio JNI 调用demo

    本示例"Android Studio JNI 调用demo"将展示如何在Android Studio中创建、编译JNI代码,并在Android应用中加载和调用本地库(SO文件)。 1. **JNI基础知识** JNI是Java平台的标准组成部分,它定义了一组API,让...

    android JNI调用实例

    通过上述步骤,我们可以成功地在Android应用中实现JNI调用,充分利用C/C++的性能优势,同时保持Java的易用性和跨平台性。不过,需要注意的是,过度使用JNI可能导致代码维护困难,因此应当谨慎权衡利弊。

    Android JNI调用-文件操作

    总结起来,Android中的JNI调用允许开发者使用C/C++进行文件操作,提供更高的效率和灵活性。通过声明native方法、编写C/C++代码、配置构建系统以及处理权限,开发者可以充分利用JNI进行复杂或性能敏感的文件操作。...

    JniDemo Android调用C语言

    本项目"JniDemo Android调用C语言"提供了一个完整的示例,展示了如何在Android Studio环境中利用JNI调用C语言代码。 首先,我们来理解一下JNI的基本概念。JNI是Java虚拟机(JVM)和本地代码之间的桥梁,它定义了一...

    Android 5.0jni调用

    这个“Android 5.0 JNI调用”示例可能就是为了展示这些改进而设计的。 JNI的核心功能是为Java应用提供访问本地库(如C/C++代码)的能力。在Android 5.0之前,JNI调用可能存在一些问题,比如内存管理不当可能导致...

    android jni 调用

    Android JNI调用是Android应用程序开发中的一个重要组成部分,它允许开发者在Java代码中调用本地(C/C++)代码,从而实现高效能计算、利用现有的C/C++库或处理硬件特定的功能。JNI,全称为Java Native Interface,是...

    Android JNI native调用 java层demo TESTJNI.zip

    本文将深入探讨在Android中如何使用JNI,特别是如何从C++ native代码调用Java层的类、方法、属性以及接口,同时涉及线程回调接口的实现。 首先,我们需要了解JNI的基本结构。一个典型的JNI应用会包含Java源文件、C/...

    android-jni&底层调用开发讲解

    本教程将深入讲解Android的JNI与底层C代码调用的开发过程。 首先,我们要了解JNI的基本概念。JNI是Java平台标准的一部分,它提供了一种方式,使得Java代码能够调用本地(非Java)代码,反之亦然。这使得开发者可以...

    Android JNI 调用 Silk 音频编解码包

    总之,Android JNI调用Silk音频编解码包涉及到Android NDK的使用,JNI接口的创建,以及与Android音频系统的集成。通过这一过程,你可以充分利用Silk编解码器的性能优势,为你的应用提供高质量的音频处理功能。

    AndroidStudio环境下的jni调用(NDK)

    AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。

Global site tag (gtag.js) - Google Analytics