国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Android]JNI的基礎(chǔ)知識(shí)

這篇具有很好參考價(jià)值的文章主要介紹了[Android]JNI的基礎(chǔ)知識(shí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1.什么是JNI??

2.配置JNI開發(fā)環(huán)境NDK

3.創(chuàng)建Native?C++類型的項(xiàng)目

4. 了解CMakeLists.txt 文件

5.了解native-lib.cpp 文件

6.在 Android 的 MainActivity 中調(diào)用 native-lib.cpp 中實(shí)現(xiàn)的本地方法


1.什么是JNI??

? ? ? JNI(Java Native Interface)是一種允許Java代碼與本地代碼(如C或C++)進(jìn)行交互的技術(shù)。它提供了一種機(jī)制,使得Java應(yīng)用程序可以調(diào)用本地方法或庫,并允許本地代碼訪問Java應(yīng)用程序中的對(duì)象和方法。

2.配置JNI開發(fā)環(huán)境NDK

打開Android Studio,點(diǎn)擊“Tools”,轉(zhuǎn)到“SDK Manager”,選擇“SDK Tools”選項(xiàng)卡,并選中“NDK”和“CMake”進(jìn)行安裝。

[Android]JNI的基礎(chǔ)知識(shí),android,jni,c/c++,cmake

3.創(chuàng)建Native?C++類型的項(xiàng)目

? ? ? 你可以創(chuàng)建一個(gè) Android 的 Native C++ 項(xiàng)目,并在其中編寫 C++ 代碼,并使用 JNI 接口與 Java 代碼進(jìn)行交互。這樣你就可以充分利用 C++ 的性能優(yōu)勢(shì),并與 Android 平臺(tái)進(jìn)行無縫集成。

[Android]JNI的基礎(chǔ)知識(shí),android,jni,c/c++,cmake

其中在 src/main/cpp 目錄下

CMakeLists.txt 文件:該文件是用于配置和管理你的 C++ 代碼構(gòu)建過程的主要文件。

native-lib.cpp 文件:你可以在native-lib.cpp 文件里面來實(shí)現(xiàn)你的 C++ 代碼邏輯。

MainActivity: 中調(diào)用 native-lib.cpp 中實(shí)現(xiàn)的本地方法

4. 了解CMakeLists.txt 文件

CMakeLists.txt 文件是一個(gè)文本文件,用于配置和管理 CMake 構(gòu)建系統(tǒng)的行為。

#cmake最低版本要求
cmake_minimum_required(VERSION 3.22.1)

project("jni_test")

# 配置so庫編譯信息
add_library(
        # 輸出so庫的名稱
        jni_test
        # 設(shè)置生成庫的方式,默認(rèn)為SHARE動(dòng)態(tài)庫
        SHARED
        # 列出參與編譯的所有源文件
        native-lib.cpp)

# 查找代碼中使用到的系統(tǒng)庫
find_library(
        log-lib
        log)

# 指定編譯目標(biāo)庫時(shí),cmake要鏈接的庫
target_link_libraries(
        # 指定目標(biāo)庫,native-lib 是在上面 add_library 中配置的目標(biāo)庫
        jni_test
        # 列出所有需要鏈接的庫
        ${log-lib})

常用的命令有:

1.指定 CMake 的最低版本要求。

#cmake最低版本要求
cmake_minimum_required(VERSION 3.22.1)

2.使用 project 命令來指定項(xiàng)目的名稱和版本。

project("jni_test")

3. 通過 set 方法定義了 so 頭文件 所在目錄。

其中 CMAKE_SOURCE_DIR 為系統(tǒng)變量,指向 CMakeLists.txt 所在目錄。
set(OPENCV_LIBS_DIR ${CMAKE_SOURCE_DIR}/../opencv_include)

4.引入其他模塊。

include_directories(${OPENCV_LIBS_DIR})

5.添加源文件。

#opencv
add_library(libopencv_java3
        SHARED
        IMPORTED )

6.set_target_properties 命令可以指定構(gòu)建結(jié)果的輸出路徑、名稱等。

其中ANDROID_ABI 是系統(tǒng)變量,指 向 so 對(duì)應(yīng)的 CPU 框架目錄:armeabiarmeabi-v7a、x86 ...

set_target_properties(libopencv_java3
        PROPERTIES IMPORTED_LOCATION
        ${OPENCV_LIBS}/${ANDROID_ABI}/libopencv_java3.so )

7.??target_link_libraries 命令,你可以指定要鏈接到項(xiàng)目中的靜態(tài)庫或動(dòng)態(tài)庫。

target_link_libraries( jni_test
        libopencv_java3
        ${log-lib}
        )
5.了解native-lib.cpp 文件

native-lib.cpp 文件中的內(nèi)容可以根據(jù)你的需求具體編寫,但通常會(huì)包含以下部分:

  1. 包含頭文件。

    #include <jni.h>
    #include <string>
  2. 實(shí)現(xiàn)本地方法:在 native-lib.cpp 文件中,你需要實(shí)現(xiàn)在 JNI 接口文件中聲明過的本地方法。這些方法將從 Java 代碼中調(diào)用。

    extern "C" JNIEXPORT jstring JNICALL
    Java_com_example_jni_1test_MainActivity_stringFromJNI(
            JNIEnv* env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    ?

    在上述例子中,我們實(shí)現(xiàn)了一個(gè)名為stringFromJNI 的本地方法,它返回一個(gè)字符串給調(diào)用方。

6.在 Android 的 MainActivity 中調(diào)用 native-lib.cpp 中實(shí)現(xiàn)的本地方法

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("jni_test");
    }

      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //省略
      
    }

 
    public native String stringFromJNI();
}

native-lib.cpp 中的本地方法stringFromJNI () 在 Java 中以相同的方法名進(jìn)行調(diào)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-677053.html

到了這里,關(guān)于[Android]JNI的基礎(chǔ)知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android Studio編譯JNI項(xiàng)目,Cmake出錯(cuò):Detecting C compiler ABI info - failed

    Android Studio編譯JNI項(xiàng)目,Cmake出錯(cuò):Detecting C compiler ABI info - failed

    cmake的定義是什么 ?-----?級(jí)編譯配置?具cmake就是將多個(gè)cpp、hpp文件組合構(gòu)建為一個(gè)大工程的語言。他能夠輸出各種各樣的makefile或者project文件,所有操作都是通過編譯CMakeLists.txt來完成。 會(huì)在編譯時(shí)跳過編譯器檢查,就不會(huì)再出現(xiàn)異常了。 弱小不是逃避的借口,應(yīng)是竭盡

    2024年02月09日
    瀏覽(18)
  • Android JNI基礎(chǔ)

    Android JNI基礎(chǔ)

    JNI(Java Native Interface)是Java提供的一種機(jī)制,用于實(shí)現(xiàn)Java和本地(Native)代碼之間的交互。通過JNI,Java程序可以調(diào)用本地代碼(如C、C++)中的函數(shù),實(shí)現(xiàn)跨語言的互操作性。 JNI主要用于以下幾個(gè)方面: 調(diào)用系統(tǒng)級(jí)別的庫和函數(shù):可以使用JNI調(diào)用操作系統(tǒng)提供的底層功能,

    2024年04月09日
    瀏覽(29)
  • Android JNI--C語言基礎(chǔ)

    相當(dāng)于java的導(dǎo)包操作 例如:#include stdio.h 打印需要注意的是,不和java一樣隨便打印的,需要占位符 在java中,萬物皆對(duì)象。 在Linux中,萬物皆文件 在C 語言中,萬物皆指針 指針其實(shí)可以理解為地址 ? 代表取出地址 例如: 例如: 只要記住一句話,內(nèi)存地址就是指針,指針就

    2024年02月14日
    瀏覽(18)
  • Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換(三)

    Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換(三)

    ?? Android Studio 版本 ??? ?? 基礎(chǔ)類型數(shù)據(jù)的轉(zhuǎn)換 ?? 定義傳遞基礎(chǔ)數(shù)據(jù)類型到Native的JNI接口函數(shù) Native層創(chuàng)建callNativeInt 提供給Java調(diào)用 CMakeLists.txt 文件下配置動(dòng)態(tài)庫名稱 ?添加 target_link_libraries 配置 Java調(diào)用Native層函數(shù)? ?運(yùn)行打印日志 Java調(diào)用Native分別打印基礎(chǔ)類型數(shù)據(jù) ?下

    2024年02月13日
    瀏覽(23)
  • Android:JNI實(shí)戰(zhàn),理論詳解、Java與Jni數(shù)據(jù)調(diào)用

    Android:JNI實(shí)戰(zhàn),理論詳解、Java與Jni數(shù)據(jù)調(diào)用

    上一篇博文《Android:JNI實(shí)戰(zhàn),加載三方庫、編譯C/C++》講解了如何搭建一個(gè)可以加載和鏈接第三方庫、編譯 C/C++ 文件的 Jni Demo?App。 這篇博文在這個(gè) Jni Demo App 的基礎(chǔ)上,從實(shí)戰(zhàn)出發(fā)詳細(xì)講解? Jni? 開發(fā)語法。 接下來,先用一小節(jié)將 Jni 開發(fā)比較重要的理論知識(shí)點(diǎn)過一下,然

    2024年01月23日
    瀏覽(24)
  • jni,android

    Windows下JNI的使用教程 - sysu_huangwei - 博客園 (cnblogs.com) JNI的使用大致有以下4個(gè)步驟: 一、在Java中寫native方法 二、用javah命令生成C/C++頭文件 三、寫對(duì)應(yīng)的C/C++程序?qū)崿F(xiàn)頭文件中聲明的方法,并編譯成庫文件 四、在Java中加載這個(gè)庫文件并使用 Android Studio編譯FFmpeg庫并移植實(shí)戰(zhàn)

    2024年04月23日
    瀏覽(16)
  • Android之 JNI詳解

    一、JNI簡(jiǎn)介 JNI 是Java Native Interface的縮寫,表示Java本地調(diào)用,通過JNI技術(shù)可以實(shí)現(xiàn)Java調(diào)用C程序和C程序調(diào)用Java代碼。 二、JNI函數(shù)注冊(cè) 2.1 靜態(tài)注冊(cè): 靜態(tài)注冊(cè)的方式我們平時(shí)用的比較多。我們通過javac和javah編譯出頭文件,然后再實(shí)現(xiàn)對(duì)應(yīng)的cpp文件的方式就是屬于靜態(tài)注冊(cè)的

    2024年04月27日
    瀏覽(18)
  • Android Java代碼與JNI交互 JNI訪問Java構(gòu)造方法(九)

    Android Java代碼與JNI交互 JNI訪問Java構(gòu)造方法(九)

    ?? Android Studio 版本 ???? ??? 創(chuàng)建包含JNI相關(guān)函數(shù)類 JNIConstructorClass.java ?? ??? 配置動(dòng)態(tài)庫名稱 ??? ??? 生成可關(guān)聯(lián)的庫鏈接 ??? 為了讓Java能夠調(diào)用?constructor-class-lib 庫中的函數(shù),您需要使用 CMake 構(gòu)建腳本中的?target_link_libraries()?命令來關(guān)聯(lián)constructor-class-lib 庫 ???

    2024年02月15日
    瀏覽(50)
  • Android Java代碼與JNI交互 JNI方法Java類字段 (六)

    Android Java代碼與JNI交互 JNI方法Java類字段 (六)

    ?? Android Studio 版本 ???? ??? Java 基礎(chǔ)類型數(shù)據(jù)對(duì)應(yīng) Native層的字母 ?? ?通過 jni 查找java某個(gè)類中相應(yīng)字段對(duì)應(yīng)的數(shù)據(jù)類型 , 需要使用到 jni 中的 GetFieldID() 函數(shù) ?? Java 引用類型數(shù)據(jù)對(duì)應(yīng) Native層字符串???? ??? 創(chuàng)建 JNIAccessField 文件 ?? ?? 配置動(dòng)態(tài)庫名稱 ??? ?? 生成

    2024年02月16日
    瀏覽(20)
  • Android Java代碼與JNI交互 JNI訪問Java類方法 (七)

    Android Java代碼與JNI交互 JNI訪問Java類方法 (七)

    ?? Android Studio 版本 ???? ??? 創(chuàng)建包含JNI的類 JNIAccessMethod.java ?? ??? Java方法對(duì)應(yīng)Native層方法名稱 ?? ?? 配置動(dòng)態(tài)庫名稱 ??? ?? 生成可關(guān)聯(lián)的庫鏈接 ??? 為了讓Java能夠調(diào)用?access-method-lib 庫中的函數(shù),您需要使用 CMake 構(gòu)建腳本中的?target_link_libraries()?命令來關(guān)聯(lián)?

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包