JNI ndk 一个.so文件依赖另一个.so文件的写法
程序员文章站
2022-03-26 19:53:47
jin 的步骤首先参考https://blog.csdn.net/we1less/article/details/108930467注意:本文是在ndk环境下编写1.写native类声明native方法package com.godv.audiosuc;public class NativePlayers { static{ System.loadLibrary("JNI_ANDROID_AUDIOS"); System.loadLibrary("J...
jin 的步骤首先参考https://blog.csdn.net/we1less/article/details/108930467
注意:本文是在ndk环境下编写
1.写native类声明native方法
package com.godv.audiosuc;
public class NativePlayers {
static{
System.loadLibrary("JNI_ANDROID_AUDIOS");
System.loadLibrary("JNI_ANDROID_TEST");
}
//native方法
public static native int show(String url);
public static native String shutDown();
}
2.java-h 生成对应的jni 头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_godv_audiosuc_NativePlayers */
#ifndef _Included_com_godv_audiosuc_NativePlayers
#define _Included_com_godv_audiosuc_NativePlayers
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_godv_audiosuc_NativePlayers
* Method: show
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_godv_audiosuc_NativePlayers_show
(JNIEnv *, jclass, jstring);
/*
* Class: com_godv_audiosuc_NativePlayers
* Method: shutDown
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_godv_audiosuc_NativePlayers_shutDown
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
3.写实现类调用另一个cpp中的方法 (这里称这个类为 方法类)
#include "NativePlayers.h"
#include <stdio.h>
#include <stdlib.h>
#include "Test.h"
JNIEXPORT jint JNICALL Java_com_godv_audiosuc_NativePlayers_show
(JNIEnv * env, jclass clazz, jstring jstr)
{
Test t;
return t.play();
}
JNIEXPORT jstring JNICALL Java_com_godv_audiosuc_NativePlayers_shutDown
(JNIEnv * env, jclass clazz)
{
jstring str = env->NewStringUTF("Im godv !");
return str;
}
3.1.方法类c++
#ifndef FFMPEG_TEST_H
#define FFMPEG_TEST_H
#include <stdio.h>
#include <stdlib.h>
class Test{
public:
int play();
};
#endif //FFMPEG_TEST_H
#include "Test.h"
int Test::play() {
return 0;
}
4.首先将方法类封装成.so动态库
4.1android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JNI_ANDROID_TEST
LOCAL_SRC_FILES := Test.cpp
include $(BUILD_SHARED_LIBRARY)
4.2ndk-build 生成 libJNI_ANDROID_TEST.so
5.写生成jni .so文件 android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libJNI_ANDROID_TEST
LOCAL_SRC_FILES := libJNI_ANDROID_TEST.so
include $(PREBUILT_SHARED_LIBRARY)
#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(CLEAR_VARS)
LOCAL_MODULE := JNI_ANDROID_AUDIOS
LOCAL_SRC_FILES := NativePlayers.cpp
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
LOCAL_SHARED_LIBRARIES := libJNI_ANDROID_TEST \
include $(BUILD_SHARED_LIBRARY)
7.调用完毕
本文地址:https://blog.csdn.net/we1less/article/details/108984346