1. 程式人生 > >淺學JNI和NDK

淺學JNI和NDK

介紹 c++ google 什麽 為什麽 文章內容 特點 文件 view

作者:十歲的小男孩

QQ:929994365

心之安處即是吾鄉

前言

  本文試圖通過解答以下三個問題來達到學習JNI和NDK的目的。是什麽?有什麽用?怎麽用?文章內容前三節來自下面第一個鏈接的博主共享,很詳細的解答前兩個問題,第二個鏈接是安卓官網的教程,回到了第三個問題即在實際工程中怎麽用。本文記錄本人閱讀與開發過程,力求不失原意,但推薦閱讀原文。下一篇博文將重點學習native聲明的方法在底層c/c++中具體實現。

https://blog.csdn.net/carson_ho/article/details/73250163

https://developer.android.google.cn/studio/projects/add-native-code

目錄

技術分享圖片

1. JNI介紹

1.1 簡介

  • 定義:Java Native Interface,即 Java本地接口
  • 作用: 使得Java 與 本地其他類型語言(如C、C++)交互

    即在 Java代碼 裏調用 C、C++等語言的代碼 或 C、C++代碼調用 Java 代碼

  • 特別註意:

    1. JNIJava 調用 Native 語言的一種特性
    2. JNI 是屬於 Java 的,與 Android 無直接關系

1.2 為什麽要有 JNI

  • 背景:實際使用中,Java 需要與 本地代碼 進行交互
  • 問題:因為 Java 具備跨平臺的特點,所以Java 與 本地代碼交互的能力非常弱
  • 解決方案: 采用 JNI
    特性 增強 Java 與 本地代碼交互的能力

1.3 實現步驟

  1. Java中聲明Native方法(即需要調用的本地方法)
  2. 編譯上述 Java源文件javac(得到 .class文件)
  3. 通過 javah 命令導出JNI的頭文件(.h文件)
  4. 使用 Java需要交互的本地代碼 實現在 Java中聲明的Native方法

    Java 需要與 C++ 交互,那麽就用C++實現 JavaNative方法

  5. 編譯.so庫文件
  6. 通過Java命令執行 Java程序,最終實現Java調用本地代碼

2. NDK介紹

2.1 簡介

  • 定義:Native Development Kit
    ,是 Android的一個工具開發包

    NDK是屬於 Android 的,與Java並無直接關系

  • 作用:快速開發CC++的動態庫,並自動將so和應用一起打包成 APK
    即可通過 NDKAndroid中 使用 JNI與本地代碼(如C、C++)交互
  • 應用場景:在Android的場景下 使用JNI

    Android開發的功能需要本地代碼(C/C++)實現

  • 特點

技術分享圖片

  • 額外註意

技術分享圖片

2.2 使用步驟

  1. 配置 Android NDK環境
  2. 創建 Android 項目,並與 NDK進行關聯
  3. Android 項目中聲明所需要調用的 Native方法
  4. 使用 Android需要交互的本地代碼 實現在Android中聲明的Native方法

    比如 Android 需要與 C++ 交互,那麽就用C++ 實現 JavaNative方法

  5. 通過 ndk - bulid 命令編譯產生.so庫文件
  6. 編譯 Android Studio 工程,從而實現 Android 調用本地代碼

3. NDK與JNI關系

技術分享圖片

4. 怎麽用?

  本節內容的學習是通過閱讀安卓官網的教程,本文暫且不贅述,讀者自行到官網學習,以下鏈接:https://developer.android.google.cn/studio/projects/add-native-code

技術分享圖片

淺學JNI和NDK