Android.mk引入第三方j(luò)ar包和so庫(kù)文件的方法
以SystemUI為例,如果需要在SystemUI中引入第三方j(luò)ar包以及so庫(kù),可作如下處理:
首先,在frameworks\base\packages\SystemUI下新建libs目錄:
將需要引入的jar包放置到libs目錄下。然后修改Android.mk文件:

也就說(shuō)引入jar包主要依賴的是LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES和LOCAL_STATIC_JAVA_LIBRARIES。下面吧完整的Android.mk貼出來(lái),方便拷貝。
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) \ src/com/android/systemui/EventLogTags.logtags LOCAL_STATIC_JAVA_LIBRARIES := aaa Keyguard android-support-v7-palette android-support-v4 LOCAL_JAVA_LIBRARIES := telephony-common LOCAL_JAVA_LIBRARIES += JSRConfig LOCAL_SHARED_LIBRARIES := libtest1 \ libtest2 LOCAL_PACKAGE_NAME := SystemUI LOCAL_CERTIFICATE := platform LOCAL_PRIVILEGED_MODULE := true LOCAL_PROGUARD_FLAG_FILES := proguard.flags LOCAL_RESOURCE_DIR := \ frameworks/base/packages/Keyguard/res \ $(LOCAL_PATH)/res LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.keyguard include $(BUILD_PACKAGE) include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \ aaa:libs/aaa.jar include $(BUILD_MULTI_PREBUILT) include $(call all-makefiles-under,$(LOCAL_PATH))
我們把需要引入的jar包放置到了SystemUI下的libs目錄下了,并通過(guò)修改Android.mk完成了對(duì)它的引入。那么so庫(kù)怎么辦呢?上面并沒(méi)有說(shuō)把它放置到哪里?。?/p>
Android中,系統(tǒng)級(jí)的app使用到so庫(kù)以后,都會(huì)去system/lib目錄下去查找,所以你只需要把so庫(kù)放置到system/lib目錄下,然后在Android.mk中通過(guò)LOCAL_SHARED_LIBRARIES變量完成引用即可。我們可以通過(guò)adb把so庫(kù)push到設(shè)備的system/lib目錄下,可是,如果想要在android系統(tǒng)編譯過(guò)程中,就實(shí)現(xiàn)so庫(kù)拷貝到system/lib目錄,那怎么辦呢?這用到了Android編譯系統(tǒng)中的PRODUCT_COPY_FILES變量。
舉例來(lái)說(shuō),打開(kāi)device\xx\xxx目錄下一產(chǎn)品名命名的.mk文件,搜索PRODUCT_COPY_FILES變量就會(huì)看到很多該變量的用例,比如:
# Audio configuration file PRODUCT_COPY_FILES += \ device/xx/xxx/audio_policy.conf:system/etc/audio_policy.conf \ device/xx/xxx/audio_effects.conf:system/vendor/etc/audio_effects.conf \ device/xx/xxx/mixer_paths_qrd_skuh.xml:system/etc/mixer_paths_qrd_skuh.xml \ 。。。
PRODUCT_COPY_FILES 的每一個(gè)值都是以“:”隔開(kāi),前面是源,后面是目的。比如我們?cè)赿evices/xx/xxx目錄下新建lib目錄,把libtest1.so和libtest2.so放置到lib目錄下,然后就可以通過(guò)給PRODUCT_COPY_FILES 作如下賦值,即可是的系統(tǒng)在編譯的時(shí)候完成對(duì)他們的拷貝:
#so library PRODUCT_COPY_FILES += \ device/xx/xxx/libs/libtest1.so:system/lib/libtest1.so \ device/xx/xxx/libs/libtest2.so:system/lib/libtest2.so
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中方法數(shù)超限問(wèn)題與啟動(dòng)優(yōu)化詳解
這篇文章主要給大家介紹了Android中方法數(shù)超限問(wèn)題與啟動(dòng)優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Android 藍(lán)牙開(kāi)發(fā)實(shí)例解析
本文主要介紹Android 藍(lán)牙開(kāi)發(fā),這里提供實(shí)例代碼和詳細(xì)解析實(shí)現(xiàn)方法,對(duì)開(kāi)發(fā)Android藍(lán)牙開(kāi)發(fā)的朋友提供簡(jiǎn)單示例,有需要的朋友可以參考下2016-08-08
Android在kts中使用navigation及Args的方法
在Android項(xiàng)目中使用Kotlin腳本(kts)替代Groovy配置navigation和Args,需添加相關(guān)依賴,并在build.gradle中進(jìn)行配置,文章詳細(xì)介紹了如何在kts中使用navigation進(jìn)行頁(yè)面導(dǎo)航和參數(shù)傳遞,介紹了使用Bundle和Safe Args兩種方式安全傳遞參數(shù)2024-10-10
Android實(shí)現(xiàn)簡(jiǎn)易的音樂(lè)播放器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)易的音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05
完美解決Android客戶端RSA解密部分亂碼的問(wèn)題
下面小編就為大家分享一篇完美解決Android客戶端RSA解密部分亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Android中使用ViewFlipper進(jìn)行手勢(shì)切換實(shí)例
這篇文章主要介紹了Android中使用ViewFlipper進(jìn)行手勢(shì)切換的方法,以實(shí)例形式詳細(xì)講述了XML文件的定義及功能函數(shù)的實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下2014-10-10
解決Android 虛擬按鍵遮住了頁(yè)面內(nèi)容的問(wèn)題
今天小編就為大家分享一篇解決Android 虛擬按鍵遮住了頁(yè)面內(nèi)容的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實(shí)例
這篇文章主要介紹了Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實(shí)例,這兩個(gè)子控件一般被用作添加標(biāo)題,在實(shí)際效果上并不是那么好控制,使用的時(shí)候需要謹(jǐn)慎,需要的朋友可以參考下2016-06-06
詳解Android如何獲取進(jìn)程總數(shù),內(nèi)存與任務(wù)列表
在Android開(kāi)發(fā)中,有時(shí)我們需要監(jiān)控設(shè)備的性能,比如查看當(dāng)前運(yùn)行的進(jìn)程總數(shù),本文將介紹如何通過(guò)Android?API獲取這些信息,希望對(duì)大家有所幫助2025-02-02

