BLu*_*NiX 8 java android makefile android-source
我正在尝试将Jackson JSON库添加到我的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]]
Run Code Online (Sandbox Code Playgroud)
我试过从源头和罐子里包括杰克逊.以下是我的每个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)
Run Code Online (Sandbox Code Playgroud)
消息来源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>
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我还在Android.mk文件的部分添加了一个jackson条目LOCAL_JAVA_LIBRARIES :=,我想使用Jackson(frameworks/base/services).无论我尝试过什么,我都会得到一个ClassNotFoundException.
我错过了什么?我做了什么不必要的事吗?
要包含来自源的第三方库:
$ANDROID_BUILD_TOP/external/(例如:$ANDROID_BUILD_TOP/external/jackson)创建一个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)
Run Code Online (Sandbox Code Playgroud)将库添加到文件的PRODUCT_BOOT_JARS部分mk.哪个文件编辑取决于你正在构建(例如:build/target/product/core_minimal.mk)
原版的
PRODUCT_BOOT_JARS := \
okhttp \
core-junit \
bouncycastle \
ext \
gson
Run Code Online (Sandbox Code Playgroud)
改性
PRODUCT_BOOT_JARS := \
okhttp \
core-junit \
bouncycastle \
ext \
gson \
jackson
Run Code Online (Sandbox Code Playgroud)对于您的AOSP项目的每个子模块(例如frameworks/base),您想要访问该库,找到makefile(例如:$ANDROID_BUILD_TOP/frameworks/base/Android.mk并为该库添加一个条目LOCAL_JAVA_LIBRARIES.示例:
原版的
LOCAL_JAVA_LIBRARIES := guice gson
Run Code Online (Sandbox Code Playgroud)
改性
LOCAL_JAVA_LIBRARIES := guice gson jackson
Run Code Online (Sandbox Code Playgroud)编译您的项目.
| 归档时间: |
|
| 查看次数: |
5696 次 |
| 最近记录: |