From 4a9c30aa34073ef2941833ef63fb3b6f4cdafb8b Mon Sep 17 00:00:00 2001 From: Jim Wu Date: Sat, 19 Dec 2020 17:19:38 +0800 Subject: [PATCH] I18n support & bug fixes Fix #628 Fix #637 --- edxp-core/build.gradle | 2 +- edxp-core/template_override/customize.sh | 351 +++++++----------- edxp-core/template_override/post-fs-data.sh | 71 ++-- edxp-core/template_override/riru.sh | 34 -- edxp-core/template_override/service.sh | 8 + edxp-core/template_override/util_functions.sh | 77 ++++ edxp-core/template_override/verify.sh | 10 +- edxp-core/template_override/zh_CN.sh | 53 +++ 8 files changed, 307 insertions(+), 299 deletions(-) delete mode 100644 edxp-core/template_override/riru.sh create mode 100644 edxp-core/template_override/service.sh create mode 100644 edxp-core/template_override/util_functions.sh create mode 100644 edxp-core/template_override/zh_CN.sh diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index 67c83c94..c0139995 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -165,7 +165,7 @@ afterEvaluate { copy { from "${projectDir}/template_override" into zipPathMagiskReleasePath - include 'riru.sh' + include 'util_functions.sh' filter { line -> line.replaceAll('%%%RIRU_MODULE_ID%%%', riruModuleId) .replaceAll('%%%RIRU_MIN_API_VERSION%%%', moduleMinRiruApiVersion.toString()) diff --git a/edxp-core/template_override/customize.sh b/edxp-core/template_override/customize.sh index da7a9200..05940f9f 100644 --- a/edxp-core/template_override/customize.sh +++ b/edxp-core/template_override/customize.sh @@ -1,5 +1,10 @@ SKIPUNZIP=1 +abortC() { + rm -rf "${MODPATH}" + abort "$1" +} + getRandomNameExist() { RAND_PATH=$4 RAND_SUFFIX=$3 @@ -19,6 +24,7 @@ getRandomNameExist() { fi } +POUNDS="*********************************************************" RIRU_PATH="/data/adb/riru" RIRU_EDXP="$(getRandomNameExist 4 "libriru_" ".so" " /system/lib @@ -30,195 +36,101 @@ RIRU_TARGET="${RIRU_MODULES}/${RIRU_EDXP}" VERSION=$(grep_prop version "${TMPDIR}/module.prop") RIRU_MIN_API_VERSION=$(grep_prop api "${TMPDIR}/module.prop") -PROP_MODEL=$(getprop ro.product.model) -PROP_DEVICE=$(getprop ro.product.device) -PROP_PRODUCT=$(getprop ro.build.product) -PROP_BRAND=$(getprop ro.product.brand) -PROP_MANUFACTURER=$(getprop ro.product.manufacturer) - LIB_RIRU_EDXP="libriru_${RIRU_EDXP}.so" LIB_SANDHOOK_EDXP="lib$(getRandomNameExist 13 "lib" ".so" " /system/lib /system/lib64 ").so" -MODEL=" -HD1900 -HD1910 -" -DEVICE=" -OnePlus7T -OnePlus7TPro -" -PRODUCT=" -OnePlus7T -OnePlus7TPro -" -BRAND=" -HUAWEI -HONOR -" -MANUFACTURER=" -HUAWEI -" +### lang start ### +# Default en_US +# customize +LANG_CUST_INST_VERSION="version" +LANG_CUST_INST_EXT_FILES="Extracting module files" +LANG_CUST_INST_EXT_LIB_X86="Extracting x86 libraries" +LANG_CUST_INST_EXT_LIB_X64="Extracting x86_64 libraries" +LANG_CUST_INST_EXT_LIB_ARM="Extracting arm libraries" +LANG_CUST_INST_EXT_LIB_ARM64="Extracting arm64 libraries" +LANG_CUST_INST_STUB="Installing stub manager" +LANG_CUST_INST_CONF_CREATE="Creating configuration directories" +LANG_CUST_INST_CONF_OLD="Use previous path" +LANG_CUST_INST_CONF_NEW="Use new path" +LANG_CUST_INST_COPY_LIB="Copying framework libraries" +LANG_CUST_INST_RAND_LIB_1="Resetting libraries path" +LANG_CUST_INST_RAND_LIB_2="It may take a long time, please be patient" +LANG_CUST_INST_RAND_LIB_3="Processing 32 bit libraries" +LANG_CUST_INST_RAND_LIB_4="Processing 64 bit libraries" +LANG_CUST_INST_REM_OLDCONF="Removing old configuration" +LANG_CUST_INST_COPT_EXTRA="Copying extra files" +LANG_CUST_INST_DONE="Welcome to" -OLD_MAGISK=false -DETECTED_DEVICE=false -#NO_PERSIST=false -[[ "$(getenforce)" == "Enforcing" ]] && ENFORCE=true || ENFORCE=false +LANG_CUST_ERR_VERIFY_FAIL_1="Unable to extract verify tool!" +LANG_CUST_ERR_VERIFY_FAIL_2="This zip may be corrupted, please try downloading again" +LANG_CUST_ERR_STUB="Stub install failed! Do not forget install EdXposed Manager manually" +LANG_CUST_ERR_PERM="Can't set permission" +LANG_CUST_ERR_CONF_CREATE="Can't create configuration path" +LANG_CUST_ERR_CONF_STORE="Can't store configuration path" +LANG_CUST_ERR_CONF_FIRST="Can't create first install flag" +LANG_CUST_ERR_CONF_UNINST="Can't write uninstall script" +LANG_CUST_ERR_EXTRA_CREATE="Can't create" -abortC() { - rm -rf "${MODPATH}" - abort "$1" -} +# verify +LANG_VERIFY_SUCCESS="Verified" -require_new_magisk() { -# if [[ "${NO_PERSIST}" == true ]]; then -# ui_print "******************************" -# ui_print "! Special device detected" -# ui_print "! But persist is not found in your device, SEPolicy rules will not take effect correctly" -# ui_print "! Deprecated custom Magisk v20.1 is required" -# ui_print "! Change Magisk update channel to http://edxp.meowcat.org/repo/version.json" -# ui_print "! And re-install Magisk" -# abortC "******************************" -# else - ui_print "******************************" - ui_print "! Special device detected" - ui_print "! Magisk v20.2+ or custom Magisk v20.1(Deprecated) is required" - ui_print "! You can update from 'Magisk Manager' or https://github.com/topjohnwu/Magisk/releases" - abortC "******************************" -# fi -} +LANG_VERIFY_ERR_MISMATCH="Failed to verify" +LANG_VERIFY_ERR_NOT_EXIST="not exists" +LANG_VERIFY_ERR_NOTICE="This zip may be corrupted, please try downloading again" -update_new_magisk() { - ui_print "******************************" - ui_print "- Deprecated custom Magisk v20.1 detected" - ui_print "- We will still keep the rule file for you" - ui_print "- You can update to the latest Magisk directly from official update channel" - ui_print "******************************" -} +# util_functions +LANG_UTIL_PLATFORM="Device platform" -require_yahfa() { - ui_print "******************************" - ui_print "! Architecture x86 or x86_64 detected" - ui_print "! Only YAHFA variant supports x86 or x86_64 architecture devices" - ui_print "! You can download from 'Magisk Manager' or 'EdXposed Manager'" - abortC "******************************" -} +LANG_UTIL_ERR_RIRU_NOT_FOUND_1="is not installed" +LANG_UTIL_ERR_RIRU_NOT_FOUND_2="Please install Riru from Magisk Manager" +LANG_UTIL_ERR_RIRU_LOW_1="or above is required" +LANG_UTIL_ERR_RIRU_LOW_2="Please upgrade Riru from Magisk Manager" +LANG_UTIL_ERR_REQUIRE_YAHFA_1="Architecture x86 or x86_64 detected" +LANG_UTIL_ERR_REQUIRE_YAHFA_2="Only YAHFA variant supports x86 or x86_64 architecture devices" +LANG_UTIL_ERR_REQUIRE_YAHFA_3="You can download from 'Magisk Manager' or 'EdXposed Manager'" +LANG_UTIL_ERR_ANDROID_UNSUPPORT_1="Unsupported Android version" +LANG_UTIL_ERR_ANDROID_UNSUPPORT_2="(below Oreo)" +LANG_UTIL_ERR_ANDROID_UNSUPPORT_3="Learn more from our GitHub Wiki" +LANG_UTIL_ERR_PLATFORM_UNSUPPORT="Unsupported platform" -require_new_android() { - ui_print "******************************" - ui_print "! Old Android ${1} (below Oreo) detected" - ui_print "! Only the original Xposed Framework can be used under Android 8.0" - ui_print "! You can download from 'Xposed Installer' or 'Magisk Manager(Systemless-ly)'" - ui_print "! Learn more: https://github.com/ElderDrivers/EdXposed/wiki/Available-Android-versions" - abortC "******************************" -} +# Load lang +if [[ ${BOOTMODE} == true ]]; then + locale=$(getprop persist.sys.locale|awk -F "-" '{print $1"_"$NF}') + [[ ${locale} == "" ]] && locale=$(settings get system system_locales|awk -F "," '{print $1}'|awk -F "-" '{print $1"_"$NF}') + file=${locale}.sh + unzip -o "$ZIPFILE" "${file}" -d "$TMPDIR" >&2 + unzip -o "$ZIPFILE" "${file}.s" -d "$TMPDIR" >&2 + (echo "$(cat "${TMPDIR}/${file}.s") ${TMPDIR}/${file}" | sha256sum -c -s -) && . "${TMPDIR}/${file}" +fi +### lang end ### -check_old_magisk_device() { - OLD_MAGISK=true - ui_print "******************************" - ui_print "- Old Magisk ${1} (below v20.2) detected" - ui_print "- The old Magisk may cause some problems (it may be fixed in new version)" - ui_print "- And support may be cancelled in subsequent versions" - ui_print "- In any case, you should update to the latest version in time" - ui_print "******************************" - if [[ "${DETECTED_DEVICE}" == true ]]; then - require_new_magisk - fi -} - -check_magisk_version() { - for TARGET in ${MODEL}; do - if [[ "${PROP_MODEL}" == "${TARGET}" ]]; then - DETECTED_DEVICE=true - fi - done - for TARGET in ${DEVICE}; do - if [[ "${PROP_DEVICE}" == "${TARGET}" ]]; then - DETECTED_DEVICE=true - fi - done - for TARGET in ${PRODUCT}; do - if [[ "${PROP_PRODUCT}" == "${TARGET}" ]]; then - DETECTED_DEVICE=true - fi - done - for TARGET in ${BRAND}; do - if [[ "${PROP_BRAND}" == "${TARGET}" ]]; then - DETECTED_DEVICE=true - fi - done - for TARGET in ${MANUFACTURER}; do - if [[ "${PROP_MANUFACTURER}" == "${TARGET}" ]]; then - DETECTED_DEVICE=true - fi - done - if [[ "${DETECTED_DEVICE}" == true ]]; then - ui_print "- Special device detected" - fi - ui_print "- Magisk version: ${MAGISK_VER_CODE}" - [[ ${MAGISK_VER_CODE} -ge 20101 ]] || check_old_magisk_device "${MAGISK_VER_CODE}" - [[ ${MAGISK_VER_CODE} -eq 20101 ]] && update_new_magisk -} - -edxp_check_architecture() { - if [[ "${MODID}" == "riru_edxposed_sandhook" ]]; then - VARIANTS="SandHook" - else - VARIANTS="YAHFA" - fi - ui_print "- EdXposed Variant: ${VARIANTS}" - if [[ "${ARCH}" != "arm" && "${ARCH}" != "arm64" && "${ARCH}" != "x86" && "${ARCH}" != "x64" ]]; then - abortC "! Unsupported platform: ${ARCH}" - else - ui_print "- Device platform: ${ARCH}" - if [[ "${ARCH}" == "x86" || "${ARCH}" == "x64" ]]; then - if [[ "${VARIANTS}" == "SandHook" ]]; then - require_yahfa - fi - fi - fi -} - -check_android_version() { - if [[ ${API} -ge 26 ]]; then - ui_print "- Android sdk: ${API}" - else - require_new_android "${API}" - fi -} - -#check_persist() { -# if [[ "$(cat /proc/mounts | grep /sbin/.magisk/mirror/persist)" == "" ]]; then -# NO_PERSIST=true -# fi -#} - -ui_print "- EdXposed Version ${VERSION}" +ui_print "- EdXposed ${LANG_CUST_INST_VERSION} ${VERSION}" # extract verify.sh -ui_print "- Extracting verify.sh" unzip -o "$ZIPFILE" 'verify.sh' -d "$TMPDIR" >&2 if [ ! -f "$TMPDIR/verify.sh" ]; then - ui_print "*********************************************************" - ui_print "! Unable to extract verify.sh!" - ui_print "! This zip may be corrupted, please try downloading again" - abort "*********************************************************" + ui_print "${POUNDS}" + ui_print "! ${LANG_CUST_ERR_VERIFY_FAIL}" + ui_print "! ${LANG_VERIFY_ERR_NOTICE}" + abortC "${POUNDS}" fi . $TMPDIR/verify.sh -# extract riru.sh -extract "$ZIPFILE" riru.sh "$MODPATH" -. $MODPATH/riru.sh +extract "$ZIPFILE" 'customize.sh' "${TMPDIR}" +extract "$ZIPFILE" 'util_functions.sh' "${TMPDIR}" +. ${TMPDIR}/util_functions.sh -#check_persist check_android_version check_magisk_version check_riru_version edxp_check_architecture -ui_print "- Extracting module files" +ui_print "- ${LANG_CUST_INST_EXT_FILES}" + +# extract module files extract "${ZIPFILE}" 'EdXposed.apk' "${MODPATH}" extract "${ZIPFILE}" 'module.prop' "${MODPATH}" extract "${ZIPFILE}" 'system.prop' "${MODPATH}" @@ -233,75 +145,75 @@ extract "${ZIPFILE}" 'system/framework/edservice.dex' "${MODPATH}" extract "${ZIPFILE}" 'system/framework/edxp.dex' "${MODPATH}" if [ "$ARCH" = "x86" ] || [ "$ARCH" = "x64" ]; then - ui_print "- Extracting x86 libraries" - extract "$ZIPFILE" 'system_x86/lib/libriru_edxp.so' "$MODPATH" - mv "$MODPATH/system_x86/lib" "$MODPATH/system/lib" + ui_print "- ${LANG_CUST_INST_EXT_LIB_X86}" + extract "$ZIPFILE" 'system_x86/lib/libriru_edxp.so' "${MODPATH}" + mv "${MODPATH}/system_x86/lib" "${MODPATH}/system/lib" if [ "$IS64BIT" = true ]; then - ui_print "- Extracting x64 libraries" - extract "$ZIPFILE" 'system_x86/lib64/libriru_edxp.so' "$MODPATH" - mv "$MODPATH/system_x86/lib64" "$MODPATH/system/lib64" + ui_print "- ${LANG_CUST_INST_EXT_LIB_X64}" + extract "$ZIPFILE" 'system_x86/lib64/libriru_edxp.so' "${MODPATH}" + mv "${MODPATH}/system_x86/lib64" "${MODPATH}/system/lib64" fi else - ui_print "- Extracting arm libraries" - extract "$ZIPFILE" 'system/lib/libriru_edxp.so' "$MODPATH" + ui_print "- ${LANG_CUST_INST_EXT_LIB_ARM}" + extract "$ZIPFILE" 'system/lib/libriru_edxp.so' "${MODPATH}" if [[ "${VARIANTS}" == "SandHook" ]]; then - extract "$ZIPFILE" 'system/lib/libsandhook.edxp.so' "$MODPATH" + extract "$ZIPFILE" 'system/lib/libsandhook.edxp.so' "${MODPATH}" fi if [ "$IS64BIT" = true ]; then - ui_print "- Extracting arm64 libraries" - extract "$ZIPFILE" 'system/lib64/libriru_edxp.so' "$MODPATH" + ui_print "- ${LANG_CUST_INST_EXT_LIB_ARM64}" + extract "$ZIPFILE" 'system/lib64/libriru_edxp.so' "${MODPATH}" if [[ "${VARIANTS}" == "SandHook" ]]; then - extract "$ZIPFILE" 'system/lib64/libsandhook.edxp.so' "$MODPATH" + extract "$ZIPFILE" 'system/lib64/libsandhook.edxp.so' "${MODPATH}" fi fi fi -if [[ "$(pm path org.meowcat.edxposed.manager)" == "" && "$(pm path de.robv.android.xposed.installer)" == "" ]]; then - NO_MANAGER=true +if [[ ${BOOTMODE} == true ]]; then + [[ "$(pm path org.meowcat.edxposed.manager)" == "" && "$(pm path de.robv.android.xposed.installer)" == "" ]] && NO_MANAGER=true fi if [[ ${BOOTMODE} == true && ${NO_MANAGER} == true ]]; then - ui_print "- Installing stub apk" - ${ENFORCE} && setenforce 0 - (pm install "${MODPATH}/EdXposed.apk" >/dev/null 2>&2) || ui_print " - Stub install failed! Do not forget install EdXposed Manager manually" - ${ENFORCE} && setenforce 1 + ui_print "- ${LANG_CUST_INST_STUB}" + cp "${MODPATH}/EdXposed.apk" "/data/local/tmp/EdXposed.apk" + LOCAL_PATH_INFO=$(ls -ldZ "/data/local/tmp") + LOCAL_PATH_OWNER=$(echo "${LOCAL_PATH_INFO}" | awk -F " " '{print $3":"$4}') + LOCAL_PATH_CONTEXT=$(echo "${LOCAL_PATH_INFO}" | awk -F " " '{print $5}') + chcon ${LOCAL_PATH_CONTEXT} "/data/local/tmp/EdXposed.apk" + chown ${LOCAL_PATH_OWNER} "/data/local/tmp/EdXposed.apk" + (pm install "/data/local/tmp/EdXposed.apk" >/dev/null 2>&2) || ui_print " ! ${LANG_CUST_ERR_STUB}" + rm -f "/data/local/tmp/EdXposed.apk" fi -if [[ "${OLD_MAGISK}" == true ]]; then - ui_print "- Removing SEPolicy rule for old Magisk" - rm "${MODPATH}"/sepolicy.rule -fi - -ui_print "- Creating configuration directories" +ui_print "- ${LANG_CUST_INST_CONF_CREATE}" if [[ -f /data/adb/edxp/misc_path ]]; then MISC_PATH=$(cat /data/adb/edxp/misc_path) - ui_print "- Use previous path $MISC_PATH" + ui_print " - ${LANG_CUST_INST_CONF_OLD} $MISC_PATH" else - MISC_PATH="edxp_$(tr -cd 'A-Za-z0-9' < /dev/urandom | head -c16)" - ui_print "- Use new path $MISC_PATH" - mkdir -p /data/adb/edxp || abort "! Can't create adb path" - echo "$MISC_PATH" > /data/adb/edxp/misc_path || abort "! Can't store configuration path" + MISC_RAND=$(tr -cd 'A-Za-z0-9' < /dev/urandom | head -c16) + MISC_PATH="edxp_${MISC_RAND}" + ui_print " - ${LANG_CUST_INST_CONF_NEW} ${MISC_RAND}" + mkdir -p /data/adb/edxp || abortC "! ${LANG_CUST_ERR_CONF_CREATE}" + echo "$MISC_PATH" > /data/adb/edxp/misc_path || abortC "! ${LANG_CUST_ERR_CONF_STORE}" if [[ -d /data/user_de/0/org.meowcat.edxposed.manager/conf/ ]]; then mkdir -p /data/misc/$MISC_PATH/0/conf cp -r /data/user_de/0/org.meowcat.edxposed.manager/conf/* /data/misc/$MISC_PATH/0/conf/ - set_perm_recursive /data/misc/$MISC_PATH root root 0771 0660 "u:object_r:magisk_file:s0" || abort "! Can't set permission" + set_perm_recursive /data/misc/$MISC_PATH root root 0771 0660 "u:object_r:magisk_file:s0" || abortC "! ${LANG_CUST_ERR_PERM}" fi fi -touch /data/adb/edxp/new_install || abort "! Can't touch new install" -set_perm_recursive /data/adb/edxp root root 0700 0600 "u:object_r:magisk_file:s0" || abort "! Can't set permission" -mkdir -p /data/misc/$MISC_PATH || abort "! Can't create configuration path" -set_perm /data/misc/$MISC_PATH root root 0771 "u:object_r:magisk_file:s0" || abort "! Can't set permission" -echo "rm -rf /data/misc/$MISC_PATH" >> "$MODPATH/uninstall.sh" || abort "! Can't write uninstall.sh" -echo "[[ -f /data/adb/edxp/new_install ]] || rm -rf /data/adb/edxp" >> "$MODPATH/uninstall.sh" || abort "! Can't write uninstall.sh" +touch /data/adb/edxp/new_install || abortC "! ${LANG_CUST_ERR_CONF_FIRST}" +set_perm_recursive /data/adb/edxp root root 0700 0600 "u:object_r:magisk_file:s0" || abortC "! ${LANG_CUST_ERR_PERM}" +mkdir -p /data/misc/$MISC_PATH || abortC "! ${LANG_CUST_ERR_CONF_CREATE}" +set_perm /data/misc/$MISC_PATH root root 0771 "u:object_r:magisk_file:s0" || abortC "! ${LANG_CUST_ERR_PERM}" +echo "rm -rf /data/misc/$MISC_PATH" >> "${MODPATH}/uninstall.sh" || abortC "! ${LANG_CUST_ERR_CONF_UNINST}" +echo "[[ -f /data/adb/edxp/new_install ]] || rm -rf /data/adb/edxp" >> "${MODPATH}/uninstall.sh" || abortC "! ${LANG_CUST_ERR_CONF_UNINST}" - -ui_print "- Copying framework libraries" +ui_print "- ${LANG_CUST_INST_COPY_LIB}" rm -rf "/data/misc/$MISC_PATH/framework" mv "${MODPATH}/system/framework" "/data/misc/$MISC_PATH/framework" -set_perm_recursive /data/misc/$MISC_PATH/framework root root 0755 0644 "u:object_r:magisk_file:s0" || abort "! Can't set permission" +set_perm_recursive /data/misc/$MISC_PATH/framework root root 0755 0644 "u:object_r:magisk_file:s0" || abortC "! ${LANG_CUST_ERR_PERM}" mv "${MODPATH}/system/lib/libriru_edxp.so" "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" if [[ "${IS64BIT}" == true ]]; then @@ -315,16 +227,19 @@ if [[ "${VARIANTS}" == "SandHook" ]]; then fi fi -ui_print "- Resetting libraries path" +ui_print "- ${LANG_CUST_INST_RAND_LIB_1}" +ui_print " - ${LANG_CUST_INST_RAND_LIB_2}" +ui_print " - ${LANG_CUST_INST_RAND_LIB_3}" sed -i 's:libriru_edxp.so:'"${LIB_RIRU_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" sed -i 's:libsandhook.edxp.so:'"${LIB_SANDHOOK_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +ui_print " - ${LANG_CUST_INST_RAND_LIB_4}" if [[ "${IS64BIT}" == true ]]; then sed -i 's:libriru_edxp.so:'"${LIB_RIRU_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" sed -i 's:libsandhook.edxp.so:'"${LIB_SANDHOOK_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" fi -ui_print "- Removing old configuration" +ui_print "- ${LANG_CUST_INST_REM_OLDCONF}" if [[ -f "${RIRU_MODULES}/edxp.prop" ]]; then OLD_CONFIG=$(cat "${RIRU_MODULES}/edxp.prop") @@ -336,32 +251,18 @@ if [[ -e "${RIRU_MODULES}/edxp" ]]; then fi # extract Riru files -ui_print "- Extracting Riru files" -[ -d "$RIRU_TARGET" ] || mkdir -p "$RIRU_TARGET" || abort "! Can't create $RIRU_TARGET" +ui_print "- ${LANG_CUST_INST_COPT_EXTRA}" -rm -f "$RIRU_TARGET/module.prop.new" -extract "$ZIPFILE" 'riru/module.prop.new' "$RIRU_TARGET" -mv "$RIRU_TARGET/riru/module.prop.new" "$RIRU_TARGET/module.prop" -rm -rf "$RIRU_TARGET/riru/" -set_perm "$RIRU_TARGET/module.prop" 0 0 0600 $RIRU_SECONTEXT - -ui_print "- Copying extra files" - -[[ -d "${RIRU_TARGET}" ]] || mkdir -p "${RIRU_TARGET}" || abort "! Can't mkdir -p ${RIRU_TARGET}" +[[ -d "${RIRU_TARGET}" ]] || mkdir -p "${RIRU_TARGET}" || abortC "! ${LANG_CUST_ERR_EXTRA_CREATE} ${RIRU_TARGET}" echo "${RIRU_EDXP}">"${RIRU_MODULES}/edxp.prop" -rm "${RIRU_TARGET}/module.prop" +rm -f "${RIRU_TARGET}/module.prop" -cp "${MODPATH}/module.prop" "${RIRU_TARGET}/module.prop" || abort "! Can't create ${RIRU_TARGET}/module.prop" +cp "${MODPATH}/module.prop" "${RIRU_TARGET}/module.prop" || abortC "! ${LANG_CUST_ERR_EXTRA_CREATE} ${RIRU_TARGET}/module.prop" + +set_perm "$RIRU_TARGET/module.prop" 0 0 0600 $RIRU_SECONTEXT || abortC "! ${LANG_CUST_ERR_PERM}" set_perm_recursive "${MODPATH}" 0 0 0755 0644 -ui_print "- Welcome to EdXposed ${VERSION}!" +ui_print "- ${LANG_CUST_INST_DONE} EdXposed ${VERSION}!" -# before Magisk 16e4c67, sepolicy.rule is copied on the second reboot -if [ "$MAGISK_VER_CODE" -lt 21006 ]; then - ui_print "*******************************" - ui_print "- Magisk version below 21006." - ui_print "- You have to manually reboot twice." - ui_print "*******************************" -fi diff --git a/edxp-core/template_override/post-fs-data.sh b/edxp-core/template_override/post-fs-data.sh index 5b24c807..607c539a 100644 --- a/edxp-core/template_override/post-fs-data.sh +++ b/edxp-core/template_override/post-fs-data.sh @@ -13,7 +13,6 @@ MODDIR=${0%/*} RIRU_PATH="/data/adb/riru" RIRU_PROP="$(magisk --path)/.magisk/modules/riru-core/module.prop" TARGET="${RIRU_PATH}/modules" -[[ "$(getenforce)" == "Enforcing" ]] && ENFORCE=true || ENFORCE=false EDXP_VERSION=$(grep_prop version "${MODDIR}/module.prop") EDXP_APICODE=$(grep_prop api "${MODDIR}/module.prop") @@ -42,7 +41,7 @@ MAGISK_VERCODE=$(magisk -V) #PATH_PREFIX="/data/user_de/0/" #PATH_PREFIX_LEGACY="/data/user/0/" -sepolicy() { +livePatch() { # Should be deprecated now. This is for debug only. supolicy --live "allow system_server system_server process execmem" \ "allow system_server system_server memprotect mmap_zero" @@ -102,32 +101,32 @@ start_log_cather () { if [[ ${START_NEW} == false ]]; then return fi - touch ${LOG_FILE} - touch ${PID_FILE} - echo "--------- beginning of head">>${LOG_FILE} - echo "EdXposed Log">>${LOG_FILE} - echo "Powered by Log Catcher">>${LOG_FILE} - echo "QQ support group: 855219808">>${LOG_FILE} - echo "Telegram support group: @Code_Of_MeowCat">>${LOG_FILE} - echo "Telegram channel: @EdXposed">>${LOG_FILE} - echo "--------- beginning of information">>${LOG_FILE} - echo "Manufacturer: ${MANUFACTURER}">>${LOG_FILE} - echo "Brand: ${BRAND}">>${LOG_FILE} - echo "Device: ${DEVICE}">>${LOG_FILE} - echo "Product: ${PRODUCT}">>${LOG_FILE} - echo "Model: ${MODEL}">>${LOG_FILE} - echo "Fingerprint: ${FINGERPRINT}">>${LOG_FILE} - echo "ROM description: ${BUILD_DESC}">>${LOG_FILE} - echo "Architecture: ${ARCH}">>${LOG_FILE} - echo "Android build: ${BUILD}">>${LOG_FILE} - echo "Android version: ${ANDROID}">>${LOG_FILE} - echo "Android sdk: ${ANDROID_SDK}">>${LOG_FILE} - echo "EdXposed version: ${EDXP_VERSION}">>${LOG_FILE} - echo "EdXposed api: ${EDXP_APICODE}">>${LOG_FILE} - echo "Riru version: ${RIRU_VERSION} (${RIRU_VERCODE})">>${LOG_FILE} - echo "Riru api: ${RIRU_APICODE}">>${LOG_FILE} - echo "Magisk: ${MAGISK_VERSION%:*} (${MAGISK_VERCODE})">>${LOG_FILE} - loop_logcat -f ${LOG_FILE} *:S ${LOG_TAG_FILTERS} & + touch "${LOG_FILE}" + touch "${PID_FILE}" + echo "--------- beginning of head">>"${LOG_FILE}" + echo "EdXposed Log">>"${LOG_FILE}" + echo "Powered by Log Catcher">>"${LOG_FILE}" + echo "QQ support group: 855219808">>"${LOG_FILE}" + echo "Telegram support group: @Code_Of_MeowCat">>"${LOG_FILE}" + echo "Telegram channel: @EdXposed">>"${LOG_FILE}" + echo "--------- beginning of information">>"${LOG_FILE}" + echo "Manufacturer: ${MANUFACTURER}">>"${LOG_FILE}" + echo "Brand: ${BRAND}">>"${LOG_FILE}" + echo "Device: ${DEVICE}">>"${LOG_FILE}" + echo "Product: ${PRODUCT}">>"${LOG_FILE}" + echo "Model: ${MODEL}">>"${LOG_FILE}" + echo "Fingerprint: ${FINGERPRINT}">>"${LOG_FILE}" + echo "ROM description: ${BUILD_DESC}">>"${LOG_FILE}" + echo "Architecture: ${ARCH}">>"${LOG_FILE}" + echo "Android build: ${BUILD}">>"${LOG_FILE}" + echo "Android version: ${ANDROID}">>"${LOG_FILE}" + echo "Android sdk: ${ANDROID_SDK}">>"${LOG_FILE}" + echo "EdXposed version: ${EDXP_VERSION}">>"${LOG_FILE}" + echo "EdXposed api: ${EDXP_APICODE}">>"${LOG_FILE}" + echo "Riru version: ${RIRU_VERSION} (${RIRU_VERCODE})">>"${LOG_FILE}" + echo "Riru api: ${RIRU_APICODE}">>"${LOG_FILE}" + echo "Magisk: ${MAGISK_VERSION%:*} (${MAGISK_VERCODE})">>"${LOG_FILE}" + loop_logcat -f "${LOG_FILE}" *:S "${LOG_TAG_FILTERS}" & LOG_PID=$! echo "${LOG_PID}">"${LOG_PATH}/${LOG_FILE_NAME}.pid" } @@ -140,17 +139,22 @@ cp -f "/system/bin/app_process32" "${MODDIR}/system/bin/app_process32" [[ -f "/system/bin/app_process64" ]] && cp -f "/system/bin/app_process64" "${MODDIR}/system/bin/app_process64" # install stub if manager not installed -if [[ "$(pm path org.meowcat.edxposed.manager)" == "" && "$(pm path de.robv.android.xposed.installer)" == "" ]]; then +if [[ "$(pm path org.meowcat.edxposed.manager 2>&1)" == "" && "$(pm path de.robv.android.xposed.installer 2>&1)" == "" ]]; then NO_MANAGER=true fi if [[ ${NO_MANAGER} == true ]]; then - ${ENFORCE} && setenforce 0 - pm install "${MODDIR}/EdXposed.apk" - ${ENFORCE} && setenforce 1 + cp "${MODDIR}/EdXposed.apk" "/data/local/tmp/EdXposed.apk" + LOCAL_PATH_INFO=$(ls -ldZ "/data/local/tmp") + LOCAL_PATH_OWNER=$(echo "${LOCAL_PATH_INFO}" | awk -F " " '{print $3":"$4}') + LOCAL_PATH_CONTEXT=$(echo "${LOCAL_PATH_INFO}" | awk -F " " '{print $5}') + chcon "${LOCAL_PATH_CONTEXT}" "/data/local/tmp/EdXposed.apk" + chown "${LOCAL_PATH_OWNER}" "/data/local/tmp/EdXposed.apk" + pm install "/data/local/tmp/EdXposed.apk" + rm -f "/data/local/tmp/EdXposed.apk" fi # execute live patch if rule not found -[[ -f "${MODDIR}/sepolicy.rule" ]] || sepolicy +[[ -f "${MODDIR}/sepolicy.rule" ]] || livePatch # start_verbose_log_catcher start_log_cather all "EdXposed:V XSharedPreferences:V EdXposed-Bridge:V EdXposedManager:V XposedInstaller:V" true ${LOG_VERBOSE} @@ -158,7 +162,6 @@ start_log_cather all "EdXposed:V XSharedPreferences:V EdXposed-Bridge:V EdXposed # start_bridge_log_catcher start_log_cather error "XSharedPreferences:V EdXposed-Bridge:V" true true - if [[ -f "/data/adb/riru/modules/edxp.prop" ]]; then CONFIG=$(cat "/data/adb/riru/modules/edxp.prop") [[ -d "${TARGET}/${CONFIG}" ]] || mkdir -p "${TARGET}/${CONFIG}" diff --git a/edxp-core/template_override/riru.sh b/edxp-core/template_override/riru.sh deleted file mode 100644 index bd1d6ba8..00000000 --- a/edxp-core/template_override/riru.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/sbin/sh -RIRU_PATH="/data/adb/riru" -RIRU_MODULE_ID="%%%RIRU_MODULE_ID%%%" -RIRU_MODULE_PATH="$RIRU_PATH/modules/$RIRU_MODULE_ID" -RIRU_SECONTEXT="u:object_r:magisk_file:s0" - -check_riru_version() { - RIRU_MIN_API_VERSION=%%%RIRU_MIN_API_VERSION%%% - RIRU_MIN_VERSION_NAME="%%%RIRU_MIN_VERSION_NAME%%%" - - if [ ! -f "$RIRU_PATH/api_version" ] && [ ! -f "$RIRU_PATH/api_version.new" ]; then - ui_print "*********************************************************" - ui_print "! Riru is not installed" - ui_print "! Please install Riru from Magisk Manager or https://github.com/RikkaApps/Riru/releases" - abort "*********************************************************" - fi - RIRU_API_VERSION=$(cat "$RIRU_PATH/api_version.new") || RIRU_API_VERSION=$(cat "$RIRU_PATH/api_version") || RIRU_API_VERSION=0 - [ "$RIRU_API_VERSION" -eq "$RIRU_API_VERSION" ] || RIRU_API_VERSION=0 - ui_print "- Riru API version: $RIRU_API_VERSION" - if [ "$RIRU_API_VERSION" -lt $RIRU_MIN_API_VERSION ]; then - ui_print "*********************************************************" - ui_print "! Riru $RIRU_MIN_VERSION_NAME or above is required" - ui_print "! Please upgrade Riru from Magisk Manager or https://github.com/RikkaApps/Riru/releases" - abort "*********************************************************" - fi -} - -check_architecture() { - if [ "$ARCH" != "arm" ] && [ "$ARCH" != "arm64" ] && [ "$ARCH" != "x86" ] && [ "$ARCH" != "x64" ]; then - abort "! Unsupported platform: $ARCH" - else - ui_print "- Device platform: $ARCH" - fi -} \ No newline at end of file diff --git a/edxp-core/template_override/service.sh b/edxp-core/template_override/service.sh new file mode 100644 index 00000000..d1680fc2 --- /dev/null +++ b/edxp-core/template_override/service.sh @@ -0,0 +1,8 @@ +#!/system/bin/sh + +MODDIR=${0%/*} + +if [[ -f "${MODDIR}/reboot_twice_flag" ]]; then + rm -f "${MODDIR}/reboot_twice_flag" + reboot +fi \ No newline at end of file diff --git a/edxp-core/template_override/util_functions.sh b/edxp-core/template_override/util_functions.sh new file mode 100644 index 00000000..23ae2534 --- /dev/null +++ b/edxp-core/template_override/util_functions.sh @@ -0,0 +1,77 @@ +RIRU_PATH="/data/adb/riru" +RIRU_MODULE_ID="%%%RIRU_MODULE_ID%%%" +RIRU_MODULE_PATH="$RIRU_PATH/modules/$RIRU_MODULE_ID" +RIRU_SECONTEXT="u:object_r:magisk_file:s0" + +check_riru_version() { + RIRU_MIN_API_VERSION=%%%RIRU_MIN_API_VERSION%%% + RIRU_MIN_VERSION_NAME="%%%RIRU_MIN_VERSION_NAME%%%" + + if [ ! -f "$RIRU_PATH/api_version" ] && [ ! -f "$RIRU_PATH/api_version.new" ]; then + ui_print "${POUNDS}" + ui_print "! ${LANG_UTIL_ERR_RIRU_NOT_FOUND_1}" + ui_print "! ${LANG_UTIL_ERR_RIRU_NOT_FOUND_2}" + [[ ${BOOTMODE} == true ]] && am start -a android.intent.action.VIEW -d https://github.com/RikkaApps/Riru/releases + abortC "${POUNDS}" + fi + RIRU_API_VERSION=$(cat "$RIRU_PATH/api_version.new") || RIRU_API_VERSION=$(cat "$RIRU_PATH/api_version") || RIRU_API_VERSION=0 + [ "$RIRU_API_VERSION" -eq "$RIRU_API_VERSION" ] || RIRU_API_VERSION=0 + ui_print "- Riru API ${LANG_CUST_INST_VERSION}: $RIRU_API_VERSION" + if [ "$RIRU_API_VERSION" -lt $RIRU_MIN_API_VERSION ]; then + ui_print "${POUNDS}" + ui_print "! Riru $RIRU_MIN_VERSION_NAME ${LANG_UTIL_ERR_RIRU_LOW_1}" + ui_print "! ${LANG_UTIL_ERR_RIRU_LOW_2}" + [[ ${BOOTMODE} == true ]] && am start -a android.intent.action.VIEW -d https://github.com/RikkaApps/Riru/releases + abortC "${POUNDS}" + fi +} + +check_magisk_version() { + ui_print "- Magisk ${LANG_CUST_INST_VERSION}: ${MAGISK_VER_CODE}" + # before Magisk 16e4c67, sepolicy.rule is copied on the second reboot + if [[ "$MAGISK_VER_CODE" -lt 21006 ]]; then + touch "${MODPATH}/reboot_twice_flag" + fi +} + +require_yahfa() { + ui_print "${POUNDS}" + ui_print "! ${LANG_UTIL_ERR_REQUIRE_YAHFA_1}" + ui_print "! ${LANG_UTIL_ERR_REQUIRE_YAHFA_2}" + ui_print "! ${LANG_UTIL_ERR_REQUIRE_YAHFA_3}" + abortC "${POUNDS}" +} + +require_new_android() { + ui_print "${POUNDS}" + ui_print "! ${LANG_UTIL_ERR_ANDROID_UNSUPPORT_1} ${1} ${LANG_UTIL_ERR_ANDROID_UNSUPPORT_2}" + ui_print "! ${LANG_UTIL_ERR_ANDROID_UNSUPPORT_3}" + [[ ${BOOTMODE} == true ]] && am start -a android.intent.action.VIEW -d https://github.com/ElderDrivers/EdXposed/wiki/Available-Android-versions + abortC "${POUNDS}" +} + +edxp_check_architecture() { + if [[ "${MODID}" == "riru_edxposed_sandhook" ]]; then + VARIANTS="SandHook" + else + VARIANTS="YAHFA" + fi + if [[ "${ARCH}" != "arm" && "${ARCH}" != "arm64" && "${ARCH}" != "x86" && "${ARCH}" != "x64" ]]; then + abortC "! ${LANG_UTIL_ERR_PLATFORM_UNSUPPORT}: ${ARCH}" + else + ui_print "- ${LANG_UTIL_PLATFORM}: ${ARCH}" + if [[ "${ARCH}" == "x86" || "${ARCH}" == "x64" ]]; then + if [[ "${VARIANTS}" == "SandHook" ]]; then + require_yahfa + fi + fi + fi +} + +check_android_version() { + if [[ ${API} -ge 26 ]]; then + ui_print "- Android SDK ${LANG_CUST_INST_VERSION}: ${API}" + else + require_new_android "${API}" + fi +} \ No newline at end of file diff --git a/edxp-core/template_override/verify.sh b/edxp-core/template_override/verify.sh index e78bdd10..b99291d4 100644 --- a/edxp-core/template_override/verify.sh +++ b/edxp-core/template_override/verify.sh @@ -4,7 +4,7 @@ mkdir "$TMPDIR_FOR_VERIFY" abort_verify() { ui_print "*********************************************************" ui_print "! $1" - ui_print "! This zip may be corrupted, please try downloading again" + ui_print "! ${LANG_VERIFY_ERR_NOTICE}" abort "*********************************************************" } @@ -29,11 +29,11 @@ extract() { fi unzip $opts "$zip" "$file" -d "$dir" >&2 - [ -f "$file_path" ] || abort_verify "$file not exists" + [ -f "$file_path" ] || abort_verify "$file ${LANG_VERIFY_ERR_NOT_EXIST}" unzip $opts "$zip" "$file.s" -d "$TMPDIR_FOR_VERIFY" >&2 - [ -f "$hash_path" ] || abort_verify "$file.s not exists" + [ -f "$hash_path" ] || abort_verify "$file.s ${LANG_VERIFY_ERR_NOT_EXIST}" - (echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "Failed to verify $file" - ui_print "- Verified $file" >&1 + (echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "${LANG_VERIFY_ERR_MISMATCH} $file" + ui_print "- ${LANG_VERIFY_SUCCESS} $file" >&1 } \ No newline at end of file diff --git a/edxp-core/template_override/zh_CN.sh b/edxp-core/template_override/zh_CN.sh new file mode 100644 index 00000000..43dce51f --- /dev/null +++ b/edxp-core/template_override/zh_CN.sh @@ -0,0 +1,53 @@ +# Simplified Chinese (China) language file +# Load this shell will replace en_US lang + +# customize +LANG_CUST_INST_VERSION="版本" +LANG_CUST_INST_EXT_FILES="正在解压模块文件" +LANG_CUST_INST_EXT_LIB_X86="正在解压 x86 运行库" +LANG_CUST_INST_EXT_LIB_X64="正在解压 x86_64 运行库" +LANG_CUST_INST_EXT_LIB_ARM="正在解压 arm 运行库" +LANG_CUST_INST_EXT_LIB_ARM64="正在解压 arm64 运行库" +LANG_CUST_INST_STUB="正在预装管理器" +LANG_CUST_INST_CONF_CREATE="正在创建配置目录" +LANG_CUST_INST_CONF_OLD="使用旧目录" +LANG_CUST_INST_CONF_NEW="使用新目录" +LANG_CUST_INST_COPY_LIB="正在复制框架运行库" +LANG_CUST_INST_RAND_LIB_1="正在重设运行库路径" +LANG_CUST_INST_RAND_LIB_2="可能会耗费一些时间,请耐心等待" +LANG_CUST_INST_RAND_LIB_3="正在处理 32 位运行库" +LANG_CUST_INST_RAND_LIB_4="正在处理 64 位运行库" +LANG_CUST_INST_REM_OLDCONF="正在移除老旧配置" +LANG_CUST_INST_COPT_EXTRA="正在复制文件" +LANG_CUST_INST_DONE="欢迎使用" + +LANG_CUST_ERR_VERIFY_FAIL="无法解压校验工具!" +LANG_CUST_ERR_STUB="管理器预装失败! 请手动安装 EdXposed Manager" +LANG_CUST_ERR_PERM="无法设置权限" +LANG_CUST_ERR_CONF_CREATE="无法创建配置路径" +LANG_CUST_ERR_CONF_STORE="无法写入配置路径" +LANG_CUST_ERR_CONF_FIRST="无法创建首次安装标识" +LANG_CUST_ERR_CONF_UNINST="无法写入卸载脚本" +LANG_CUST_ERR_EXTRA_CREATE="无法创建" + +# verify +LANG_VERIFY_SUCCESS="已验证" + +LANG_VERIFY_ERR_MISMATCH="校验失败" +LANG_VERIFY_ERR_NOT_EXIST="不存在" +LANG_VERIFY_ERR_NOTICE="模块可能已被损坏,请从官方重新下载" + +# util_functions +LANG_UTIL_PLATFORM="设备平台" + +LANG_UTIL_ERR_RIRU_NOT_FOUND_1="未安装" +LANG_UTIL_ERR_RIRU_NOT_FOUND_2="请先从 Magisk Manager 中安装 Riru" +LANG_UTIL_ERR_RIRU_LOW_1="或更高版本需要被安装" +LANG_UTIL_ERR_RIRU_LOW_2="请先从 Magisk Manager 中升级 Riru" +LANG_UTIL_ERR_REQUIRE_YAHFA_1="侦测到 x86 或 x86_64 架构" +LANG_UTIL_ERR_REQUIRE_YAHFA_2="仅 YAHFA 支持 x86 或 x86_64 架构的设备" +LANG_UTIL_ERR_REQUIRE_YAHFA_3="可从 'Magisk Manager' 或 'EdXposed Manager' 中下载" +LANG_UTIL_ERR_ANDROID_UNSUPPORT_1="不支持的 Android 版本" +LANG_UTIL_ERR_ANDROID_UNSUPPORT_2="(Oreo 以下版本)" +LANG_UTIL_ERR_ANDROID_UNSUPPORT_3="从我们的 GitHub Wiki 中了解更多" +LANG_UTIL_ERR_PLATFORM_UNSUPPORT="不支持的设备平台"