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中列出。
我有两个库要添加到 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中列出。