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

編寫Android.mk / Android.bp 引用三方 jar 包,aar包,so 庫

這篇具有很好參考價值的文章主要介紹了編寫Android.mk / Android.bp 引用三方 jar 包,aar包,so 庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一.前言

? ? ? ? 在Android10之后,所有項目工程中,官方推薦使用Android.bp去編譯構(gòu)建,以前使用Android.mk構(gòu)建的項目隨著版本迭代升級,慢慢需要變更為Android.bp, 兩者的語法都需要去了解并熟練使用。 筆者之前寫過Android.mk的語句介紹,里面有介紹每句代碼的含義編寫Android.mk把Android studio項目編譯到AOSP源碼中

后來也總結(jié)過 Android.bp基本用法:?Android.bp 語法和使用? ?比較基礎(chǔ),也是在項目中運(yùn)用到了就記錄下來。

本篇文章寫的是在項目工程中編寫Android.mk和 Android.bp 文件,引入第三方的jar包,aar包, so庫,引入特許白名單權(quán)限xml文件。

二. Android.mk 編寫

1. 引入jar包

比如,我們當(dāng)前目錄下的 libs 有okhttp-3.4.11.jar 包,我想引用它

需要兩個步驟

第一步, 聲明我們 jar 包所在的目錄,我的是AndroidStudio工程目錄,所以jar包的路徑是app/libs/okhttp-3.4.11.jar

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := okhttp3:app/libs/okhttp-3.4.11.jar

這行代碼的意思大概可以理解成這樣,聲明一個變量 okhttp3,它的 value 是 app/libs/okhttp-3.4.11.jar

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := okhttp3:app/libs/okhttp-3.4.11.jar \
                                        okio:app/libs/okio-1.9.0.jar
include $(BUILD_MULTI_PREBUILT)  #這里是多個jar包預(yù)編譯

第二步. 引用我們聲明 jar 包的變量 引用我們上面聲明的 okhttp3

LOCAL_STATIC_JAVA_LIBRARIES := okhttp3

LOCAL_STATIC_JAVA_LIBRARIES := okhttp3 \
                               okio

2. 引入aar包

第一步:先聲明 aar 包的位置

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
   lottie-2.8.0:app/libs/lottie-2.8.0.aar
include $(BUILD_MULTI_PREBUILT)

第二步:引用聲明的 aar 變量?lottie-2.8.0

LOCAL_STATIC_JAVA_AAR_LIBRARIES := lottie-2.8.0

第三步:添加引用的 aar 包資源

LOCAL_AAPT_FLAGS := \
  --auto-add-overlay \
  --extra-packages com.airbnb.lottie

3. 引入so庫

假如我們當(dāng)前目錄下的 lib 目錄下 有 armeabi-v7a,arm64-v8a 目錄,里面分別有 libaes-jni.so, 如果我們在編譯 apk 的時候,想把這些 so 庫 打包進(jìn)去,在 mk 文件中要怎樣配置呢?

android.mk 引入so庫,Android 知識儲備,Android.mk,Android.bp,引入三方j(luò)ar和aar包

第一步,直接在 mk 文件中配置以下內(nèi)容,預(yù)編譯處理

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
#后綴
LOCAL_MODULE_SUFFIX := .so
#模塊名
LOCAL_MODULE := libaes-jni
#編譯到system/libs/目錄下
LOCAL_MODULE_CLASS := SHARED_LIBRARIES

#另外一種寫法,根據(jù)平臺arm  arm64 去選擇編譯對應(yīng)的so文件
#ifeq ($(strip $(TARGET_ARCH)),arm64)
#LOCAL_SRC_FILES :=app/libs/arm64-v8a/libaes-jni.so
#else ifeq ($(strip $(TARGET_ARCH)),arm)
#LOCAL_SRC_FILES :=app/libs/armeabi-v7a/libaes-jni.so
#endif

#arm arm64都編譯
LOCAL_SRC_FILES_arm :=app/libs/armeabi-v7a/libaes-jni.so
LOCAL_SRC_FILES_arm64 :=app/libs/arm64-v8a/libaes-jni.so
LOCAL_MODULE_TARGET_ARCHS:= arm arm64
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)

第二步: 引用目標(biāo)?so 庫

在include $(CLEAR_VARS) 和 include $(BUILD_PACKAGE) 之間添加以下內(nèi)容

LOCAL_REQUIRED_MODULES := libaes-jni


#如果你寫這句話 把這個libaes-jni.so 同時也打包 放在out/target/產(chǎn)品名路徑/你的apk具體路徑下/lib/#目錄中
#LOCAL_JNI_SHARED_LIBRARIES := libaes-jni

備注:

LOCAL_MODULE_CLASS:(prebuilt)標(biāo)識了所編譯模塊最后放置的位置,如果不指定,不會放到系統(tǒng)中。
LOCAL_MODULE_CLASS := ETC 放于system/etc目錄
LOCAL_MODULE_CLASS := EXECUTABLES 放于/system/bin目錄
LOCAL_MODULE_CLASS := SHARED_LIBRARIES 放在/system/lib目錄
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_CLASS := APPS 放在/system/app目錄
?

LOCAL_JNI_SHARED_LIBRARIES變量主要是用在JNI的編譯中,如果你要在你的Java代碼中引用JNI中的共享庫*.so,此變量就是共享庫的名字。
那么你要注意的一點是:在你的Project根目錄下的Android.mk中要定義此變量用來引用你要使用的JNI中的共享庫*.so? 定義了要包含的so庫文件的名字,如果程序沒有采用jni,就不需要


LOCAL_JNI_SHARED_LIBRARIES := libxxx? ? 這樣在編譯的時候,NDK自動會把這個libxxx打包進(jìn)apk; 放在out/target/產(chǎn)品名路徑/你的apk具體路徑下/lib/目錄中

LOCAL_REQUIRED_MODULES?指定模塊運(yùn)行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)

4. 引入特許白名單權(quán)限xml

com.test.mtk.xml 內(nèi)容:

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <privapp-permissions package="com.test.mtk">
        <permission name="android.permission.MASTER_CLEAR" />
    </privapp-permissions>
</permissions>

第一步:預(yù)編譯處理


######預(yù)編譯priv-app 權(quán)限,輸出路徑為system/etc/permissions###########
# Permissions pre-grant
include $(CLEAR_VARS)
LOCAL_MODULE := com.test.mtk.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

第二步:指定app運(yùn)行所依賴的模塊文章來源地址http://www.zghlxwxcb.cn/news/detail-739024.html


######編譯priv-app 權(quán)限到apk中###########
LOCAL_REQUIRED_MODULES := com.test.mtk.xml

到了這里,關(guān)于編寫Android.mk / Android.bp 引用三方 jar 包,aar包,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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • Android.mk和Android.bp的區(qū)別和轉(zhuǎn)換詳解

    Android.mk和Android.bp的區(qū)別和轉(zhuǎn)換詳解

    簡單的說: Android.mk和Android.bp都是用來編譯出類庫.jar,應(yīng)用文件.apk,動態(tài)庫.so,靜態(tài)庫.a等等作用。 Android.mk就是一個GNU make語法的腳本文件。 Android.bp文件是Android 7.0及更高版本中引入的一種構(gòu)建腳本文件,是使用Starlark語法編寫的,它是一種基于Python的輕量級腳本語言。 他們

    2024年04月28日
    瀏覽(17)
  • Android.mk文件編寫

    Android.mk文件編寫

    Android.mk 是Android 提供的一種makefile 文件,注意用來編譯生成 exe(二進(jìn)制可執(zhí)行文件)、so(動態(tài)庫文件)、a(靜態(tài)庫文件)、jar(jar包) 和 apk 等文件。Android.mk和一個或多個.c的源文件放在同一目錄下做為一個模塊,通過mm或者mmm命令來編譯該模塊,生成自己所需的文件,如:二進(jìn)制的

    2024年02月01日
    瀏覽(30)
  • 【Android】jar包和AAR包

    【Android】jar包和AAR包

    以前在使用 Eclipse 開發(fā) Android 時,如果想代碼打包,只有 jar 包一個方法,但是 jar包 只能把 Java 文件代碼打包進(jìn)去,如果要使用一個有布局和資源的庫的話,除了將 jar 放入 libs 外,還要引入相關(guān)的資源和配置文件,很麻煩。 Android Studio 出來之后,出現(xiàn)了一個新的方法,打包

    2024年02月15日
    瀏覽(20)
  • 【Android中如何打包Jar、aar文件】

    【Android中如何打包Jar、aar文件】

    本文講解在安卓中如何自己打包Jar、aar文件。 新建Library Library名字自己隨意取哈,這里本人取testLibrary。 添加配置 在所有類或API封裝完成后就是開始添加配置進(jìn)行jar或aar打包的配置了。 注意這里,名字是自己可以隨意取的。 OK,這里添加配置重新構(gòu)建結(jié)束開始第三步。 在

    2024年02月12日
    瀏覽(19)
  • Android Studio如何打jar包和aar包并使用

    Android Studio如何打jar包和aar包并使用

    之前有篇文章介紹了so庫的生成和使用,看這里,但是,如果我們想把我們寫的so庫,通過java接口的方式提供出去,一般我們是打成jar包或者aar的形式提供,這篇文章介紹下如何打成jar包的,我們提供給使用方的是jar包和so庫; 總的來說,AS打包生成jar包可以分成兩類: 第一

    2024年02月01日
    瀏覽(21)
  • android使用fat-aar打包,本地aar和第三方依賴庫以及遇到的問題

    android使用fat-aar打包,本地aar和第三方依賴庫以及遇到的問題

    需要把有個模塊打包成aar,直接打包的話,模塊中引用的jar、aar、第三方依賴庫都不會打包進(jìn)去。直接生成的aar缺少內(nèi)部引用的以來,所以要用到fat-aar來把模塊中用到的依賴也打包進(jìn)去。 1.首先在項目的gradle加入 2.在repositories加入 3. 在需要打包aar的build.gradle中加入 4.第三方

    2024年02月15日
    瀏覽(23)
  • Android 項目調(diào)用第三方庫so動態(tài)庫

    Android 項目調(diào)用第三方庫so動態(tài)庫

    在Android NDK開發(fā)中,可以通過自己編寫C/C++代碼來構(gòu)建so動態(tài)庫進(jìn)行調(diào)用之外,還可以把so動態(tài)庫提供給第三方使用;接下來,我將介紹在新創(chuàng)建的Android 項目(或已存在的Android 項目)中如何調(diào)用第三方so動態(tài)庫。 關(guān)于如何進(jìn)行NDK開發(fā),實現(xiàn)JNI,以及編寫C++與Java交互(Java調(diào)用

    2024年02月16日
    瀏覽(30)
  • Android Studio利用CMake生成.so文件并且可供其他項目引用

    Android Studio利用CMake生成.so文件并且可供其他項目引用

    CMake是一個主要用于CPP的構(gòu)建工具。 CMake語言是平臺無關(guān)的中間編譯工具。同一個CMake編譯規(guī)則在不同系統(tǒng)平臺構(gòu)建出不同的可執(zhí)行構(gòu)建文件,所有操作都是通過編譯CMakeLists.txt來完成的。在Linux產(chǎn)生MakeFile,在Windows平臺產(chǎn)生Visual?Studio工程等。 CMake 旨在解決各平臺的不同Make工

    2024年02月12日
    瀏覽(17)
  • Android基于JNA集成調(diào)用第三方C/C++的so庫

    Android基于JNA集成調(diào)用第三方C/C++的so庫

    Android基于JNA集成調(diào)用第三方C/C++的so庫 (1)引入JNA。 基于JNA開源項目,JNA對Android NDK的封裝,簡化Android層JNI集成調(diào)用C/C++的so庫。 GitHub - java-native-access/jna: Java Native Access Java Native Access. Contribute to java-native-access/jna development by creating an account on GitHub. https://github.com/java-native-ac

    2024年02月02日
    瀏覽(25)
  • Android Studio引用第三方庫的方式

    title: 大小端詳解 date: 2023-06-06 21:01:24 comments: true #是否可評論 toc: true #是否顯示文章目錄 categories: #分類 - gradle - android studio tags: #標(biāo)簽 - gradle - android studio summary: android stduio 導(dǎo)入第三方庫方式 這里描述的第三方庫文件格式指的是 so aar so庫介紹一種方法 Aar介紹兩種方法 libs目錄

    2024年02月08日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包