NDK開發_編譯的cpp引用到 其它so, Android.mk 的寫法

2021-03-02 小馳筆記

如果我們編譯的so文件需要引用到其它的so文件,那我們來看下這時候的Android.mk 文件如何寫。

一、不需要ndk編譯 .cpp,直接是 so文件

切到 Project 視圖,在java同級目錄下 新建 jniLibs文件夾,再根據平臺需要,在jniLibs目錄下建 armeabi-v7/x86 ... 文件夾,

下面的截圖 根據平臺需要建的是armeabi-v7a文件夾,然後將相應的 so文件複製到該目錄下即可。編譯運行工程的後,相應的so就打包進apk了。

二、需要ndk 編譯.cpp, 編譯的 .cpp 需要引用外部的 .so

如下圖所示,ndk 編譯 util.cpp,需要引用到 libyuv2rgb.so ,我們看下 Android.mk中的內容

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := preutil
LOCAL_SRC_FILES := libyuv2rgb.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := util
LOCAL_SRC_FILES := util.cpp \
LOCAL_LDLIBS := -llog -landroid
LOCAL_SHARED_LIBRARIES := preutil
include $(BUILD_SHARED_LIBRARY)

編譯生成的 so 在 app/build/intermediates/ndk/ 目錄下。

推薦閱讀:

   NDK開發_cwin配置+編程簡單步驟

   NDK開發_AndroidStudio中創建和編譯ndk流程

相關焦點

  • Android NDK 入門與實踐之 CMake
    本部分介紹了您應包含到構建腳本中的一些基本命令,用於在創建原生庫時指示 CMake 應使用哪些源文件。註:如果您的項目使用 ndk-build,則不需要創建 CMake 構建腳本。提供一個指向您的 Android.mk 文件的路徑,將 Gradle 關聯到您的原生庫。
  • Hook Android C代碼(Cydia Substrate)
    5.編譯、調試運行、安裝程序在jni目錄下,執行ndk-build進行庫文件的編譯3.編寫C++程序在項目目錄下,創建jni目錄並新建***.cy.cpp文件,以最後編譯生成.cy.so文件才能被Substrate框架所連結到。代碼如下:
  • Android.mk 使用詳解
    簡介二、Android.mk 的基本格式三、Android.mk 深入學習一四、 Android.mk 深入學習二五、 Android.mk 深入學習三六、 Android.mk 判斷語句一 、Android.mk 簡介Android.mk 是Android 提供的一種makefile 文件,注意用來編譯生成(exe,so,a,jar,apk)
  • android平臺arm指令學習和調試
    */一、Ndk下內聯彙編跟vc下一樣,ndk編譯環境下也能使用內聯彙編,如下:本文引用地址:http://www.eepw.com.cn/article/201611/317575.htmincludeintmy_thumb(intdummy)
  • Android-HIDL實例解析
    這使得框架部分可以通過 OTA 方式更新,同時不需要重新編譯 HAL。上圖是Framework和HAL的發展圖示,之前,具體是到什麼時候,我沒有去考證,如果知道的同學可以留個言說下,Framework直接調用 HAL,這樣導致一個問題,如果HAL增加了什麼接口,就需要重新整個都編譯系統。
  • Android系統編譯指南
    git checkout 分支名表示:切換到某個分支。LINUX/android$四、編譯Android源碼Android 源碼編譯,每個項目由於腳本各不相同,編譯的命令 有時候也會有說差異。如果當前正在所要編譯模塊的地方(需要有android.mk文件,才可以進行),請使用 mm,否則使用mmm。
  • Cocos2d-x學習之創建Android工程和編譯
    安裝好,相應的環境之後,我們便可以開始創建cocos2d-x 的android 工程了本文引用地址:http://www.eepw.com.cn/article/201610/305430.htm進入cocs2d-x目錄,用文本編輯器打開create-android-project.bat(在windows 7上如果正常雙擊,可能創建時有些文件的權限不足,導致創建工程不成
  • Android編譯本地C++程序方法
    在Android平臺上程序以Java形式運行在Dalvik模擬器上,但Android作為一個Linux內核系統完全可以執行Navtive C++程序,主要的步驟如下:本文引用地址:http://www.eepw.com.cn
  • Android NDK 實戰入門指南
    本場 Chat 內容提綱什麼是 NDK為什麼要用 NDKNDK 編譯出來的目標類型NDK 下載寫個 hello JNI 可執行文件文件解析寫個 hello JNI 調用 soAndroid Studio 寫個 hello JNI
  • NDK undefined reference to 錯誤
    前幾天在Android NDK下用C++編寫程序時,出現了一個「NDK undefined reference to」的編譯錯誤。
  • 迅為開發板安卓JNI開發實戰教程使用編譯好的 so 庫
    轉自迅為開發板安卓JNI開發指南硬體平臺:迅為iTOP-412開發板B站搜索:北京迅為,免費觀看同步視頻教程:上一小節我們已經編譯了 so 庫,那麼我們或者其他人拿到這個 so 後要怎麼使用呢so 庫放進去。
  • 音視頻開發之旅(17) JNI與NDK的學習和使用
    二、Java和Native交互流程JNI在Java類中通過native關鍵字聲明Native方法javac命令編譯Java類得到class文件通過javah命令(javah -jni class名稱)導出JNI的頭文件(.h文件)實現native方法編譯生成動態庫(.so文件)實現Java和C、CPP的相互調用
  • Android學習之Build環境初探
    這裡略過對android在手機上的文件系統框架的闡述(google或者baidu都能幫助你找到對應的信息),主要看google是如何把生成合適的rootfs的工作整合到它的build體系當中,同時,會順帶看一下CyanogenMod中對應各種機型的build機制。
  • Android圖片壓縮的幾種方案
    LibJpeg1、從Github上可以下載已經寫好編譯腳本的項目:https://github.com/Zelex/libjpeg-turbo-android ,並將其上傳到Linux伺服器的某個目錄2、授予整個目錄權限chmod 777 -R libjpeg-turbo-android-master3、進入libjpeg目錄,使用下面指令進行編譯,前提是你的伺服器已經搭建了ndk-build
  • 開發總結:Android反編譯方法的總結
    【IT168技術】對於軟體開發人員來說,保護代碼安全也是比較重要的因素之一,不過目前來說Google Android平臺選擇了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其實就是一個MIME為ZIP的壓縮包,我們修改ZIP後綴名方式可以看到內部的文件結構,類似Sun JavaMe的Jar
  • Android so(ELF) 文件解析
    ,如 /lib/glibc-2.5.so,Windows 的 DLL核心轉儲文件(Core Dump File)當進程意外終止時,系統可以將該進程的地址空間的內容及終止時的一些其他信息轉儲到核心轉儲文件Linux 下的 Core DumpAndroid 是基於 Linux 內核開發的作業系統,所以 Android 平臺上的可執行文件格式和 Unix/Linux 是一致的。
  • 多體微擾理論系列教程:BerkeleyGW軟體編譯
    這個文件就是arch.mk,具體說明在源碼的config/README裡面,config目錄下面還有各種範例。修改完arch.mk後,輸入make all-flavors即可編譯BerkeleyGW。下面給出用GNU編譯器編譯BerkeleyGW 2.0.0的arch.mk(GCC+MKL+OpenMPI):COMPFLAG = -DGNUPARAFLAG = -DMPIMATHFLAG = -DUSESCALAPACK -DUSEFFTW3 DEBUGFLAG = FCPP = cpp -
  • 摘要:編寫第一個NDK,使用C語言進行輸出。
    新建一個android工程JniTest。右鍵項目->Android tools->Add Native Support...,填寫生成庫的名稱,會在項目目錄下生成jni文件夾和obj文件夾。編寫一個java類NativeUtils,其中包含多個native修飾的方法。生成native方法所對應的.h頭文件。