學(xué)員答疑:android12/13 framework課程預(yù)制apk和bootanimation部分
粉絲朋友在學(xué)習(xí)我的課程內(nèi)置應(yīng)用時(shí)候,和bootanimation時(shí)候,發(fā)現(xiàn)如果在Android 12/13 上預(yù)制apk時(shí)候發(fā)現(xiàn)有編譯不過情況,報(bào)artifact_path_requirements相關(guān)錯(cuò)誤 具體錯(cuò)誤顯示如下:
build/make/core/artifact_path_requirements.mk:26:?warning:??build/make/target/product/sdk_phone_x86_64.mk?produces?files?inside?build/make/target/product/generic_system.mks?artifact?path?requirement.?
Offending?entries:
system/app/MyApp/MyApp.apk
In?file?included?from?build/make/core/main.mk:1383:
build/make/core/artifact_path_requirements.mk:26:?error:?Build?failed.
00:42:13?ckati?failed?with:?exit?status?1
這里乍一看估計(jì)99%的人都不知道怎么回事,這里其實(shí)可以從提示是可以看出來: 大概是因?yàn)樾掳姹綼rtifact_path_requirements有對預(yù)裝相關(guān)東西進(jìn)行了規(guī)則檢測,發(fā)現(xiàn)system/app/MyApp/MyApp.apk這種預(yù)制到system/app的情況屬于違規(guī)了。 那么具體怎么解決呢?
方法一
通過在github尋找到了一些第三方rom維護(hù)者也有遇到類似問題,參考他們解決方案,自己這邊再消化后,我的修改如下:
diff?--git?a/envsetup.sh?b/envsetup.sh
index?16873095aa..8c4a8c62e6?100644
---?a/envsetup.sh
+++?b/envsetup.sh
@@?-211,7?+211,7?@@?function?setpaths()
?????local?targetgccversion=$(get_build_var?TARGET_GCC_VERSION)
?????local?targetgccversion2=$(get_build_var?2ND_TARGET_GCC_VERSION)
?????export?TARGET_GCC_VERSION=$targetgccversion
-
+????export?DISABLE_ARTIFACT_PATH_REQUIREMENTS="true"
?????#?The?gcc?toolchain?does?not?exists?for?windows/cygwin.?In?this?case,?do?not?reference?it.
?????export?ANDROID_TOOLCHAIN=
?????export?ANDROID_TOOLCHAIN_2ND_ARCH=
即build/envsetup.sh 加上export DISABLE_ARTIFACT_PATH_REQUIREMENTS="true"就可以順利編譯通過不再報(bào)artifact_path_requirements錯(cuò)誤,這里其實(shí)就相當(dāng)于把新版本編譯系統(tǒng)中artifact_path_requirements檢測關(guān)閉就可以
附一下成功圖片:

成功apk路徑:

方法二:
上面修改方式相對有點(diǎn)暴力,沒有細(xì)粒度的細(xì)分,而是一股氣把所有的開放了,也有一種細(xì)粒度的方法如下:
diff?--git?a/target/product/telephony_product.mk?b/target/product/telephony_product.mk
index?18374d4b23..7e88206193?100644
---?a/target/product/telephony_product.mk
+++?b/target/product/telephony_product.mk
@@?-20,4?+20,10?@@
?#?/product?packages
?PRODUCT_PACKAGES?+=?\
?????Dialer?\
+????MyApp?\
?????ImsServiceEntitlement?\
+
+
+PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST?+=\
+???????system/app/MyApp/MyApp.apk?\
里面最重要的一個(gè)就是
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST?+=\
???????system/app/MyApp/MyApp.apk?\
在這個(gè)PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST加上相關(guān)的白名單既可以
bootanimation預(yù)制新方法:
原來8.1使用的Android.mk中進(jìn)行shell直接拷貝到system/media路徑下已經(jīng)不生效
1、bootanimation下面已經(jīng)沒有了相關(guān)的Android.mk了
2、哪怕找到可以執(zhí)行的Android.mk,編譯也會(huì)提示沒有media路徑不存在
這里也針對新版本的預(yù)制bootanimation.zip進(jìn)行講解
修改patch如下
test@test:~/aosp/build/make$?git?status
HEAD?detached?at?d0d363fbc2
Changes?not?staged?for?commit:
??(use?"git?add?<file>..."?to?update?what?will?be?committed)
??(use?"git?restore?<file>..."?to?discard?changes?in?working?directory)
????modified:???envsetup.sh
????modified:???target/product/handheld_system_ext.mk
????modified:???target/product/telephony_product.mk
no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")
test@test:~/aosp/build/make$?git?diff?
diff?--git?a/envsetup.sh?b/envsetup.sh
index?be6061d67d..069a9d7d22?100644
---?a/envsetup.sh
+++?b/envsetup.sh
@@?-211,7?+211,7?@@?function?setpaths()
?????local?targetgccversion=$(get_build_var?TARGET_GCC_VERSION)
?????local?targetgccversion2=$(get_build_var?2ND_TARGET_GCC_VERSION)
?????export?TARGET_GCC_VERSION=$targetgccversion
-
+????export?DISABLE_ARTIFACT_PATH_REQUIREMENTS="true"//這里上面有介紹
?????#?The?gcc?toolchain?does?not?exists?for?windows/cygwin.?In?this?case,?do?not?reference?it.
?????export?ANDROID_TOOLCHAIN=
?????export?ANDROID_TOOLCHAIN_2ND_ARCH=
diff?--git?a/target/product/handheld_system_ext.mk?b/target/product/handheld_system_ext.mk
index?d935fbfddf..9c19ab14cd?100644
---?a/target/product/handheld_system_ext.mk
+++?b/target/product/handheld_system_ext.mk
@@?-19,6?+19,8?@@
?
這里核心就是如下這句
PRODUCT_COPY_FILES?+=?\
???packages/services/Car/car_product/car_ui_portrait/bootanimation/bootanimation.zip:system/media/bootanimation.zip
采用這個(gè)PRODUCT_COPY_FILES宏,這個(gè)方式相對比較標(biāo)準(zhǔn)
更多干貨framework課程列表
https://blog.csdn.net/learnframework/article/details/132739059 需要更多資料可以+v(androidframework007)也可以下面公眾號(hào)
