JNI和NDK

做者:十歲的小男孩java

QQ:929994365android

心之安處便是吾鄉c++

前言ide

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

http://www.javashuo.com/article/p-slffgxgu-gc.html學習

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

http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/google

目錄spa

1. JNI介紹

1.1 簡介

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

    即在 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

 

相關文章
相關標籤/搜索