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.呼叫完畢
相關文章
- 利用IDEA進行JNI開發:使用NDK生成Linux平臺下的so檔案IdeaLinux
- 鴻蒙手機版JNI實戰(JNI開發、SO庫生成、SO庫使用)鴻蒙
- 如何在Android Gradle中新增原生so檔案依賴AndroidGradle
- JNI 檔案遍歷
- 成品直播原始碼推薦,用JNI生成so檔案,加密解密需要的hascode生成程式碼原始碼加密解密
- Android so檔案生成Android
- 在一個js檔案中引入另一個js檔案JS
- IDA除錯 Android so檔案的10個技巧除錯Android
- AndroidStudio之NDK環境搭建,so檔案打包以及使用Android
- 在Eclipse 下整合ndk 自動編譯生成so檔案Eclipse編譯
- Sublime text找不到.so檔案
- Android JNI實現Java與C/C++互相呼叫,以及so庫的生成和呼叫(JNI方式呼叫美圖秀秀so)AndroidJavaC++
- 記一次.so檔案的安裝吧
- 檔案正由另一個程式使用
- Android 的 so 檔案載入機制Android
- Android 關於 so 檔案的總結Android
- Android .SO 檔案的相容和適配Android
- Android的.so檔案詳細解讀Android
- Android - JNI加入標準C++檔案AndroidC++
- Nginx+lua 實現呼叫.so檔案Nginx
- Android-ffmpeg編譯so檔案Android編譯
- cmakelist 原始碼生成so 檔案 orthanc mysql原始碼MySql
- JNI學習筆記之AS+ndk+gradle自動編譯出so並整合流程筆記Gradle編譯
- jni和ndk詳解
- Android Studio:couldn't find .so檔案Android
- dll和so檔案區別與構成
- JNI/NDK開發指南(1):JNI開發流程及HelloWorld
- 驚喜!一個檔案多個【請求類】的另類寫法
- 編寫一個檔案補丁
- requirements.txt 檔案宣告依賴UIREM
- C編譯: 動態連線庫 (.so檔案)編譯
- Android逆向之旅---SO(ELF)檔案格式詳解Android
- JNI的語法
- JNI/NDK開發指南(9):JNI呼叫效能測試及優化優化
- IDEA下JNI開發快速生成標頭檔案方法Idea
- 快取依賴(檔案、資料庫)快取資料庫
- 關於Android的.so檔案你所需要知道的Android
- 一個專案 兩個cgo依賴編譯不通過Go編譯