• <div id="tn9rm"><optgroup id="tn9rm"></optgroup></div>
    <ol id="tn9rm"><kbd id="tn9rm"></kbd></ol>
  • logo

    logo
    • 點(diǎn)贊
    • 評(píng)論
    • 分享
    免費(fèi)
    課程章節(jié)
    • 課程介紹
    • 相關(guān)推薦
    • 電子產(chǎn)業(yè)圖譜
    申請(qǐng)入駐 產(chǎn)業(yè)圖譜

    如何用JAVA調(diào)用C++

    中級(jí)課程
    2018/09/13
    402
    加入交流群
    掃碼加入
    獲取工程師必備禮包
    參與熱點(diǎn)資訊討論

    課程介紹

    在一些Android應(yīng)用的開(kāi)發(fā)中,需要通過(guò)JNIAndroid NDK工具實(shí)現(xiàn)JAVAC/C++之間的相互調(diào)用。

    Java?Native Interface (JNI)標(biāo)準(zhǔn)是java平臺(tái)的一部分,它允許Java代碼和其他語(yǔ)言寫(xiě)的代碼進(jìn)行交互。JNI是本地編程接口,它使得在Java虛擬機(jī)(VM)內(nèi)部運(yùn)行的Java代碼能夠與用其它編程語(yǔ)言(如C、C++和匯編語(yǔ)言)編寫(xiě)的應(yīng)用程序和庫(kù)進(jìn)行交互操作。

    由于Android應(yīng)用層的類(lèi)都是以Java寫(xiě)的,這些Java類(lèi)編譯為Dex型式的Bytecode之后,必須靠Dalvik虛擬機(jī)(VM: Virtual Machine)來(lái)執(zhí)行。在執(zhí)行Java類(lèi)的過(guò)程中,如果Java類(lèi)需要與C組件溝通時(shí),VM就會(huì)去載入C組件,然后讓Java的函數(shù)順利地調(diào)用到C組件的函數(shù)。此時(shí),VM扮演著橋梁的角色,讓JavaC組件能通過(guò)標(biāo)準(zhǔn)的JNI介面而相互溝通。

    在實(shí)際應(yīng)用中這兩者之間的調(diào)用關(guān)系可以歸納為以下四種方式:

    1. 在應(yīng)用的JAVA代碼中調(diào)用NDKC/C++實(shí)現(xiàn)的函數(shù)。

    2. NDK開(kāi)發(fā)中的C/C++代碼調(diào)用應(yīng)用中JAVA類(lèi)的靜態(tài)函數(shù)。

    3. NDK開(kāi)發(fā)中的C/C++代碼調(diào)用應(yīng)用中JAVA類(lèi)當(dāng)前傳入NDK中的實(shí)例的函數(shù)。

    4. NDK開(kāi)發(fā)中的C/C++代碼調(diào)用應(yīng)用中JAVA類(lèi)新建實(shí)例的函數(shù)。

    相關(guān)推薦

    電子產(chǎn)業(yè)圖譜