NDK環境搭建探究一

最近接收了一個手機盾項目,主要功能是生成非對稱密鑰並對數據進行簽名,看了下代碼,在移動端生成了私鑰,爲了安全生成私鑰的方法是用c++寫的,然後打成了so文件,下面就根據他這個流程來玩一玩。

安卓開發大部分是sdk開發,這次我們來玩下ndk。

首先我們先搞下環境,最簡單的方式在SDK Manager中勾選如下圖所示,或者自己去官網下載ndk,然後配置環境變量

勾選下載默認是下載到sdk目錄下的ndk-bundle,如下:

找個這個路徑然後在Project Structure中設置下ndk路徑,如下:

設置成功之後在local.properties中會自動加上ndk的路徑

下面我們就開始新建demo了,Include C++ support 必須勾選上,我們一會是要寫c++代碼滴,其他的一路next即可

忘記說了,本次實驗AS版本3.1.2 gradle版本gradle-4.4-all.zip,buildToolsVersion '29.0.3',本來as更新到最新版的,用不習慣又換回來了。。。

我們先來瞅一眼MaiinActivity的代碼如下:

首先加載native-lib庫,然後在頁面創建的時候調用了stringFormJNI方法,然後將返回值設置到了textView中,在看下c++中這個方法做了什麼操作

看圖找規律吧,命名也是有規律可循的,最終返回了一個字符串,運行下看下,手機頁面顯示的確實是Hello from C++,至於C文件怎麼寫這裏就不說了,大家自行研究吧。

既然運行成功了那說明我們的C/C++代碼沒問題,我們的目的是將這部分代碼編譯成破解難度高的so文件,下面繼續看下怎麼整。

首先隨便搞幾個c文件,文件名如下:

然後在CMakeLists.txt中編寫配置信息,生成的so文件會自動加上lib前綴

到這裏so文件就生成了,至於怎麼在項目中引入,相信大家都會了。

最後在記錄此過程中困擾了好久的一個問題,在最前面大家ndk環境的時候我們勾選了CMake的全部選項,網上的資源基本上都是這樣說的,若是出現下圖所示的錯誤,不妨去掉一個版本試試,說不定會有意想不到的結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章