From c7369f97007d4fa097434bf499d7a82b7dfc3564 Mon Sep 17 00:00:00 2001
From: j-hc <25510067+j-hc@users.noreply.github.com>
Date: Wed, 7 Sep 2022 23:43:27 +0300
Subject: [PATCH] refactor stuff
---
README.md | 1 +
build.conf | 3 -
build.sh | 4 +-
utils.sh | 318 ++++++++++++++++++++++++++---------------------------
4 files changed, 161 insertions(+), 165 deletions(-)
diff --git a/README.md b/README.md
index dd17856..0f7d8e3 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,7 @@ The [**mindetach module**](https://github.com/j-hc/mindetach-magisk) in the rele
## Installation
* Simply flash the module, you do not need to install YouTube or Music beforehand. Everything is handled by the module.
* No need for a reboot after the installation. YouTube or Music will be mounted immediately.
+ * x86 and x86_64 arches are not supported!
## Updating
The modules support Magisk update which means you will receive updates from your Magisk app, downloading from github releases and reflashing is not necessary.
diff --git a/build.conf b/build.conf
index cfb2f0e..1680932 100644
--- a/build.conf
+++ b/build.conf
@@ -17,7 +17,4 @@ BUILD_MINDETACH_MODULE=true
MOUNT_DELAY=1 # some low-end phones *cannot mount apks on boot* without a delay. increase to something like 20 if needed.
ENABLE_MAGISK_UPDATE=true # set this to false if you do not want to receive updates from magisk app
-# this is the repo to fallback for magisk update json if you are not building on github actions ↓
-GITHUB_REPO_FALLBACK="j-hc/revanced-magisk-module"
-
UPDATE_PREBUILTS=true # dont touch this
diff --git a/build.sh b/build.sh
index f06135c..741db92 100755
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,6 @@
-#!/bin/bash
+#!/usr/bin/env bash
-set -euo pipefail
+set -eu -o pipefail
source build.conf
source utils.sh
diff --git a/utils.sh b/utils.sh
index 4c9c882..27ec789 100755
--- a/utils.sh
+++ b/utils.sh
@@ -7,7 +7,7 @@ BUILD_DIR="build"
ARM64_V8A="arm64-v8a"
ARM_V7A="arm-v7a"
-GITHUB_REPOSITORY=${GITHUB_REPOSITORY:-$GITHUB_REPO_FALLBACK}
+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:102.0) Gecko/20100101 Firefox/102.0"
@@ -91,13 +91,11 @@ reset_template() {
req() { wget -nv -O "$2" --header="$WGET_HEADER" "$1"; }
log() { echo -e "$1 " >>build.log; }
-get_apk_vers() { req "$1" - | sed -n 's;.*Version:\(.*\) .*;\1;p'; }
+get_apk_vers() { req "https://www.apkmirror.com/uploads/?appcategory=${1}" - | sed -n 's;.*Version:\(.*\) .*;\1;p'; }
get_largest_ver() {
local max=0
while read -r v || [ -n "$v" ]; do
- if [ "$(./semver "$v" "$max")" = 1 ]; then
- max=$v
- fi
+ if [ "$(./semver "$v" "$max")" = 1 ]; then max=$v; fi
done
if [[ $max = 0 ]]; then echo ""; else echo "$max"; fi
}
@@ -143,190 +141,190 @@ zip_module() {
cd ..
}
-build_reddit() {
- echo "Building Reddit"
- local last_ver
- last_ver=$(get_patch_last_supported_ver "frontpage")
- last_ver="${last_ver:-$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=reddit" | get_largest_ver)}"
-
- echo "Choosing version '${last_ver}'"
- local stock_apk="${TEMP_DIR}/reddit-stock-v${last_ver}.apk" patched_apk="${BUILD_DIR}/reddit-revanced-v${last_ver}.apk"
- if [ ! -f "$stock_apk" ]; then
- dl_apk "https://www.apkmirror.com/apk/redditinc/reddit/reddit-${last_ver//./-}-release/" \
- "APK[^@]*@\([^#]*\)" \
- "$stock_apk"
- log "\nReddit version: ${last_ver}"
+select_ver() {
+ local last_ver pkg_name=$1 apkmirror_category=$2 select_ver_experimental=$3
+ last_ver=$(get_patch_last_supported_ver "$pkg_name")
+ if [ "$select_ver_experimental" = true ] || [ -z "$last_ver" ]; then
+ if [ "$pkg_name" = "com.twitter.android" ]; then
+ last_ver=$(get_apk_vers "$apkmirror_category" | grep "release" | get_largest_ver)
+ else
+ last_ver=$(get_apk_vers "$apkmirror_category" | get_largest_ver)
+ fi
fi
- patch_apk "$stock_apk" "$patched_apk" "-r"
+ echo "$last_ver"
}
-build_twitter() {
- echo "Building Twitter"
- local last_ver
- last_ver=$(get_patch_last_supported_ver "twitter")
- last_ver="${last_ver:-$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=twitter" | grep release | get_largest_ver)}"
+build_rv() {
+ local -n args=$1
+ local version
+ reset_template
+ local arch=${args[arch]:-}
+ if [ "$arch" ]; then arch="-$arch"; fi
- echo "Choosing version '${last_ver}'"
- local stock_apk="${TEMP_DIR}/twitter-stock-v${last_ver}.apk" patched_apk="${BUILD_DIR}/twitter-revanced-v${last_ver}.apk"
- if [ ! -f "$stock_apk" ]; then
- dl_apk "https://www.apkmirror.com/apk/twitter-inc/twitter/twitter-${last_ver//./-}-release/" \
- "APK[^@]*@\([^#]*\)" \
- "$stock_apk"
- log "\nTwitter version: ${last_ver}"
+ echo "Building ${args[app_name]}${arch}"
+
+ if [ "${args[is_module]}" = true ]; then
+ if [[ ${args[patcher_args]} == *"--experimental"* ]]; then
+ local select_ver_experimental=true
+ else
+ local select_ver_experimental=false
+ fi
+ if [[ ${args[patcher_args]} != *-e\ ?(music-)microg-support* ]] &&
+ [[ ${args[patcher_args]} != *"--exclusive"* ]] ||
+ [[ ${args[patcher_args]} == *-i\ ?(music-)microg-support* ]]; then
+ local is_root=false
+ else
+ local is_root=true
+ fi
+ else
+ local select_ver_experimental=true
+ local is_root=false
fi
- patch_apk "$stock_apk" "$patched_apk" "-r"
-}
-
-build_warn_wetter() {
- echo "Building WarnWetter"
- local last_ver
- last_ver=$(get_patch_last_supported_ver "warnapp")
- last_ver="${last_ver:-$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=warnwetter" | get_largest_ver)}"
-
- echo "Choosing version '${last_ver}'"
- local stock_apk="${TEMP_DIR}/warn_wetter-stock-v${last_ver}.apk" patched_apk="${BUILD_DIR}/warn_wetter-revanced-v${last_ver}.apk"
- if [ ! -f "$stock_apk" ]; then
- dl_apk "https://www.apkmirror.com/apk/deutscher-wetterdienst/warnwetter/warnwetter-${last_ver//./-}-release/" \
- "APK[^@]*@\([^#]*\)" \
- "$stock_apk"
- log "\nWarnWetter version: ${last_ver}"
+ if [ $is_root = true ]; then
+ local output_dir="$TEMP_DIR"
+ # --unsigned is only available in my revanced-cli builds
+ args[patcher_args]="${args[patcher_args]} --unsigned"
+ else
+ local output_dir="$BUILD_DIR"
fi
- patch_apk "$stock_apk" "$patched_apk" "-r"
-}
-build_tiktok() {
- echo "Building TikTok"
- declare -r last_ver="${last_ver:-$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=tik-tok" | head -1)}"
- echo "Choosing version '${last_ver}'"
- local stock_apk="${TEMP_DIR}/tiktok-stock-v${last_ver}.apk" patched_apk="${BUILD_DIR}/tiktok-revanced-v${last_ver}.apk"
+ version=$(select_ver "${args[pkg_name]}" "${args[apkmirror_category]}" $select_ver_experimental)
+ echo "Choosing version '${version}'"
+
+ local stock_apk="${TEMP_DIR}/${args[app_name],,}-stock-v${version}${arch}.apk"
+ local patched_apk="${output_dir}/${args[app_name],,}-revanced-v${version}${arch}.apk"
if [ ! -f "$stock_apk" ]; then
- dl_apk "https://www.apkmirror.com/apk/tiktok-pte-ltd/tik-tok/tik-tok-${last_ver//./-}-release/" \
- "APK[^@]*@\([^#]*\)" \
+ dl_apk "https://www.apkmirror.com/apk/${args[apkmirror_dlurl]}-${version//./-}-release/" \
+ "${args[regexp]}" \
"$stock_apk"
- log "\nTikTok version: ${last_ver}"
+ log "\n${args[app_name]}${arch} version: ${version}"
fi
- patch_apk "$stock_apk" "$patched_apk" "-r"
+
+ patch_apk "$stock_apk" "$patched_apk" "${args[patcher_args]}"
+
+ if [ $is_root = false ]; then
+ echo "Built ${args[app_name]}${arch} (non-root)"
+ return
+ fi
+
+ service_sh "${args[pkg_name]}"
+ postfsdata_sh "${args[pkg_name]}"
+ customize_sh "${args[pkg_name]}" "${version}"
+ module_prop "${args[module_prop_name]}" \
+ "${args[app_name]} ReVanced" \
+ "${version}" \
+ "mounts base.apk for ${args[app_name]} ReVanced" \
+ "https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/update/${args[module_update_json]}"
+
+ local module_output="${args[app_name],,}-revanced-magisk-v${version}${arch}.zip"
+ local xdelta="${TEMP_DIR}/${args[app_name],,}-revanced-v${version}${arch}.xdelta"
+ xdelta_patch "$stock_apk" "$patched_apk" "$xdelta"
+ zip_module "$xdelta" "$module_output" "$stock_apk"
+ echo "Built ${args[app_name]}: '${BUILD_DIR}/${module_output}'"
}
build_yt() {
- echo "Building YouTube"
- reset_template
- if [[ $YT_PATCHER_ARGS == *"--experimental"* ]]; then
- declare -r last_ver=$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=youtube" | get_largest_ver) # this fetches beta
- else
- declare -r last_ver=$(get_patch_last_supported_ver "youtube")
- fi
- echo "Choosing version '${last_ver}'"
- local stock_apk="${TEMP_DIR}/youtube-stock-v${last_ver}.apk" patched_apk="${TEMP_DIR}/youtube-revanced-v${last_ver}.apk"
- if [ ! -f "$stock_apk" ]; then
- dl_apk "https://www.apkmirror.com/apk/google-inc/youtube/youtube-${last_ver//./-}-release/" \
- "APK[^@]*@\([^#]*\)" \
- "$stock_apk"
- log "\nYouTube version: ${last_ver}"
- fi
+ declare -A yt_args
+ yt_args[app_name]="YouTube"
+ yt_args[is_module]=true
+ yt_args[patcher_args]="${YT_PATCHER_ARGS} -m ${RV_INTEGRATIONS_APK}"
+ yt_args[apkmirror_category]="youtube"
+ yt_args[pkg_name]="com.google.android.youtube"
+ yt_args[apkmirror_dlurl]="google-inc/youtube/youtube"
+ yt_args[regexp]="APK[^@]*@\([^#]*\)"
+ yt_args[module_prop_name]="ytrv-magisk"
+ #shellcheck disable=SC2034
+ yt_args[module_update_json]="yt-update.json"
- if [[ $YT_PATCHER_ARGS != *"-e microg-support"* ]] && [[ $YT_PATCHER_ARGS != *"--exclusive"* ]] || [[ $YT_PATCHER_ARGS == *"-i microg-support"* ]]; then
- local is_root=false
- else
- local is_root=true
- # --unsigned is only available in my revanced-cli builds
- local patcher_args="${YT_PATCHER_ARGS} --unsigned"
- fi
-
- patch_apk "$stock_apk" "$patched_apk" "${patcher_args} -m ${RV_INTEGRATIONS_APK}"
-
- if [ $is_root = false ]; then
- mv -f "$patched_apk" "${BUILD_DIR}/"
- echo "Built YouTube (non-root)"
- return
- fi
-
- service_sh "com.google.android.youtube"
- postfsdata_sh "com.google.android.youtube"
- customize_sh "com.google.android.youtube" "$last_ver"
- module_prop "ytrv-magisk" \
- "YouTube ReVanced" \
- "$last_ver" \
- "mounts base.apk for YouTube ReVanced" \
- "https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/update/yt-update.json"
-
- local output="youtube-revanced-magisk-v${last_ver}-all.zip"
- local xdelta="${TEMP_DIR}/youtube-revanced-v${last_ver}.xdelta"
- xdelta_patch "$stock_apk" "$patched_apk" "$xdelta"
- zip_module "$xdelta" "$output" "$stock_apk"
- echo "Built YouTube: '${BUILD_DIR}/${output}'"
+ build_rv yt_args
}
build_music() {
+ declare -A ytmusic_args
local arch=$1
- echo "Building YouTube Music (${arch})"
- reset_template
- if [[ $MUSIC_PATCHER_ARGS == *"--experimental"* ]]; then
- declare -r last_ver=$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=youtube-music" | get_largest_ver)
- else
- declare -r last_ver=$(get_patch_last_supported_ver "music")
- fi
- echo "Choosing version '${last_ver}'"
- local stock_apk="${TEMP_DIR}/music-stock-v${last_ver}-${arch}.apk" patched_apk="${TEMP_DIR}/music-revanced-v${last_ver}-${arch}.apk"
- if [ ! -f "$stock_apk" ]; then
- if [ "$arch" = "$ARM64_V8A" ]; then
- local regexp_arch='arm64-v8a[^@]*@\([^"]*\)'
- elif [ "$arch" = "$ARM_V7A" ]; then
- local regexp_arch='armeabi-v7a[^@]*@\([^"]*\)'
- fi
- dl_apk "https://www.apkmirror.com/apk/google-inc/youtube-music/youtube-music-${last_ver//./-}-release/" \
- "$regexp_arch" \
- "$stock_apk"
- log "\nYouTube Music (${arch}) version: ${last_ver}"
- fi
-
- if [[ $MUSIC_PATCHER_ARGS != *"-e music-microg-support"* ]] && [[ $MUSIC_PATCHER_ARGS != *"--exclusive"* ]] || [[ $MUSIC_PATCHER_ARGS == *"-i music-microg-support"* ]]; then
- local is_root=false
- else
- local is_root=true
- # --unsigned is only available in my revanced-cli builds
- local patcher_args="${MUSIC_PATCHER_ARGS} --unsigned"
- fi
-
- patch_apk "$stock_apk" "$patched_apk" "${patcher_args}"
-
- if [ $is_root = false ]; then
- mv -f "$patched_apk" "${BUILD_DIR}/"
- echo "Built Music (non-root)"
- return
- fi
-
- service_sh "com.google.android.apps.youtube.music"
- postfsdata_sh "com.google.android.apps.youtube.music"
- customize_sh "com.google.android.apps.youtube.music" "$last_ver"
-
- local update_json="https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/update/music-update-${arch}.json"
+ ytmusic_args[app_name]="Music"
+ ytmusic_args[is_module]=true
+ ytmusic_args[patcher_args]="${MUSIC_PATCHER_ARGS}"
+ ytmusic_args[apkmirror_category]="youtube-music"
+ ytmusic_args[arch]=$arch
+ ytmusic_args[pkg_name]="com.google.android.apps.youtube.music"
+ ytmusic_args[apkmirror_dlurl]="google-inc/youtube-music/youtube-music"
if [ "$arch" = "$ARM64_V8A" ]; then
- local id="ytmusicrv-magisk"
+ ytmusic_args[regexp]='arm64-v8a[^@]*@\([^"]*\)'
+ ytmusic_args[module_prop_name]="ytmusicrv-magisk"
elif [ "$arch" = "$ARM_V7A" ]; then
- local id="ytmusicrv-arm-magisk"
- else
- echo "Wrong arch for prop: '$arch'"
- return
+ ytmusic_args[regexp]='armeabi-v7a[^@]*@\([^"]*\)'
+ ytmusic_args[module_prop_name]="ytmusicrv-arm-magisk"
fi
- module_prop "$id" \
- "YouTube Music ReVanced" \
- "$last_ver" \
- "mounts base.apk for YouTube Music ReVanced" \
- "$update_json"
+ #shellcheck disable=SC2034
+ ytmusic_args[module_update_json]="music-update-${arch}"
- local output="music-revanced-magisk-v${last_ver}-${arch}.zip"
- local xdelta="${TEMP_DIR}/music-revanced-v${last_ver}-${arch}.xdelta"
- xdelta_patch "$stock_apk" "$patched_apk" "$xdelta"
- zip_module "$xdelta" "$output" "$stock_apk"
- echo "Built Music (${arch}) '${BUILD_DIR}/${output}'"
+ build_rv ytmusic_args
+}
+
+build_twitter() {
+ declare -A tw_args
+ tw_args[app_name]="Twitter"
+ tw_args[is_module]=false
+ tw_args[patcher_args]="-r"
+ tw_args[apkmirror_category]="twitter"
+ tw_args[pkg_name]="com.twitter.android"
+ tw_args[apkmirror_dlurl]="twitter-inc/twitter/twitter"
+ #shellcheck disable=SC2034
+ tw_args[regexp]="APK[^@]*@\([^#]*\)"
+
+ build_rv tw_args
+}
+
+build_reddit() {
+ declare -A reddit_args
+ reddit_args[app_name]="Reddit"
+ reddit_args[is_module]=false
+ reddit_args[patcher_args]="-r"
+ reddit_args[apkmirror_category]="reddit"
+ reddit_args[pkg_name]="com.reddit.frontpage"
+ reddit_args[apkmirror_dlurl]="redditinc/reddit/reddit"
+ #shellcheck disable=SC2034
+ reddit_args[regexp]="APK[^@]*@\([^#]*\)"
+
+ build_rv reddit_args
+}
+
+build_warn_wetter() {
+ declare -A warn_wetter_args
+ warn_wetter_args[app_name]="WarnWetter"
+ warn_wetter_args[is_module]=false
+ warn_wetter_args[patcher_args]="-r"
+ warn_wetter_args[apkmirror_category]="warnwetter"
+ warn_wetter_args[pkg_name]="de.dwd.warnapp"
+ warn_wetter_args[apkmirror_dlurl]="deutscher-wetterdienst/warnwetter/warnwetter"
+ #shellcheck disable=SC2034
+ warn_wetter_args[regexp]="APK[^@]*@\([^#]*\)"
+
+ build_rv warn_wetter_args
+}
+
+build_tiktok() {
+ declare -A tiktok_args
+ tiktok_args[app_name]="TikTok"
+ tiktok_args[is_module]=false
+ tiktok_args[patcher_args]="-r"
+ tiktok_args[apkmirror_category]="tik-tok"
+ tiktok_args[pkg_name]="com.ss.android.ugc.trill"
+ tiktok_args[apkmirror_dlurl]="tiktok-pte-ltd/tik-tok/tik-tok"
+ #shellcheck disable=SC2034
+ tiktok_args[regexp]="APK[^@]*@\([^#]*\)"
+
+ build_rv tiktok_args
}
postfsdata_sh() { echo "${POSTFSDATA_SH//__PKGNAME/$1}" >"${MODULE_TEMPLATE_DIR}/post-fs-data.sh"; }
+
service_sh() {
s="${SERVICE_SH//__MNTDLY/$MOUNT_DELAY}"
echo "${s//__PKGNAME/$1}" >"${MODULE_TEMPLATE_DIR}/service.sh"
}
+
customize_sh() {
s="${CUSTOMIZE_SH//__PKGNAME/$1}"
echo "${s//__MDVRSN/$2}" >"${MODULE_TEMPLATE_DIR}/customize.sh"