国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

利用android studio 生成 JNI需要的動態(tài)庫so文件 圖文詳解

這篇具有很好參考價值的文章主要介紹了利用android studio 生成 JNI需要的動態(tài)庫so文件 圖文詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、環(huán)境搭建

1.1 Android studio2021.2.1安裝

到官網(wǎng)下載,此處不再陳述

1.2 JNI安裝

JNI 是JDK里的內(nèi)容,電腦上正確安裝并配置JDK即可。

1.3 NDK安裝

直接在Android studio下載(File---->Settings)

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

1.4 編譯工具

工具一:AndroidStudio下載安裝cmake(調(diào)試Native時會使用到LLDB,請一同勾選下載安裝)

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

工具二:用NDK的腳本工具使用ndk-build

二、Native C++項目

2.1 創(chuàng)建項目

新建項目,選擇Native C++,如下圖所示:

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

2. 2 創(chuàng)建項目后默認的示例代碼

?新建的項目,默認有完整的native示例代碼、cmake的配置

如下所示:

(1)jave代碼

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(2)c++代碼

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(3)cmake的配置文件CMakeLists

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(4) 在app目錄下的build.gradle配置android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?(5)編譯后生成的so文件路徑

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(6)運行安裝apk的頁面顯示c++方法里面的內(nèi)容

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

三、cmake的應(yīng)用

創(chuàng)建一個Native C++項目繼續(xù)一下操作。

?3.1 NDK環(huán)境檢查(以win10為例)

(1)給NDK配置環(huán)境變量。

找到NDK在本地的路徑

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?把路徑配置到環(huán)境變量中

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?(2)給項目配置NDK

File --> Project Structure --> SDK Location,如下圖所示?

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

注意:若選擇不了NDK路徑,直接在local.properties設(shè)置NDK路徑,效果是一樣的

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?3.2 C/C++功能實現(xiàn)

在創(chuàng)建工程后,默認有個寫C++代碼文件native-lib.cpp,在此文件中寫的C++方法可在java中調(diào)用,整個效果如上面的“二? ——> (6)”

3.3 cmake指定輸出so庫文件的輸出路徑

(1)在CMakeLists.txt文件中配置文件的輸出路徑

# 配置庫生成路徑
# CMAKE_CURRENT_SOURCE_DIR是指 cmake庫的源路徑,通常是build/.../cmake/
# /../jniLibs/是指與CMakeList.txt所在目錄的同級目錄:jniLibs (如果沒有會新建)
# ANDROID_ABI 生成庫文件時,采用gradle配置的ABI策略(即:生成哪些平臺對應(yīng)的庫文件)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(2)在app的build.gradle中配置

sourceSets {
        main {
            jniLibs.srcDirs = ['jniLibs']//指定lib庫目錄
        }
    }

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(3)點擊狀態(tài)欄的Build ——> Rebuild Project

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(4) 查看so庫文件的輸出結(jié)果

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?注意:在CMakeLists.txt文件中配置文件的輸出路徑配置了CMAKE_CURRENT_SOURCE_DIR,并非表示編譯時直接將so生成在該目錄中,實際編譯時,so文件仍然是 先生成在build/.../cmake/中,然后再拷貝到目標目錄中的。

3.4 生成指定CPU平臺對應(yīng)的so庫文件

在app下的build.gradle文件下配置,兩種方式都可行,配置后Rebuild Project看最終的運行結(jié)果。如:我只想僅生成CPU是arm64-v8a的so文件。

方式1:cmake中設(shè)置abiFilters?

abiFilters "arm64-v8a"

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

方式二:?在ndk中設(shè)置abiFilters

ndk {
    abiFilters "arm64-v8a"
}

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?四、ndk-build的應(yīng)用

創(chuàng)建一個Native C++項目,項目名稱為jniNdkBuild繼續(xù)以下操作

4.1 檢查是否配置了NDK配置環(huán)境變量

打開一個cmd窗口,輸入命令"ndk-build",出現(xiàn)下圖所示,則表示ndk環(huán)境變量配置成功

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

未配置的可參照上面的“三? 3.1”

4.2 C/C++功能的實現(xiàn)

(1)在app的main目錄下,新建與cpp同級的文件夾jni

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(2)拷貝 cpp文件夾下的C++代碼文件native-lib.cpp到j(luò)ni文件下,并重新命名為ndkbuild.cpp,主要是為了跟cmake區(qū)分開庫文件名稱,在MainActivity類中,需要把加載的庫名改成ndkbuild

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?(3)調(diào)整ndkbuild.cpp實現(xiàn)方法的文本為“Hello!? I am from C++ ndk-build”,主要是為了與cmake的內(nèi)容區(qū)分開。

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?(4)在jni目錄下新建Android.mk文件,并配置以下內(nèi)容

#表示Android.mk所在目錄
LOCAL_PATH := $(call my-dir)

#設(shè)置庫文件的輸入目錄
#輸出目錄 ../jniLibs/
#源目錄 $(TARGET_ARCH_ABI)
NDK_APP_DST_DIR=../jniLibs/$(TARGET_ARCH_ABI)

#CLEAR_VARS變量指向特殊 GNU Makefile,用于清除部分LOCAL_變量
include $(CLEAR_VARS)

#模塊名稱
LOCAL_MODULE    := ndkbuild
#構(gòu)建系統(tǒng)用于生成模塊的源文件列表
LOCAL_SRC_FILES := ndkbuild.cpp

#BUILD_SHARED_LIBRARY 表示.so動態(tài)庫
#BUILD_STATIC_LIBRARY 表示.a靜態(tài)庫
include $(BUILD_SHARED_LIBRARY)

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?(5)在app目錄下,build.gradle的配置,配置完成后rebuild Project,即可生成對應(yīng)庫文件

在android里面配置

//定義ndkBuild默認配置屬性
externalNativeBuild {
    ndkBuild {
        cppFlags ""
    }
 }
//定義ndkBuild對應(yīng)的Android.mk路徑(重要)
externalNativeBuild {
    ndkBuild{
        path file("src/main/jni/Android.mk")
    }
}

配置后如下圖所示:

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

(6)重新編譯(Rebuild Project),查看so庫文件的輸出效果

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?4.3 生成指定CPU平臺對應(yīng)的so庫文件

配置指定CPU類型輸出so庫文件,可有兩種方式實現(xiàn)。例如:我只想生成arm64-v8a。

注意:由于創(chuàng)建的項目默認是cmake配置,需把cmake的配置刪除,換成ndkbuild

方式一:ndkBuild 中設(shè)置abiFilters

//定義ndkBuild默認配置屬性
externalNativeBuild {
    ndkBuild {
        cppFlags ""
        abiFilters "arm64-v8a"
    }
}

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

方式二:?在ndk中設(shè)置abiFilters

ndk {
    // 生成指定CPU平臺對應(yīng)的so庫文件
    abiFilters "arm64-v8a"
 }

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?4.4 查看項目運行安裝apk頁面

(1)用ndkbuild編譯方式,則cmake相關(guān)文件可以刪除

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

?(2)運行安裝apk,頁面顯示native的文本如下圖所示:

android studio 生成so文件,ndk-build,cmake,jni,ndk,so庫文件

注意:如果直接在AS的Terminal或則cmd窗口執(zhí)行了ndk-build命令,則不執(zhí)行g(shù)radle的配置,只會根據(jù)Android.mk進行編譯,編譯生成的CPU的so庫文件是包括所有平臺的。此文章不再演示用命令生成so庫文件,感興趣的可自行百度。

以上demo的下載地址:

https://download.csdn.net/download/zaq977684/87791268文章來源地址http://www.zghlxwxcb.cn/news/detail-704463.html

到了這里,關(guān)于利用android studio 生成 JNI需要的動態(tài)庫so文件 圖文詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JNI小記1 -- VS生成so給AS調(diào)用

    JNI小記1 -- VS生成so給AS調(diào)用

    NDK 下載 | Android NDK | Android Developers (google.cn) 需要提的是,直到本文撰寫的時間,我在這個頁面下的NDK是只有x86-64平臺的。而我測試時確實只有x64編譯成功。 在visual studio里新建一個安卓共享庫工程: 剛開始的界面應(yīng)該是這樣的: 而后在: 工具-選項-跨平臺 選上我們的ndk目錄(

    2023年04月15日
    瀏覽(19)
  • Android中的SDK以及利用Android Studio生成aar

    Android中的SDK以及利用Android Studio生成aar

    廣義上的SDK: 指的是為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應(yīng)用程序時所使用的開發(fā)工具的集合。 比如你在編輯器里敲代碼的時候它會自動補全代碼,自動錯誤檢查,你點一下Run,它會調(diào)用編譯器來自動編譯,編譯完它會調(diào)用iPhone的模擬器來運行,這就是

    2024年02月12日
    瀏覽(30)
  • NDK編譯C++源碼生成Android平臺so文件(opencv_android)

    NDK編譯C++源碼生成Android平臺so文件(opencv_android)

    ?1.準備CPP文件 ?編寫CMakeLists.txt 編寫 mk文件 ? android-8 is unsupported. Using minimum supported version android-16 ?APP_PLATFORM android-16 is higher than android:minSdkVersion 1 in ./AndroidManifest.xml 修改Application.mk中的APP_PLATFORM為 android-21? builg.gradle添加原生編譯路徑 ? ? 出現(xiàn)gnustl_static不支持錯誤 ?修改

    2024年02月10日
    瀏覽(24)
  • android studio JNI開發(fā)

    android studio JNI開發(fā)

    一、JNI的作用: 1.使Java與本地其他類型語言(C、C++)交互; 2.在Java代碼調(diào)用C、C++等語言的代碼?或者 C、C++調(diào)用Java代碼。 由于JAVA具有跨平臺的特點,所以JAVA與本地代碼的交互能力弱,采用JNI特性可以增強JAVA與本地代碼的交互能力。 二、AndroidStudion中JNI的使用方法: 1、在

    2024年02月13日
    瀏覽(29)
  • OpenCV開發(fā)之——人臉識別庫生成so文件(1),通宵都要看完這個Android關(guān)鍵技術(shù)點

    OpenCV開發(fā)之——人臉識別庫生成so文件(1),通宵都要看完這個Android關(guān)鍵技術(shù)點

    ifneq (“”,“$(wildcard $(OPENCV_ANDROID_SDK)/OpenCV.mk)”) include ${OPENCV_ANDROID_SDK}/OpenCV.mk else include ${OPENCV_ANDROID_SDK}/sdk/native/jni/OpenCV.mk endif else include …/…/sdk/native/jni/OpenCV.mk endif LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_LDLIBS += -llog -ldl LOCAL_MODULE := detection_b

    2024年04月16日
    瀏覽(33)
  • ffmpeg-android studio創(chuàng)建jni項目

    ffmpeg-android studio創(chuàng)建jni項目

    android - defaultConfig -externalNativeBuild - cmake 配置c++使用標準 android - externalNativeBuild - cmake 1 、配置cmake文件路徑 2、配置cmake的版本 cmake_minimum_required cmake最低版本要求 project 設(shè)置項目名稱 add_library 添加庫并設(shè)置庫的源文件 1、 Normal Libraries name:庫名稱 STATIC|SHARED|MODULE:庫類型(靜態(tài)

    2024年02月09日
    瀏覽(22)
  • Android Studio中使用cmake開發(fā)JNI實戰(zhàn)

    Android Studio中使用cmake開發(fā)JNI實戰(zhàn)

    JNI學(xué)習(xí)大綱 一、JNI編程入門 二、Android Studio中使用cmake開發(fā)JNI實戰(zhàn) 第一章節(jié)我們介紹了JNI的開發(fā)步驟,那這一章節(jié)我們就開始在Android Studio中實戰(zhàn)一下吧,Let\\\'s Start。 AS中菜單欄選擇ToolsSDK Manager 在Android SDK中選擇SDK Tools,安裝CMake和NDK。 在項目工程下的src/main創(chuàng)建cpp目錄,編

    2024年02月14日
    瀏覽(25)
  • 安卓Android Studio JNI開發(fā)問題澄清與匯總

    AndroidBitmap_lockPixels和AndroidBitmap_unlockPixels的底層邏輯就是在處理bitmap中的數(shù)據(jù)的時候,把內(nèi)存鎖定,防止像素緩存被改變導(dǎo)致數(shù)據(jù)變化。 這篇文章有具體介紹相關(guān)的機制 下面是Bitmap操作的示例代碼: Java端代碼: 使用時,可以直接調(diào)用NativeUtils中的processImage方法即可。當(dāng)然,

    2023年04月09日
    瀏覽(17)
  • Android Studio生成.jks文件

    Android Studio生成.jks文件

    字面意思可以理解為java的密鑰庫,是一個用來存放密鑰和證書的倉庫。而keytool就是密鑰和證書的管理工具,它把key(密鑰)和certificate(證書)存放在一個叫keystore的文件中。具體內(nèi)容可以參考JKS_密鑰對生成與讀取方法。 1、打開android studio軟件,點擊上方Build - Generate Signe

    2024年02月02日
    瀏覽(19)
  • Android so庫開發(fā)——Android Studio調(diào)用so庫(二)

    ??????? 在 Android Studio生成自己的so庫 中已經(jīng)創(chuàng)建了自己的so庫,這是一個JNI規(guī)范的so庫,可以直接將so庫放到libs中,并按照上面文章中MainActivity中的調(diào)用方法使用。 1、build.gradle(app)配置 2、加載so庫中方法 ??????? 在Sudio中方法名雖然顯示紅色,但不影響使用。 3、

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包