就是把 google 的 gapp 包裝成 update file
download zip, 解開後...
update-binary 實際上是一個 shellscript。但是最終還是 call install.sh
有關 core app 部份:
for gapp_name in $core_gapps_list; do get_apparchives "Core/$gapp_name" for archive in $apparchives; do case $gapp_name in setupwizarddefault) if [ "$device_type" != "tablet" ]; then extract_app "$archive"; fi;; setupwizardtablet) if [ "$device_type" = "tablet" ]; then extract_app "$archive"; fi;; *) extract_app "$archive";; esac done done; ui_print " ";也就是 extract_app:
extract_app() { tarpath="$TMP/$1.tar" # NB no suffix specified here if "$TMP/unzip-$BINARCH" -o "$OPENGAZIP" "$1.tar*" -d "$TMP"; then # wildcard for suffix app_name="$(basename "$1")" which_dpi "$app_name" echo "Found $1 DPI path: $dpiapkpath" folder_extract "$tarpath" "$dpiapkpath" "$app_name/common" else echo "Failed to extract $1.tar* from $OPENGAZIP" fi }就是 folder_extract:
elif [ -e "$archive.lz" ]; then for f in "$@"; do if [ "$f" != "unknown" ]; then "$TMP/tar-$BINARCH" -xf "$archive.lz" -C "$TMP" "$f" && install_extracted "$f" fi done rm -f "$archive.lz"解開m,然後 install_extracted:
install_extracted() { file_list="$(find "$TMP/$1/" -mindepth 1 -type f | cut -d/ -f5-)" dir_list="$(find "$TMP/$1/" -mindepth 1 -type d | cut -d/ -f5-)" for file in $file_list; do install -D "$TMP/$1/${file}" "$SYSTEM/${file}" ch_con "$SYSTEM/${file}" set_perm 0 0 644 "$SYSTEM/${file}"; done for dir in $dir_list; do ch_con "$SYSTEM/${dir}" set_perm 0 0 755 "$SYSTEM/${dir}"; done case $preodex in true*) installedapkpaths="$(find "$TMP/$1/" -name "*.apk" -type f | cut -d/ -f5-)" for installedapkpath in $installedapkpaths; do # TODO fix spaces-handling if ! checkmanifest "$SYSTEM/$installedapkpath" "classes.dex"; then ui_print "- pre-ODEX-ing $gapp_name"; log "pre-ODEX-ing" "$gapp_name"; odexapk "$SYSTEM/$installedapkpath" fi done ;; esac bkup_list=$'\n'"${file_list}${bkup_list}" rm -rf "$TMP/$1" }
install 是 busybox 提供的...
ch_con 是 chcon:
ch_con() { chcon -h u:object_r:system_file:s0 "$1"; }所以間單來說,只要 gms 的話,要裝 gms 跟 gsf . 然後 permission 也要。
所以就是解開:之後,把 priv-app push 到 /system/priv-app, 把 permission push 到 /system/etc/permissions , 把 sysconfig push 到 /system/etc/sysconfig 之後,重開機就可以。
我解開(install) 的有:
- Core/defaultetc-comm : permissions and sysconfig
- Core/gmscore-arm64 : PrebuiltGmsCore
- Core/gsf-all : GoogleServiceFramework
- Core/gsflogin-all : GoogleLoginService
沒有留言:
張貼留言