JNI初步(五)jni ndk 一個.so檔案依賴另一個.so檔案的寫法
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.呼叫完畢
相關文章
- 鴻蒙手機版JNI實戰(JNI開發、SO庫生成、SO庫使用)鴻蒙
- JNI 檔案遍歷
- 成品直播原始碼推薦,用JNI生成so檔案,加密解密需要的hascode生成程式碼原始碼加密解密
- Sublime text找不到.so檔案
- Android JNI實現Java與C/C++互相呼叫,以及so庫的生成和呼叫(JNI方式呼叫美圖秀秀so)AndroidJavaC++
- Android 的 so 檔案載入機制Android
- Android 關於 so 檔案的總結Android
- Android-ffmpeg編譯so檔案Android編譯
- Nginx+lua 實現呼叫.so檔案Nginx
- cmakelist 原始碼生成so 檔案 orthanc mysql原始碼MySql
- 安卓除錯 .so 斷到 JNI_OnLoad 或者 .init段安卓除錯
- C編譯: 動態連線庫 (.so檔案)編譯
- 【Jupyter Notebook】jupyter notebook呼叫另一個.ipynb檔案
- Android NDK祕籍--初識NDK、JNI、Makefile/CMakeAndroid
- 驚喜!一個檔案多個【請求類】的另類寫法
- Android Studio NDK:三、打包SOAndroid
- JNI的語法
- requirements.txt 檔案宣告依賴UIREM
- Android NDK開發之JNI基礎Android
- Android下檢視SO庫被依賴的情況Android
- openGauss libpq使用依賴的標頭檔案
- Playwright使用Typescript實現在測試case檔案中呼叫另一個檔案中的方法TypeScript
- 多個 EXCEL 檔案如何合併成一個檔案Excel
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Android:JNI 與 NDK到底是什麼?Android
- Android Studio NDK:二、JNI 返回JAVA 實體AndroidJava
- 監控Java層和JNI Native層Crash,分析.so庫報錯的堆疊資訊Java
- Gradle 使用技巧(二) - SO/NDK過濾Gradle
- Springboot專案中需整合的依賴集和檔案配置Spring Boot
- 一個專案 兩個cgo依賴編譯不通過Go編譯
- 怎麼將ts檔案合成一個檔案
- 使用js寫一個批次上傳檔案的元件JS元件
- 多個excel檔案合併到一個檔案中的多個sheet表中Excel
- git新建一個檔案Git
- 第一個執行WebAssembly的Java庫:Wasmer JNIWebJavaASM
- linux複製檔案到另一個資料夾怎麼操作 linux複製檔案的命令介紹Linux
- android中MK檔案的寫法Android
- 搞定某APP的TCP抓包,並直接呼叫so檔案進行Hook抓取APPTCPHook