• ###SDL,JNI


    sdlActivity是官方提供的类吗?

    SDLActivity 并不是官方提供的类,而是在使用 SDL(Simple DirectMedia Layer)库进行 Android 开发时通常会遇到的一个类。

    SDL 是一个跨平台的多媒体开发库,可以用于开发音视频播放器、游戏等应用。在 Android 平台上,SDL 提供了一个名为 SDLActivity 的类,用于简化 SDL 应用的初始化和运行过程。

    SDLActivity 类位于 SDL_android_main.c 文件中,通过 JNI(Java Native Interface)与 Java 层进行交互。它提供了一些常用的函数和方法,包括:

    1. onCreate():在应用程序启动时被调用,用于初始化 SDL 和相关资源。

    2. onPause()onResume():在应用程序切换到后台或前台时被调用,用于暂停和恢复应用程序的运行。

    3. onNativeResize():在窗口大小变化时被调用,用于处理窗口大小的调整。

    4. onNativeKeyDown()onNativeKeyUp():在按键事件发生时被调用,用于处理键盘事件。

    5. onNativeTouch():在触摸事件发生时被调用,用于处理触摸事件。

    SDLActivity 类的存在使得在 Android 平台上使用 SDL 开发应用更加方便,开发者可以集中精力在业务逻辑的实现上,而不必过多关注底层的初始化和事件处理等细节


    为什么只有共享库,没有看到c代码呢?jni,Java怎么就调用c了?

    在 SDL 中,通过 JNI 实现 Java 层与本地代码(C/C++)的通信是一个关键的机制,让我们来看一下具体的步骤:

    1. 在 Java 代码中声明本地方法

      • 在 Java 代码中使用 native 关键字声明需要调用的本地方法。这样 JVM 在运行时会去加载对应的本地库并执行其中的函数。
      • 生成头文件

        使用 javac 命令结合 -h 选项生成 JNI 的头文件。这个头文件会包含 JNI 方法的声明,用于在 Java 层调用本地方法。

    3.定义本地方法:

    首先,在 C/C++ 文件中实现需要被 Java 调用的方法,并使用 JNIEXPORT 定义这些方法为 JNI 方法。例如,可以在 SDL_android_main.c 文件中定义与 SDLActivity 相关的 JNI 方法。其实就是包含头文件后,实现头文件中声明的方法。

    #include

    JNIEXPORT void JNICALL Java_org_example_SDLActivity_nativeMethod(JNIEnv* env, jobject obj) {
        // 在这里实现需要被 Java 调用的本地方法逻辑
        // 可以在这里编写与 SDLActivity 相关的功能实现
    }

    4.生成共享库

    将 C/C++ 代码编译成共享库(.so 文件),供 Java 虚拟机加载

    5.加载本地库

    在 Java 代码中使用 System.loadLibrary("library_name") 加载生成的共享库

    6.调用本地方法

    在 Java 代码中通过声明的 native 方法名进行调用,JVM 会通过 JNI 实现与本地代码交互,执行相应的功能

  • 相关阅读:
    Java中this关键字的常见用法
    选Redis做 mq 的人,是水平欠缺么?
    读者写者问题—内含408真题
    sql多表查询,嵌套查询,函数查询
    周报不止是汇报进度,如何用周报轻松提升团队协作效率?
    【面试题】【ES6】let和const命令 (面试必看)
    uniapp登录页面( 适配:pc、小程序、h5)
    1 随机事件与概率
    汇编的div
    内网横向移动——SNMP获取信息
  • 原文地址:https://blog.csdn.net/qq_63053996/article/details/136748739