2015-08-24 4 views
3

Я пытаюсь добавить библиотеку Jackson JSON в свой проект AOSP. Я могу скомпилировать мой проект и прошить в телефон, но я получаю сообщение об ошибке выполнения:Как добавить стороннюю библиотеку в сборку Android AOSP?

E/JavaBinder(1689): java.lang.NoClassDefFoundError: Failed resolution of: Lcom/fasterxml/jackson/core/JsonFactory; 
... 
E/JavaBinder(1689): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.fasterxml.jackson.core.JsonFactory" on path: DexPathList[[zip file "/system/framework/guice.jar", zip file "/system/framework/beanshell.jar", zip file "/system/framework/services.jar", zip file "/system/framework/ethernet-service.jar", zip file "/system/framework/wifi-service.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 

Я попытался в том числе Джексон, как из источника, и банку. Вот мои Android.mk файлы для каждого:


ИСТОЧНИК Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_SRC_FILES := $(call all-java-files-under,.) 
LOCAL_MODULE_TAGS := optional 
LOCAL_MODULE:= com.fasterxml.jackson.core 
include $(BUILD_JAVA_LIBRARY) 

# Copy XML to /system/etc/permissions/ 
include $(CLEAR_VARS) 
LOCAL_MODULE_TAGS := optional 
LOCAL_MODULE := com.fasterxml.jackson.core.xml 
LOCAL_MODULE_CLASS := ETC 
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions 
LOCAL_SRC_FILES := $(LOCAL_MODULE) 
include $(BUILD_PREBUILT) 

ИСТОЧНИК com.fasterxml.jackson.core.xml (ссылка выше)

<?xml version="1.0" encoding="utf-8"?> 
<permissions> 
    <library name="com.fasterxml.jackson.core.xml" 
     file="/system/framework/com.fasterxml.jackson.jar" /> 
</permissions> 

JAR Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := jackson 
LOCAL_MODULE_TAGS := optional 
LOCAL_SRC_FILES := jackson-core-2.5.0.jar 
LOCAL_MODULE_CLASS := JAVA_LIBRARIES 
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX) 
include $(BUILD_PREBUILT) 

Я также добавил jackson запись для в LOCAL_JAVA_LIBRARIES := секции файла Android.mk, где я хочу использовать Джексон (frameworks/base/services). Независимо от того, что я пробовал, я получаю ClassNotFoundException.

Что мне не хватает? Я сделал что-то ненужное?

+0

возможно дублируется на http://stackoverflow.com/questions/18371626/add-one-android-project-as-a-library-in-aosp-app. Кажется, вам нужно добавить зависимость от вашего манифеста Mixaz

ответ

4

включить 3-ю библиотеку партии из источника:

  1. копию источника библиотеки в каталог под $ANDROID_BUILD_TOP/external/ (например: $ANDROID_BUILD_TOP/external/jackson)
  2. Создать Android.mk файл и поместите его в папка библиотеки (например: $ANDROID_BUILD_TOP/external/jackson/Android.mk

    Содержание Android.mk:

    # required (setup the build environment) 
    LOCAL_PATH := $(call my-dir) 
    include $(CLEAR_VARS) 
    
    # optional step to automate some pre-compilation steps for this library 
    # run `mvn generate-sources` before we compile 
    $(info $(shell (mvn generate-sources -f $(LOCAL_PATH)/pom.xml))) 
    
    # required (the name of the library we are building) 
    LOCAL_MODULE := jackson 
    
    # required (paths to all directories that include source code) 
    # note the difference between the := (first line) and += (every other line) 
    LOCAL_SRC_FILES := $(call all-java-files-under, src/main) 
    LOCAL_SRC_FILES += $(call all-java-files-under, target/generated-sources) 
    
    # required (tell the build system what kind of thing we are building) 
    include $(BUILD_JAVA_LIBRARY) 
    
  3. Добавить библиотеку в PRODUCT_BOOT_JARS разделе вашего файла mk. Файл, который вы редактирования зависит от того, что вы строите (например: build/target/product/core_minimal.mk)

    Оригинал

    PRODUCT_BOOT_JARS := \ 
        okhttp \ 
        core-junit \ 
        bouncycastle \ 
        ext \ 
        gson 
    

    Modified

    PRODUCT_BOOT_JARS := \ 
        okhttp \ 
        core-junit \ 
        bouncycastle \ 
        ext \ 
        gson \ 
        jackson 
    
  4. Для каждого субмодуля вашего AOSP проекта (ex: frameworks/base), , что вы хотите иметь доступ к библиотеку, найдите файл makefile (например: $ANDROID_BUILD_TOP/frameworks/base/Android.mk и добавьте запись для вашей библиотеки в строку LOCAL_JAVA_LIBRARIES.Пример:

    Оригинал

    LOCAL_JAVA_LIBRARIES := guice gson 
    

    Модифицированный

    LOCAL_JAVA_LIBRARIES := guice gson jackson 
    
  5. Составьте свой проект.

+0

Можете ли вы мне помочь? http://stackoverflow.com/questions/40114369/two-external-libraries-that-one-depends-on-the-other – shlatchz

Смежные вопросы