Android11編譯匯入PRODUCT_BOOT_JARS
- Android P以下版本匯入PRODUCT_BOOT_JARS
- Android編譯匯入PRODUCT_BOOT_JARS
- 增加package白名單
- 撰寫jar包Android.mk檔案(此jar包為dex檔案)
- make編譯
- Android 11 版本匯入PRODUCT_BOOT_JARS
- 撰寫jar包Android.bp檔案(此jar包為class檔案)
- 使用androidmk命令把Android.mk檔案生成Android.bp
- Android.bp增加java_library
- jar包為dex檔案編譯運行出錯處理
- check_boot_jars.py 檢查出錯
- merge_zips合并jar包出錯
Android P以下版本匯入PRODUCT_BOOT_JARS
Android編譯匯入PRODUCT_BOOT_JARS
PRODUCT_PACKAGES += \
com.king.test.module \
PRODUCT_BOOT_JARS += \
com.king.test.module \
增加package白名單
原始碼檔案build/make/core/tasks/check_boot_jars/package_allowed_list.txt增加jar包名白名單
###################################################
#e.g. com.king.test.module-dex.jar
com\.king\.test
com\.king\.test\..*
撰寫jar包Android.mk檔案(此jar包為dex檔案)
LOCAL_PATH := $(call my-dir)
#e.g. com.king.test.module-dex.jar
include $(CLEAR_VARS)
LOCAL_MODULE := com.king.test.module
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := com.king.test.module-dex.jar
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
include $(BUILD_PREBUILT)
make編譯
$make –j8
Android 11 版本匯入PRODUCT_BOOT_JARS
撰寫jar包Android.bp檔案(此jar包為class檔案)
使用androidmk命令把Android.mk檔案生成Android.bp
$androidmk Android.mk > Android.bp
生成后的檔案如下:
java_import {
name: "com.king.test.module",
jars: ["com.king.test.module-class.jar"],
}
Android.bp增加java_library
如上Android.bp檔案會編譯報錯:
internal error: failed to find a dex jar path for module ’ com.king.test.module’, note that some jars may be filtered out by module constraints
增加java_library定義,installable 為 true ,否則會同樣錯誤,如下:
java_import {
name: "com.king.test.module_jar",
jars: ["com.king.test.module-class.jar"],
}
java_library {
name: "com.king.test.module",
static_libs: [
" com.king.test.module_jar",
],
installable: true,
}
jar包為dex檔案編譯運行出錯處理
如果jar包是已經編譯好的dex檔案而不是純class檔案,在Android11上編譯會有以下問題,處理方式可參見說明
check_boot_jars.py 檢查出錯
Error: out/target/common/obj/JAVA_LIBRARIES/ com.king.test.module_intermediates/classes.jar does not contain any class files.
解決方法: 修改build/make/core/tasks/check_boot_jars/check_boot_jars.py,注釋"if classes == 0"的判斷

也可java_library 增加空的java檔案,如下
// srcs: [
// "src/**/*.java",
// ],
不過此方法會后面編譯出錯:
Error: Cannot create android app from an archive ‘out/soong/.intermediates/vendor/king/ com.king.test.module/android_common/combined/com.king.test.module.jar’ containing both DEX and Java-bytecode content
merge_zips合并jar包出錯
merge_zips.go:752: Duplicate path classes.dex found in out/soong/.intermediates/vendor/king/com.king.test.module/android_common/dex/classes.dex.jar!classes.dex and out/soong/.intermediates/vendor/king/com.king.test.module_jar/android_common/combined/com.king.test.module_jar.jar
解決方法: 修改build/soong/cmd/merge_zips/merge_zips.go,修改引數ignore-duplicates為true

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/229897.html
標籤:其他
