CMD编译JNI头文件方法 jobject/jclass 参数

1.配置JAVA环境变量

变量名:JAVA_HOME  变量值:C:\Program Files\Java\jdk1.7.0_67

变量名:calsspath         变量值:.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar

变量名:Path                 变量值

2.编写JAVA 类

package com.oaup.core.libh264;
/**
 * Created by jiaokx on 2016/4/8.
 */
public class CX264Writer {

    public native int Init();
    public native static int getFrameSize();

}
3.生成*.class 文件
      在CMD中进入到JAVA类当前目录(libh264目录)
      执行命令  javac CX264Writer.java
      就会在当前目录生产CX264Writer.class文件。

4.由 CX264Writer.class 生成jni头文件
       一目了然,首先,回到包名根路径,比如我们的包名是com.oaup.core.libh264 类名是CX264Writer,那么我们就要进入到com同级的目录,src/main/java/com/oaup/core/libh264,我们就要进入到java目录下。
      然后执行命令 javah -jni com.oaup.core.libh264.CX264Writer
      生成com_oaup_core_libh264_CX264Writer.h头文件。

5. com_oaup_core_libh264_CX264Writer.h
   
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_oaup_core_libh264_CX264Writer */

#ifndef _Included_com_oaup_core_libh264_CX264Writer
#define _Included_com_oaup_core_libh264_CX264Writer
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_oaup_core_libh264_CX264Writer
 * Method:    Init
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_oaup_core_libh264_CX264Writer_Init
  (JNIEnv *, jobject);

/*
 * Class:     com_oaup_core_libh264_CX264Writer
 * Method:    getFrameSize
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_oaup_core_libh264_CX264Writer_getFrameSize
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是详细的步骤: 1. 准备工作 在开始之前,需要确保系统中已经安装了 JDK 和 Android NDK,并且已经配置好了环境变量。 2. 创建 C++ 库文件 在任意目录下创建一个 C++ 文件,例如 `native-lib.cpp`,并编写相应的 C++ 代码。 3. 创建 JNI 接口函数 在 C++ 文件中创建 JNI 接口函数,例如: ```c++ #include <jni.h> #ifdef __cplusplus extern "C" { #endif JNIEXPORT jstring JNICALL Java_com_example_NativeUtils_getMessage(JNIEnv *env, jobject thiz) { const char *message = "Hello from C++!"; return env->NewStringUTF(message); } #ifdef __cplusplus } #endif ``` 其中,`Java_com_example_NativeUtils_getMessage` 是 JNI 接口函数,`getMessage` 是 Java 层调用的方法名,`com_example_NativeUtils` 是 Java 类的全限定名。 4. 编译 C++ 库文件 使用 NDK 自带的工具链将 C++ 文件编译成动态链接库,例如: ```shell gcc -shared -fpic -o libnative-lib.so native-lib.cpp ``` 其中,`-shared` 选项表示编译成动态链接库,`-fpic` 表示编译为位置独立代码,`-o` 指定输出文件名。 5. 创建 Java 类 在 Android Studio 中创建一个 Java 类,例如: ```java public class NativeUtils { static { System.loadLibrary("native-lib"); } public static native String getMessage(); } ``` 其中,`loadLibrary` 方法用于加载本地库,`getMessage` 方法对应本地方法。 6. 生成文件 使用 JDK 自带的工具 javah 生成 JNI 文件,例如: ```shell javah -classpath <项目路径>/app/build/intermediates/classes/debug -d <jni文件输出路径> com.example.NativeUtils ``` 其中,`<项目路径>` 表示项目的绝对路径,`<jni文件输出路径>` 表示 JNI 文件的输出路径,`com.example.NativeUtils` 表示 Java 类的全限定名。 7. 实现 JNI 接口函数 在 JNI 文件中实现 JNI 接口函数,例如: ```c++ #include <jni.h> JNIEXPORT jstring JNICALL Java_com_example_NativeUtils_getMessage(JNIEnv *env, jclass clazz) { const char *message = "Hello from C++!"; return env->NewStringUTF(message); } ``` 其中,`Java_com_example_NativeUtils_getMessage` 是 JNI 接口函数,`getMessage` 是 Java 层调用的方法名,`com_example_NativeUtils` 是 Java 类的全限定名。 需要注意的是,JNI 接口函数的第一个参数是 `JNIEnv` 指针,第二个参数是 `jclass` 或 `jobject` 指针,分别表示当前调用的 Java 类或 Java 对象。 8. 将 JNI文件加入 Android 项目 将编译好的动态链接库文件复制到 Android 项目的 `app/src/main/jniLibs/<架构>` 目录下,其中 `<架构>` 表示目标设备的架构,例如 `arm64-v8a`。 9. 在 Android 项目中调用 JNI 方法 在 Android 项目中调用 JNI 方法,例如: ```java String message = NativeUtils.getMessage(); ``` 10. 编译运行 Android 项目 编译并运行 Android 项目,即可在应用中使用 C++ 封装的 JNI 接口函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值