AndroidStudio3.0NDK輸出多個so庫

個人博客地址 http://dandanlove.com/

前言

去年的 Android之NDK開發(fā)初體驗 這篇文章講述NDK開發(fā)環(huán)境的搭建妒蛇,以及在AndroidStudio3.0版本之前的NKDK簡單開發(fā)米愿。這次升級到Android Studio3.1崔涂,再次嘗試NDK發(fā)現(xiàn)按照之前方法進行so生成會出現(xiàn)一些問題,寫的文章已經(jīng)不是普遍適用了。

Error: Your project contains C files but it is not using a supported native
To continue using the deprecated NDK compile for another 60 days, set   
android.deprecatedNdkCompileLease=1523451155771 in gradle.properties 

gradle.properties文件尾部添加android.useDeprecatedNdk=true出現(xiàn)第二個錯誤,在gradle.properties文件尾部添加android.deprecatedNdkCompileLease=1523451155771出現(xiàn)第一個錯誤。

AndroidStudio3.1使用CMake簡單操作

這部分相關(guān)的文章有很多换帜,我推薦一篇寫的比較詳細(xì)的博文: Android Studio3.0開發(fā)JNI流程------JNI入門級

  • 首先下載CMake,可以通過SDK-Mananger->SDK-Tools來下載CMake鹤啡。
  • 然后添加C++ Support惯驼,這個要在新建項目的時侯,選擇Include C++ Support就可以递瑰。
  • 然后項目自己創(chuàng)建后會生成Java類祟牲、cpp文件,自己編譯生成so庫直接運行項目就OK了抖部。

CMake的使用

  • 使用CMake只需要修改cpp文件和CMakeLists.txt说贝。
  • CMake生成的cpp文件位于app/src/main/cpp目錄,并且cpp文件不需要再引入java類的h文件慎颗。
  • CMakeLists.txt位于app目錄下

CMakeLists.txt

# 有關(guān)使用CMake在Android Studio的更多信息,請閱讀文檔:https://d.android.com/studio/projects/add-native-code.html

# 設(shè)置CMake的最低版本構(gòu)建本機所需庫
cmake_minimum_required(VERSION 3.4.1)

# 創(chuàng)建并命名庫乡恕,將其設(shè)置為靜態(tài)的
# 或共享,并提供其源代碼的相對路徑俯萎。
# 你可以定義多個library庫傲宜,并使用CMake來構(gòu)建。
# Gradle會自動將包共享庫關(guān)聯(lián)到你的apk程序讯屈。
# 添加庫
add_library( # 設(shè)置庫的名稱
             native-lib
             # 將庫設(shè)置為共享庫蛋哭。
             SHARED
             # 為源文件提供一個相對路徑。
             src/main/cpp/native-lib.cpp )
# (導(dǎo)入系統(tǒng)庫)搜索指定預(yù)先構(gòu)建的庫和存儲路徑變量涮母。因為CMake包括系統(tǒng)庫搜索路徑中默認(rèn)情況下,只需要指定想添加公共NDK庫的名稱谆趾,在CMake驗證庫之前存在完成構(gòu)建
find_library( # 設(shè)置path變量的名稱
              log-lib
              # 在CMake定位前指定的NDK庫名稱
              log )
# (鏈接目標(biāo)庫)指定庫CMake應(yīng)該鏈接到目標(biāo)庫中,可以鏈接多個庫叛本,比如定義庫沪蓬,構(gòu)建腳本,預(yù)先構(gòu)建的第三方庫或者系統(tǒng)庫
target_link_libraries( # 指定目標(biāo)庫
                       native-lib
                       # 目標(biāo)庫到日志庫的鏈接 包含在NDK
                       ${log-lib} )

添加native方法

添加native方法.png

Alt+Enter快捷鍵自動創(chuàng)建C++方法来候,不需要頭文件跷叉。

生成多個so文件

  • java層多次加載so庫
// Used to load the 'native-lib' library on application startup.
static {
    System.loadLibrary("native-lib");
}
public class JNIUitls {
    static {
        System.loadLibrary("jnilib");
    }

    public static native String getNameString();

    public native int getNumber();
}
  • 在cpp目錄下創(chuàng)建對應(yīng)的.cpp文件
  • 在CmakeLists.txt文件中對應(yīng)添加so庫和鏈接so庫
#添加庫
add_library( # Sets the name of the library.
             native-lib
             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp
             )
#添加庫
add_library(jnilib SHARED src/main/cpp/jnilib.cpp)

#導(dǎo)入系統(tǒng)庫
find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

#鏈接目標(biāo)庫
target_link_libraries( # Specifies the target library.
                       native-lib
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
#鏈接目標(biāo)庫
target_link_libraries(jnilib ${log-lib})
so.png

項目地址:[JNIApplication]
(https://github.com/stven0king/JNIApplication.git)

文章到這里就全部講述完啦,若有其他需要交流的可以留言哦营搅!云挟!

想閱讀作者的更多文章,可以查看我 個人博客 和公共號:

振興書城

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末转质,一起剝皮案震驚了整個濱河市园欣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌休蟹,老刑警劉巖沸枯,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赂弓,居然都是意外死亡绑榴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門盈魁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翔怎,“玉大人,你說我怎么就攤上這事杨耙⌒栈螅” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵按脚,是天一觀的道長于毙。 經(jīng)常有香客問我,道長辅搬,這世上最難降的妖魔是什么唯沮? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮堪遂,結(jié)果婚禮上介蛉,老公的妹妹穿的比我還像新娘。我一直安慰自己溶褪,他們只是感情好币旧,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猿妈,像睡著了一般吹菱。 火紅的嫁衣襯著肌膚如雪巍虫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天鳍刷,我揣著相機與錄音占遥,去河邊找鬼。 笑死输瓜,一個胖子當(dāng)著我的面吹牛瓦胎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尤揣,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼搔啊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了北戏?” 一聲冷哼從身側(cè)響起负芋,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎最欠,沒想到半個月后示罗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡芝硬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年蚜点,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拌阴。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡绍绘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迟赃,到底是詐尸還是另有隱情陪拘,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布纤壁,位于F島的核電站左刽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏酌媒。R本人自食惡果不足惜欠痴,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秒咨。 院中可真熱鬧喇辽,春花似錦、人聲如沸雨席。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抽米,卻和暖如春特占,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缨硝。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工摩钙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罢低,地道東北人查辩。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像网持,于是被迫代替她去往敵國和親宜岛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容