愛開發,愛魚八! 我是yubaKevin!不是單身的程序猿! 主題:NDK開發 完美解析詳細開發過程,菜鳥必備!java
由於太菜,因此想寫文章學習,提高本身幫助他人!如若文章有誤,請大佬提筆賜教,不慎感激!android
隨便轉載,可是必定要附上原文連接哦,註上做者:@yubakevingit
個人github地址:github.com/YubaKevin 項目Demo在Trip-for-android裏面,記得來個star哦github
詳細參考資料:developer.android.com/studio/proj…app
本篇文章開發工具:AS 3.0.1 NDK版本 17
NDK開發基於CMakeLists
爲何我直接使用的.so失敗?
使用.so通常是在libs下新建對應ABI文件夾放置.so,而後在Buildgradle下配置一下就行了,結果我發現沒法使用。老是沒法找到對應庫
後來詢問大佬才瞭解,這是jni的註冊方式致使的。通常來講咱們使用的是靜態註冊,若是像第三方那樣使用須要動態註冊。大佬回答以下:
這個向大佬提問的軟件,是大佬的知識星球,有興趣的朋友
也能夠加入,進入星球並非免費的,
掃一下便可!(給大佬廣告了一波,emmm裏面氛圍仍是不錯的,能夠認識其餘大佬,嘿嘿嘿)
如今咱們先說明一下本身編寫的靜態註冊下的.so使用方式吧!
1、使用含有第三方動態庫的本身編譯的.so
1.新建一個項目(或者在你須要使用.so的項目中)
2.在新建項目的libs中新建對應的ABI文件夾(我這裏.so 是armeabi-v7a的)
3.將本身編譯的.so和第三方.so放入進去
4.配置app下的buildgradle
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
複製代碼
5.最重要的一步:將jni類複製過來(也能夠在寫Jni的時候將jni類的包打成jar,在依賴到項目中使用),要保證jni類的路徑和你編譯.so的路徑一致!
在編譯.so的時候,咱們的包路徑是:com.example.kevin.MyJniUtils,類名是JniUtils (參加NDK開發(二))
因此在咱們這裏要保持路徑須要建立相同路徑包,我這裏包路徑是相同的,只要複製MyJniUtils和JniUtils類就行了
複製代碼
配置完成以下圖:ps:紅色方法不要緊,不報錯
注:實際開發中大家項目路徑名不一樣,建立相同路徑的包就能夠了。
若是路徑不對你會報以下錯誤: java.lang.UnsatisfiedLinkError: No implementation found for XXXXXXXXXX
這裏給你們提供一個網上解決辦法,寫的還比如我詳細,大家能夠看看
6.最後在本身的MainActity中寫方法調用吧!
代碼很簡單,以下:
7.成功調用!!!是否是很6呢?
總結:經過跟魚八的NDK三步走,你應該知道
1.NDK的環境配置
2.配置buildgradle,CMakeLists的寫法
3.靜態註冊下的.so的使用
複製代碼
此時此刻 你必定使用了本身的.so!
有了基礎,準備下一步的NDK進階學習吧!
我是魚八,有任何問題均可在下方討論!謝謝!
附:如下三篇文章,均是基礎內容,大佬看了有話說,菜鳥看了有所獲!
跟魚八學NDK開發 基於Cmake(三) 使用本身編寫的動態庫.so