class 文件的未知包名称

Unknown package name of class file

我有两个库要添加到 AOSP: Azure Storage & Jackson Core

当 Azure 存储依赖于 Jackson 时。

之后,我将它们都添加到 [MAIN_FOLDER]/external 下,并添加了以下 Android.mk 个文件:

为了杰克逊 -

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

LOCAL_MODULE := jackson

LOCAL_MODULE_TAGS := eng debug optional

LOCAL_SDK_VERSION := current

LOCAL_SRC_FILES := $(call all-java-files-under, src/main)

include $(BUILD_JAVA_LIBRARY)

以及 Azure 存储 -

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

LOCAL_MODULE := azure-storage

LOCAL_JAVA_LIBRARIES := jackson

LOCAL_MODULE_TAGS := eng debug optional

LOCAL_SDK_VERSION := current

LOCAL_SRC_FILES := $(call all-java-files-under, src/main)

include $(BUILD_JAVA_LIBRARY)

当我还加了:

PRODUCT_BOOT_JARS := \
    jackson \
    azure-storage

给我的 core_minimal.mk.

以及 [MAIN_FOLDER]/frameworks/base/services/core/Android.mk 的以下内容:

LOCAL_JAVA_LIBRARIES += jackson azure-storage

唉,当我尝试make update-api && make, 我收到以下错误:

Error: out/target/common/obj/JAVA_LIBRARIES/jackson_intermediates/classes.jar: unknown package name of class file com/fasterxml/jackson/core/JsonLocation.class

Error: out/target/common/obj/JAVA_LIBRARIES/azure-storage_intermediates/classes.jar: unknown package name of class file com/microsoft/azure/storage/CorsRule.class

make: *** [out/target/common/obj/PACKAGING/boot-jars-package-check_intermediates/stamp] Error 1

make: *** Waiting for unfinished jobs....

谢谢!

显然所有图书馆都必须以 com.android.

开头

所以我添加了 jarjar-rules.txt 以下内容:

rule com.microsoft.** com.android.@0
rule com.fasterxml.** com.android.@0

并将以下行添加到 Android.mk:

LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt

现在,对 com.microsoft.azure.storage.* 的所有引用都应更改为 com.android.com.microsoft.azure.storage.*,对 fasterxml 的引用也应更改为

首先,我们最好找到这个错误的来源,'grep'我们发现它来自Python:build/core/tasks/check_boot_jars/check_boot_jars.py:

def CheckJar(jar):
package_name = os.path.dirname(f)
package_name = package_name.replace('/', '.')
# Skip class without a package name
if package_name and not whitelist_re.match(package_name):
    print >> sys.stderr, ('Error: %s: unknown package name of class file %s' % (jar, f))
    return False

显然,如果 "whitelist_re" 中不存在您的软件包名称,您就会收到错误消息!

"whitelist_re" 的值来自名为“build/core/tasks/check_boot_jars/package_whitelist.txt”的 txt 文件,因此解决方案是将您的包添加到此白名单文件.

例子在package_whitelist.txt中列出。