Android NDK系列(一)-AS使用javah生成so文件

NDK,全稱Native Development Kit。當jdk無法滿足開發或者對效率要求比較高,比如音視頻處理,這時候使用NDK就比較合適,廢話不多說。直接開始擼、

1、創建一個工程項目

這裡寫圖片描述

2、創建一個library module,便於之後將so文件導入其他工程使用。當然導入其他工程可以隻導入so文件,通過system.loadlibrary導入庫。也可以將so文件和對應java文件封裝成jar包導入,這樣就可以直接調用。一般我們導入三方都是使用第二種方式,不過在做ndk開發的時候,第一種也是常見的。

這裡寫圖片描述

3、配置ndk開發環境

首先生成so文件就需要AS有ndk的支持。安裝ndk可以自行下載ndk插件,也可以通過AS下載安裝。我的電腦使用AS自行下載的ndk-bundle,總是會出問題,這裡我就給出一個百度雲下載ndk的地址,我用的就是這個成功的。不過AS下載我也給出示例。

這裡寫圖片描述

如圖操作

這裡寫圖片描述

或者是使用Android SDK 下載NDK。

這裡寫圖片描述

這個是下載系統提供的ndk-bundle。我雖然下載瞭,但是我的AS無法使用,好吧, 我很無語,於是去官網下載瞭,

下載成功後,一般放在sdk目錄下,當然也可以自己隨便下哪。最後在Android sdk location修改路徑。

這裡寫圖片描述

嗯,到這裡可能差不多瞭,不過還是要檢查一下local.properties文件中是否已經生成ndk.dir路徑。

這裡寫圖片描述

這裡生成瞭ndk.dir就沒問題瞭。

那麼繼續配置環境,需要在gradle.properties設置android.useDeprecatedNdk = true。

這裡寫圖片描述

嗯,到這裡就差不多瞭。

4、編寫java文件native方法,調用C邏輯。這裡調用System.loadLibrary(“nativeUtil”);,nativeUtil是so文件庫的名稱。

這裡寫圖片描述

5、使用javah生成class文件,然後生成so文件。首先生成一個jni文件夾。

這裡寫圖片描述

之後在使用javah生成class文件,使用cmd可以,也可以使用AS提供的Terminal。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡生成一個h頭文件,將h頭文件放在生成的jni文件夾下(在project模式下),在Android模式下放在cpp下。

6.在cpp文件下(project模式下,在Android模式下是cpp文件夾)創建一個c文件,取名隨意。把剛剛生成的h文件引入C文件。同時將h文件生成的方法copy過來。然後寫成方法,返回一個jstring類型。使用env生成一個jstring(JNI方法,這裡我給出一個我學習使用的Jni文檔,有什麼需求自己查文檔)鏈接:https://pan.baidu.com/s/1jI87XOU 密碼:dy83

這裡寫圖片描述

7、生成so文件,並調用so的方法。首先將library依賴到app。然後調用library的方法。

這裡寫圖片描述

當然最後不要忘瞭配置library的gradle,設置生成ndk的名稱,以及需要生成的平臺。

這裡寫圖片描述

然後就是調用瞭,最簡單的一步。

這裡寫圖片描述

好啦,已經完成瞭配置和文件的書寫,點擊運行就會生成so文件,並且能夠調用方法,獲得返回值。

這裡寫圖片描述

在看看生成的so文件。

這裡寫圖片描述

好啦,使用javah生成so文件的步驟就是這樣瞭。按照這個步驟做就能成功,ndk是一條進階之路,我也看瞭網上很多的博客和官網資料還有視頻教學,才慢慢入門,希望大傢不要放棄,入門之後就是一片光明。還有一種方式AS Cmake,我會在下篇ndk進行介紹。覺得有用的給個贊,謝謝~

You May Also Like