日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 开源so库_NDK使用之引用.so开源库

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 开源so库_NDK使用之引用.so开源库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇中總結了直接引用c/c++源碼,但是當源碼的量很大時,我們無法直接引用源碼,因為量太大了,編譯一次需要很長的時間,所以這時候我們就需要先預編譯出.so包或者.a包,然后再引用,這時候編譯就非常快了。

上一篇中已經介紹了如何將項目配置為ndk項目,這篇就不再贅述了,下面就以FFMPeg為例,直接進入正題。

編譯FFMPeg

這也不是本文的重點,我在之前的文章中也整理過如何編譯FFMPeg,其實也整理過如何集成FFMPeg,但是本篇的方式更加簡單直接一點。

添加so包

這里我編譯出來的是armeabi-v7a架構下的so包,所以把編譯好的so包放入到lib/armeabi-v7a目錄下,然后在該module的build.gradle文件的android->defaultConfig下邊添加:

externalNativeBuild {

cmake {

cppFlags ""

abiFilters "armeabi-v7a"

}

}

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}

然后再在CMakeLists文件下,添加

set(FF ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${FF}")

第一句的意思是把lib/armeabi-v7a下的文件列表賦值給變量FF

第二句的意思添加動態鏈接庫到cxx_flags上,編譯時編譯器就能找到該目錄

注意:因為在上文配置的abiFilters只有armeabi-v7a,所以FF變量就是lib/armeabi-v7a下的文件列表

添加頭文件

把編譯得到的include文件整個文件夾拷貝到cpp目錄下,然后使用

include_directories(include)

就能直接把頭文件引用進來了

添加一個庫

例如這里添加一個叫player_util的庫,包含了cpp下所有的c++源碼:

file(GLOB SOURCES *.cpp)

add_library(

player_util

SHARED

${SOURCES})

將FFMPeg庫鏈接到player_util上

最后還需要把之前添加進來的so庫連接到我們創建的這個player_util庫上,這樣我們才能引用到,代碼如下:

target_link_libraries(player_util

avformat avcodec avutil swresample swscale

log z OpenSLES android)

注意第二行FFMPeg這幾個庫的順序,因為前邊的引用了后邊的庫,所以需要把引用的庫按照這個順序連接進來才行,第三行的事Android內部的so庫,因為要視頻的解碼和渲染的話就需要用到。

至此引用so庫的方式也介紹完了。

總結

以上是生活随笔為你收集整理的java 开源so库_NDK使用之引用.so开源库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。