跟魚八學NDK開發 基於Cmake(三) 使用含有第三方動態庫的本身編譯好的.so

愛開發,愛魚八! 我是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的註冊方式致使的。通常來講咱們使用的是靜態註冊,若是像第三方那樣使用須要動態註冊。大佬回答以下:

這個向大佬提問的軟件,是大佬的知識星球,有興趣的朋友
也能夠加入,進入星球並非免費的,
這是加入的連接:t.zsxq.com/7UbA6MV
掃一下便可!(給大佬廣告了一波,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:紅色方法不要緊,不報錯

jni路徑一致

注:實際開發中大家項目路徑名不一樣,建立相同路徑的包就能夠了。
若是路徑不對你會報以下錯誤: java.lang.UnsatisfiedLinkError: No implementation found for XXXXXXXXXX
這裏給你們提供一個網上解決辦法,寫的還比如我詳細,大家能夠看看
blog.csdn.net/ouyang_peng…

6.最後在本身的MainActity中寫方法調用吧!

代碼很簡單,以下:


7.成功調用!!!是否是很6呢?

總結:經過跟魚八的NDK三步走,你應該知道

1.NDK的環境配置
	2.配置buildgradle,CMakeLists的寫法
	3.靜態註冊下的.so的使用
複製代碼

此時此刻 你必定使用了本身的.so!

有了基礎,準備下一步的NDK進階學習吧!

我是魚八,有任何問題均可在下方討論!謝謝!


附:如下三篇文章,均是基礎內容,大佬看了有話說,菜鳥看了有所獲!

跟魚八學NDK開發 基於Cmake(一) NDK環境配置

跟魚八學NDK開發 基於Cmake(二)附有第三方動態庫編寫私有的動態庫.so

跟魚八學NDK開發 基於Cmake(三) 使用本身編寫的動態庫.so

相關文章
相關標籤/搜索