diff --git a/build.sh b/build.sh index 343dd2f..82af645 100755 --- a/build.sh +++ b/build.sh @@ -80,10 +80,17 @@ for table_name in $(toml_get_table_names); do fi } app_args[patcher_args]="$(join_args "${excluded_patches}" -e) $(join_args "${included_patches}" -i)" - [ "$exclusive_patches" = true ] && app_args[patcher_args]="${app_args[patcher_args]} --exclusive" + [ "$exclusive_patches" = true ] && app_args[patcher_args]+=" --exclusive" if [ "${app_args[microg_patch]}" ] && [[ "${app_args[patcher_args]}" = *"${app_args[microg_patch]}"* ]]; then abort "ERROR: Do not include microg in included or excluded patches list" fi + if [ "$LOGGING_F" = true ]; then + logf=logs/"${table_name,,}.log" + : >"$logf" + (build_rv 2>&1 app_args | tee "$logf") & + else + build_rv app_args & + fi done wait diff --git a/utils.sh b/utils.sh index df42443..92c7ebf 100755 --- a/utils.sh +++ b/utils.sh @@ -6,11 +6,7 @@ TEMP_DIR="temp" BUILD_DIR="build" PKGS_LIST="${TEMP_DIR}/module-pkgs" -if [ "${GITHUB_TOKEN+x}" ]; then - GH_AUTH_HEADER="Authorization: token ${GITHUB_TOKEN}" -else - GH_AUTH_HEADER="" -fi +if [ "${GITHUB_TOKEN:-}" ]; then GH_HEADER="Authorization: token ${GITHUB_TOKEN}"; else GH_HEADER=; fi GITHUB_REPOSITORY=${GITHUB_REPOSITORY:-"j-hc/revanced-magisk-module"} NEXT_VER_CODE=${NEXT_VER_CODE:-$(date +'%Y%m%d')} WGET_HEADER="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0" @@ -66,7 +62,7 @@ get_prebuilts() { } get_cmpr() { - mkdir -p revanced-magisk/bin/arm64 revanced-magisk/bin/arm + mkdir -p ${MODULE_TEMPLATE_DIR}/bin/arm64 ${MODULE_TEMPLATE_DIR}/bin/arm dl_if_dne "${MODULE_TEMPLATE_DIR}/bin/arm64/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-arm64-v8a" dl_if_dne "${MODULE_TEMPLATE_DIR}/bin/arm/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-armeabi-v7a" } @@ -89,7 +85,7 @@ set_prebuilts() { } req() { wget -nv -O "$2" --header="$WGET_HEADER" "$1"; } -gh_req() { wget -nv -O "$2" --header="$GH_AUTH_HEADER" "$1"; } +gh_req() { wget -nv -O "$2" --header="$GH_HEADER" "$1"; } log() { echo -e "$1 " >>build.md; } get_largest_ver() { read -r max @@ -195,6 +191,7 @@ patch_apk() { else eval "$cmd" fi + [ -f "$patched_apk" ] } zip_module() { @@ -214,6 +211,75 @@ build_rv() { local app_name_l=${app_name,,} local dl_from=${args[dl_from]} local arch=${args[arch]} + local p_patcher_args=${args[patcher_args]} + + if [ "$dl_from" = apkmirror ]; then + pkg_name=$(get_apkmirror_pkg_name "${args[apkmirror_dlurl]}") + elif [ "$dl_from" = uptodown ]; then + uptwod_resp=$(get_uptodown_resp "${args[uptodown_dlurl]}") + pkg_name=$(get_uptodown_pkg_name "${args[uptodown_dlurl]}") + fi + + local get_latest_ver=false + if [ "$version_mode" = auto ]; then + version=$(get_patch_last_supported_ver "$pkg_name") + if [ -z "$version" ]; then get_latest_ver=true; fi + elif [ "$version_mode" = latest ]; then + get_latest_ver=true + p_patcher_args+=" --experimental" + else + version=$version_mode + p_patcher_args+=" --experimental" + fi + if [ $get_latest_ver = true ]; then + local apkmvers uptwodvers + if [ "$dl_from" = apkmirror ]; then + apkmvers=$(get_apkmirror_vers "${args[apkmirror_dlurl]##*/}" "${args[allow_alpha_version]}") + version=$(echo "$apkmvers" | get_largest_ver) + [ "$version" ] || version=$(echo "$apkmvers" | head -1) + elif [ "$dl_from" = uptodown ]; then + uptwodvers=$(get_uptodown_vers "$uptwod_resp") + version=$(echo "$uptwodvers" | get_largest_ver) + [ "$version" ] || version=$(echo "$uptwodvers" | head -1) + fi + fi + if [ -z "$version" ]; then + echo "ERROR: empty version" + return 1 + fi + echo "Choosing version '${version}' (${app_name})" + + local stock_apk="${TEMP_DIR}/${pkg_name}-stock-${version// /}-${arch}.apk" + if [ ! -f "$stock_apk" ]; then + if [ "$dl_from" = apkmirror ]; then + echo "Downloading '${app_name}' from APKMirror" + if [ "$arch" = "all" ]; then + apkmirror_regex="APK[^@]*@\([^#]*\)" + elif [ "$arch" = "arm64-v8a" ]; then + apkmirror_regex='arm64-v8a[^@]*@\([^"]*\)' + elif [ "$arch" = "arm-v7a" ]; then + apkmirror_regex='armeabi-v7a[^@]*@\([^"]*\)' + fi + if ! dl_apkmirror "${args[apkmirror_dlurl]}" "$version" "$apkmirror_regex" "$stock_apk"; then + echo "ERROR: Could not find any release of '${app_name}' with version '${version}'" + return 1 + fi + elif [ "$dl_from" = uptodown ]; then + echo "Downloading '${app_name}' from Uptodown" + if ! dl_uptodown "$uptwod_resp" "$version" "$stock_apk"; then + echo "ERROR: Could not download ${app_name} from Uptodown" + return 1 + fi + fi + fi + if [ "${arch}" = "all" ]; then + grep -q "${app_name}:" build.md || log "${app_name}: ${version}" + else + grep -q "${app_name} (${arch}):" build.md || log "${app_name} (${arch}): ${version}" + fi + if jq -r ".[] | select(.compatiblePackages[].name==\"${pkg_name}\") | .dependencies[]" "$RV_PATCHES_JSON" | grep -qFx integrations; then + p_patcher_args+=" -m ${RV_INTEGRATIONS_APK}" + fi if [ "$mode_arg" = module ]; then build_mode_arr=(module) @@ -222,127 +288,56 @@ build_rv() { elif [ "$mode_arg" = both ]; then build_mode_arr=(apk module) fi - for build_mode in "${build_mode_arr[@]}"; do - patcher_args="${args[patcher_args]}" - echo -n "Building '${app_name}' (${arch}) in " - if [ "$build_mode" = module ]; then - echo "'module' mode" - if [ "${args[microg_patch]}" ]; then - patcher_args="$patcher_args -e ${args[microg_patch]} --unsigned --rip-lib arm64-v8a --rip-lib armeabi-v7a" - else - patcher_args="$patcher_args --unsigned --rip-lib arm64-v8a --rip-lib armeabi-v7a" - fi - else - echo "'APK' mode" - fi - if [ "$dl_from" = apkmirror ]; then - pkg_name=$(get_apkmirror_pkg_name "${args[apkmirror_dlurl]}") - elif [ "$dl_from" = uptodown ]; then - uptwod_resp=$(get_uptodown_resp "${args[uptodown_dlurl]}") - pkg_name=$(get_uptodown_pkg_name "${args[uptodown_dlurl]}") - fi - - local get_latest_ver=false - if [ "$version_mode" = auto ]; then - version=$(get_patch_last_supported_ver "$pkg_name") - if [ -z "$version" ]; then get_latest_ver=true; fi - elif [ "$version_mode" = latest ]; then - get_latest_ver=true - patcher_args="$patcher_args --experimental" - else - version=$version_mode - patcher_args="$patcher_args --experimental" - fi - if [ $get_latest_ver = true ]; then - local apkmvers uptwodvers - if [ "$dl_from" = apkmirror ]; then - apkmvers=$(get_apkmirror_vers "${args[apkmirror_dlurl]##*/}" "${args[allow_alpha_version]}") - version=$(echo "$apkmvers" | get_largest_ver) - [ "$version" ] || version=$(echo "$apkmvers" | head -1) - elif [ "$dl_from" = uptodown ]; then - uptwodvers=$(get_uptodown_vers "$uptwod_resp") - version=$(echo "$uptwodvers" | get_largest_ver) - [ "$version" ] || version=$(echo "$uptwodvers" | head -1) - fi - fi - if [ -z "$version" ]; then - echo "ERROR: empty version" - return 1 - fi - echo "Choosing version '${version}' (${app_name})" - - local stock_apk="${TEMP_DIR}/${pkg_name}-stock-${version// /}-${arch}.apk" - local apk_output="${BUILD_DIR}/${app_name_l}-revanced-v${version}-${arch}.apk" + patcher_args=$p_patcher_args + echo "Building '${app_name}' (${arch}) in '$build_mode' mode" if [ "${args[microg_patch]}" ]; then local patched_apk="${TEMP_DIR}/${app_name_l}-revanced-${version}-${arch}-${build_mode}.apk" + if [ "$build_mode" = apk ]; then + patcher_args+=" -i ${args[microg_patch]}" + elif [ "$build_mode" = module ]; then + patcher_args+=" -e ${args[microg_patch]}" + fi else local patched_apk="${TEMP_DIR}/${app_name_l}-revanced-${version}-${arch}.apk" fi - if [ ! -f "$stock_apk" ]; then - if [ "$dl_from" = apkmirror ]; then - echo "Downloading '${app_name}' from APKMirror" - if [ "$arch" = "all" ]; then - apkmirror_regex="APK[^@]*@\([^#]*\)" - elif [ "$arch" = "arm64-v8a" ]; then - apkmirror_regex='arm64-v8a[^@]*@\([^"]*\)' - elif [ "$arch" = "arm-v7a" ]; then - apkmirror_regex='armeabi-v7a[^@]*@\([^"]*\)' - fi - if ! dl_apkmirror "${args[apkmirror_dlurl]}" "$version" "$apkmirror_regex" "$stock_apk"; then - echo "ERROR: Could not find any release of '${app_name}' with version '${version}'" - return 1 - fi - elif [ "$dl_from" = uptodown ]; then - echo "Downloading '${app_name}' from Uptodown" - if ! dl_uptodown "$uptwod_resp" "$version" "$stock_apk"; then - echo "ERROR: Could not download ${app_name} from Uptodown" - return 1 - fi + if [ "$build_mode" = module ]; then + patcher_args+=" --unsigned --rip-lib arm64-v8a --rip-lib armeabi-v7a" + fi + if [ ! -f "$patched_apk" ]; then + if ! patch_apk "$stock_apk" "$patched_apk" "$patcher_args"; then + echo "BUILDING '${app_name}' FAILED" + return fi fi - - if [ "${arch}" = "all" ]; then - grep -q "${app_name}:" build.md || log "${app_name}: ${version}" - else - grep -q "${app_name} (${arch}):" build.md || log "${app_name} (${arch}): ${version}" - fi - - if jq -r ".[] | select(.compatiblePackages[].name==\"${pkg_name}\") | .dependencies[]" "$RV_PATCHES_JSON" | grep -qFx integrations; then - patcher_args="$patcher_args -m ${RV_INTEGRATIONS_APK}" - fi - if [ ! -f "$patched_apk" ]; then patch_apk "$stock_apk" "$patched_apk" "$patcher_args"; fi - if [ ! -f "$patched_apk" ]; then - echo "BUILDING '${app_name}' FAILED" - return - fi if [ "$build_mode" = apk ]; then + local apk_output="${BUILD_DIR}/${app_name_l}-revanced-v${version}-${arch}.apk" cp -f "$patched_apk" "$apk_output" echo "Built ${app_name} (${arch}) (non-root): '${apk_output}'" continue fi - if [ "$BUILD_MINDETACH_MODULE" = true ] && ! grep -q "$pkg_name" $PKGS_LIST; then echo "$pkg_name" >>$PKGS_LIST; fi - - declare -r base_template=$(mktemp -d -p $TEMP_DIR) + local base_template upj module_prop_name + base_template=$(mktemp -d -p $TEMP_DIR) cp -a $MODULE_TEMPLATE_DIR/. "$base_template" + if [ "$BUILD_MINDETACH_MODULE" = true ] && ! grep -q "$pkg_name" $PKGS_LIST; then echo "$pkg_name" >>$PKGS_LIST; fi uninstall_sh "$pkg_name" "$base_template" service_sh "$pkg_name" "$version" "$base_template" customize_sh "$pkg_name" "$version" "$base_template" if [ "$arch" = "all" ]; then - local upj="${app_name_l}-update.json" + upj="${app_name_l}-update.json" else - local upj="${app_name_l}-${arch}-update.json" + upj="${app_name_l}-${arch}-update.json" fi - if [ "${args[module_prop_name]}" ]; then + if [ -z "${args[module_prop_name]}" ]; then if [ "$arch" = "all" ]; then - local module_prop_name="${app_name_l}-rv-jhc-magisk" + module_prop_name="${app_name_l}-rv-jhc-magisk" else - local module_prop_name="${app_name_l}-${arch}-rv-jhc-magisk" + module_prop_name="${app_name_l}-${arch}-rv-jhc-magisk" fi else - local module_prop_name=${args[module_prop_name]} + module_prop_name=${args[module_prop_name]} fi module_prop \ "$module_prop_name" \