Невозможно использовать сторонний Lib.aar в AOSP

#android #android-source #android-library

#Android #android-исходный код #android-библиотека

Вопрос:

Я создал библиотеку aar и добавил путь: framework/base / packages/MyLib/MyLib.aar в AOSP.

Android.mk

 LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyLib
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_PREBUILT_MODULE_FILE := $(LOCAL_PATH)/MyLib.aar
include $(BUILD_PREBUILT)
  

Когда я добавляю эту библиотеку в другое приложение, например, в настройки, и она работает нормально. Но я хочу использовать в framework / base / service / в каком-либо файле Java. Я не могу импортировать файл класса этой библиотеки.

Я добавил его в другие приложения Andropid.mk как LOCAL_STATIC_ANDROID_LIBRARIES := MyLib

Ответ №1:

Это мой метод преобразования предварительно aar созданной библиотеки Android в статическую. У меня все работало нормально. Вы можете использовать этот метод для своей ситуации.

 include $(BUILD_PACKAGE)
    
######################## TuanPM13 ##################################### 

# add config to convert prebuilt aar to static android lib
#######################################################################
define aar-to-android-lib
$(foreach t,$(1), 
    $(eval include $(CLEAR_VARS)) 
    $(eval tw := $(subst :, ,$(strip $(t)))) 
    $(eval LOCAL_MODULE := $(word 1,$(tw))) 
    $(eval LOCAL_MODULE_TAGS := optional) 
    $(eval LOCAL_SRC_FILES := $(word 2,$(tw))) 
    $(eval LOCAL_RESOURCE_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),,COMMON)/aar/res) 
    $(eval LOCAL_USE_AAPT2 := true) 
    $(eval LOCAL_RENDERSCRIPT_TARGET_API := $(2)) 
    $(eval LOCAL_MODULE_CLASS := JAVA_LIBRARIES) 
    $(eval LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)) 
    $(eval LOCAL_BUILT_MODULE_STEM := javalib.jar) 
    $(eval LOCAL_UNINSTALLABLE_MODULE := true) 
    $(eval include $(BUILD_PREBUILT)) 
)
endef

prebuilt_aar_libraries := exoplayer-core:libs/exoplayer-core-2.10.8.aar 
    exoplayer-ui:libs/exoplayer-ui-2.10.8.aar 
    exoplayer-extension-mediasession:libs/extension-mediasession-2.10.8.aar

$(call aar-to-android-lib, $(prebuilt_aar_libraries), 28) # API level 28

prebuilt_aar_libraries :=
  

Отметил, что в моем случае все *.arr были помещены в libs каталог.
Затем в Android.mk что касается других приложений, я ссылаюсь на них, как показано ниже

 LOCAL_PATH:= $(call my-dir)
    
include $(CLEAR_VARS)

...

LOCAL_STATIC_ANDROID_LIBRARIES  = 
    exoplayer-extension-mediasession 
    exoplayer-ui 
    exoplayer-core

include $(BUILD_PACKAGE)
  

Комментарии:

1. Зачем его конвертировать, потому что я могу использовать его в каком-либо приложении, например, в настройках, SystemUI и т. Д.

2. @D.J Я еще не знаю точно, что не так в вашем методе, но мой метод — это просто еще один способ попробовать.