refactor stuff

This commit is contained in:
j-hc
2022-09-07 23:43:27 +03:00
parent 2e4fd207c0
commit c7369f9700
4 changed files with 161 additions and 165 deletions

View File

@ -22,6 +22,7 @@ The [**mindetach module**](https://github.com/j-hc/mindetach-magisk) in the rele
## Installation ## Installation
* Simply flash the module, you do not need to install YouTube or Music beforehand. Everything is handled by the module. * 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. * No need for a reboot after the installation. YouTube or Music will be mounted immediately.
* x86 and x86_64 arches are not supported!
## Updating ## 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. The modules support Magisk update which means you will receive updates from your Magisk app, downloading from github releases and reflashing is not necessary.

View File

@ -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. 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 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 UPDATE_PREBUILTS=true # dont touch this

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/usr/bin/env bash
set -euo pipefail set -eu -o pipefail
source build.conf source build.conf
source utils.sh source utils.sh

318
utils.sh
View File

@ -7,7 +7,7 @@ BUILD_DIR="build"
ARM64_V8A="arm64-v8a" ARM64_V8A="arm64-v8a"
ARM_V7A="arm-v7a" 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')} 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" 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"; } req() { wget -nv -O "$2" --header="$WGET_HEADER" "$1"; }
log() { echo -e "$1 " >>build.log; } log() { echo -e "$1 " >>build.log; }
get_apk_vers() { req "$1" - | sed -n 's;.*Version:</span><span class="infoSlide-value">\(.*\) </span>.*;\1;p'; } get_apk_vers() { req "https://www.apkmirror.com/uploads/?appcategory=${1}" - | sed -n 's;.*Version:</span><span class="infoSlide-value">\(.*\) </span>.*;\1;p'; }
get_largest_ver() { get_largest_ver() {
local max=0 local max=0
while read -r v || [ -n "$v" ]; do while read -r v || [ -n "$v" ]; do
if [ "$(./semver "$v" "$max")" = 1 ]; then if [ "$(./semver "$v" "$max")" = 1 ]; then max=$v; fi
max=$v
fi
done done
if [[ $max = 0 ]]; then echo ""; else echo "$max"; fi if [[ $max = 0 ]]; then echo ""; else echo "$max"; fi
} }
@ -143,190 +141,190 @@ zip_module() {
cd .. cd ..
} }
build_reddit() { select_ver() {
echo "Building Reddit" local last_ver pkg_name=$1 apkmirror_category=$2 select_ver_experimental=$3
local last_ver last_ver=$(get_patch_last_supported_ver "$pkg_name")
last_ver=$(get_patch_last_supported_ver "frontpage") if [ "$select_ver_experimental" = true ] || [ -z "$last_ver" ]; then
last_ver="${last_ver:-$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=reddit" | get_largest_ver)}" if [ "$pkg_name" = "com.twitter.android" ]; then
last_ver=$(get_apk_vers "$apkmirror_category" | grep "release" | get_largest_ver)
echo "Choosing version '${last_ver}'" else
local stock_apk="${TEMP_DIR}/reddit-stock-v${last_ver}.apk" patched_apk="${BUILD_DIR}/reddit-revanced-v${last_ver}.apk" last_ver=$(get_apk_vers "$apkmirror_category" | get_largest_ver)
if [ ! -f "$stock_apk" ]; then fi
dl_apk "https://www.apkmirror.com/apk/redditinc/reddit/reddit-${last_ver//./-}-release/" \
"APK</span>[^@]*@\([^#]*\)" \
"$stock_apk"
log "\nReddit version: ${last_ver}"
fi fi
patch_apk "$stock_apk" "$patched_apk" "-r" echo "$last_ver"
} }
build_twitter() { build_rv() {
echo "Building Twitter" local -n args=$1
local last_ver local version
last_ver=$(get_patch_last_supported_ver "twitter") reset_template
last_ver="${last_ver:-$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=twitter" | grep release | get_largest_ver)}" local arch=${args[arch]:-}
if [ "$arch" ]; then arch="-$arch"; fi
echo "Choosing version '${last_ver}'" echo "Building ${args[app_name]}${arch}"
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 if [ "${args[is_module]}" = true ]; then
dl_apk "https://www.apkmirror.com/apk/twitter-inc/twitter/twitter-${last_ver//./-}-release/" \ if [[ ${args[patcher_args]} == *"--experimental"* ]]; then
"APK</span>[^@]*@\([^#]*\)" \ local select_ver_experimental=true
"$stock_apk" else
log "\nTwitter version: ${last_ver}" 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 fi
patch_apk "$stock_apk" "$patched_apk" "-r" if [ $is_root = true ]; then
} local output_dir="$TEMP_DIR"
# --unsigned is only available in my revanced-cli builds
build_warn_wetter() { args[patcher_args]="${args[patcher_args]} --unsigned"
echo "Building WarnWetter" else
local last_ver local output_dir="$BUILD_DIR"
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</span>[^@]*@\([^#]*\)" \
"$stock_apk"
log "\nWarnWetter version: ${last_ver}"
fi fi
patch_apk "$stock_apk" "$patched_apk" "-r"
}
build_tiktok() { version=$(select_ver "${args[pkg_name]}" "${args[apkmirror_category]}" $select_ver_experimental)
echo "Building TikTok" echo "Choosing version '${version}'"
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}/${args[app_name],,}-stock-v${version}${arch}.apk"
local stock_apk="${TEMP_DIR}/tiktok-stock-v${last_ver}.apk" patched_apk="${BUILD_DIR}/tiktok-revanced-v${last_ver}.apk" local patched_apk="${output_dir}/${args[app_name],,}-revanced-v${version}${arch}.apk"
if [ ! -f "$stock_apk" ]; then if [ ! -f "$stock_apk" ]; then
dl_apk "https://www.apkmirror.com/apk/tiktok-pte-ltd/tik-tok/tik-tok-${last_ver//./-}-release/" \ dl_apk "https://www.apkmirror.com/apk/${args[apkmirror_dlurl]}-${version//./-}-release/" \
"APK</span>[^@]*@\([^#]*\)" \ "${args[regexp]}" \
"$stock_apk" "$stock_apk"
log "\nTikTok version: ${last_ver}" log "\n${args[app_name]}${arch} version: ${version}"
fi 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() { build_yt() {
echo "Building YouTube" declare -A yt_args
reset_template yt_args[app_name]="YouTube"
if [[ $YT_PATCHER_ARGS == *"--experimental"* ]]; then yt_args[is_module]=true
declare -r last_ver=$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=youtube" | get_largest_ver) # this fetches beta yt_args[patcher_args]="${YT_PATCHER_ARGS} -m ${RV_INTEGRATIONS_APK}"
else yt_args[apkmirror_category]="youtube"
declare -r last_ver=$(get_patch_last_supported_ver "youtube") yt_args[pkg_name]="com.google.android.youtube"
fi yt_args[apkmirror_dlurl]="google-inc/youtube/youtube"
echo "Choosing version '${last_ver}'" yt_args[regexp]="APK</span>[^@]*@\([^#]*\)"
local stock_apk="${TEMP_DIR}/youtube-stock-v${last_ver}.apk" patched_apk="${TEMP_DIR}/youtube-revanced-v${last_ver}.apk" yt_args[module_prop_name]="ytrv-magisk"
if [ ! -f "$stock_apk" ]; then #shellcheck disable=SC2034
dl_apk "https://www.apkmirror.com/apk/google-inc/youtube/youtube-${last_ver//./-}-release/" \ yt_args[module_update_json]="yt-update.json"
"APK</span>[^@]*@\([^#]*\)" \
"$stock_apk"
log "\nYouTube version: ${last_ver}"
fi
if [[ $YT_PATCHER_ARGS != *"-e microg-support"* ]] && [[ $YT_PATCHER_ARGS != *"--exclusive"* ]] || [[ $YT_PATCHER_ARGS == *"-i microg-support"* ]]; then build_rv yt_args
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_music() { build_music() {
declare -A ytmusic_args
local arch=$1 local arch=$1
echo "Building YouTube Music (${arch})" ytmusic_args[app_name]="Music"
reset_template ytmusic_args[is_module]=true
if [[ $MUSIC_PATCHER_ARGS == *"--experimental"* ]]; then ytmusic_args[patcher_args]="${MUSIC_PATCHER_ARGS}"
declare -r last_ver=$(get_apk_vers "https://www.apkmirror.com/uploads/?appcategory=youtube-music" | get_largest_ver) ytmusic_args[apkmirror_category]="youtube-music"
else ytmusic_args[arch]=$arch
declare -r last_ver=$(get_patch_last_supported_ver "music") ytmusic_args[pkg_name]="com.google.android.apps.youtube.music"
fi ytmusic_args[apkmirror_dlurl]="google-inc/youtube-music/youtube-music"
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</div>[^@]*@\([^"]*\)'
elif [ "$arch" = "$ARM_V7A" ]; then
local regexp_arch='armeabi-v7a</div>[^@]*@\([^"]*\)'
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"
if [ "$arch" = "$ARM64_V8A" ]; then if [ "$arch" = "$ARM64_V8A" ]; then
local id="ytmusicrv-magisk" ytmusic_args[regexp]='arm64-v8a</div>[^@]*@\([^"]*\)'
ytmusic_args[module_prop_name]="ytmusicrv-magisk"
elif [ "$arch" = "$ARM_V7A" ]; then elif [ "$arch" = "$ARM_V7A" ]; then
local id="ytmusicrv-arm-magisk" ytmusic_args[regexp]='armeabi-v7a</div>[^@]*@\([^"]*\)'
else ytmusic_args[module_prop_name]="ytmusicrv-arm-magisk"
echo "Wrong arch for prop: '$arch'"
return
fi fi
module_prop "$id" \ #shellcheck disable=SC2034
"YouTube Music ReVanced" \ ytmusic_args[module_update_json]="music-update-${arch}"
"$last_ver" \
"mounts base.apk for YouTube Music ReVanced" \
"$update_json"
local output="music-revanced-magisk-v${last_ver}-${arch}.zip" build_rv ytmusic_args
local xdelta="${TEMP_DIR}/music-revanced-v${last_ver}-${arch}.xdelta" }
xdelta_patch "$stock_apk" "$patched_apk" "$xdelta"
zip_module "$xdelta" "$output" "$stock_apk" build_twitter() {
echo "Built Music (${arch}) '${BUILD_DIR}/${output}'" 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</span>[^@]*@\([^#]*\)"
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</span>[^@]*@\([^#]*\)"
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</span>[^@]*@\([^#]*\)"
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</span>[^@]*@\([^#]*\)"
build_rv tiktok_args
} }
postfsdata_sh() { echo "${POSTFSDATA_SH//__PKGNAME/$1}" >"${MODULE_TEMPLATE_DIR}/post-fs-data.sh"; } postfsdata_sh() { echo "${POSTFSDATA_SH//__PKGNAME/$1}" >"${MODULE_TEMPLATE_DIR}/post-fs-data.sh"; }
service_sh() { service_sh() {
s="${SERVICE_SH//__MNTDLY/$MOUNT_DELAY}" s="${SERVICE_SH//__MNTDLY/$MOUNT_DELAY}"
echo "${s//__PKGNAME/$1}" >"${MODULE_TEMPLATE_DIR}/service.sh" echo "${s//__PKGNAME/$1}" >"${MODULE_TEMPLATE_DIR}/service.sh"
} }
customize_sh() { customize_sh() {
s="${CUSTOMIZE_SH//__PKGNAME/$1}" s="${CUSTOMIZE_SH//__PKGNAME/$1}"
echo "${s//__MDVRSN/$2}" >"${MODULE_TEMPLATE_DIR}/customize.sh" echo "${s//__MDVRSN/$2}" >"${MODULE_TEMPLATE_DIR}/customize.sh"