You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NanoDroid/data/build-package.common

272 lines
6.9 KiB
Bash

#!/bin/bash
nanodroid_missing_files=0
nanodroid_broken_files=0
missing_database=""
sideload=${CWD}/local
debug_message () {
[ "${BP_DEBUG}" != '1' ] && return 0
case "$1" in
normal)
echo "$3$(tput setaf 3)$2$(tput sgr 0)"
;;
newline)
echo -e "$3$(tput setaf 3)$2$(tput sgr 0)"
;;
esac
}
check_nanodroid () {
# check for gzip'ed APKs (we switched to ZStd with NanoDroid 23.0) and remove them
find Full/ -type f -name '*.apk.gz' | xargs rm -fv
for file in ${file_database[@]}; do
if [[ ! -f ${CWD}/${file} ]]; then
nanodroid_missing_files=1
missing_database=(${missing_database[@]} ${file})
else
case ${file} in
*.zst )
mimetype=$(file -b --mime-type ${CWD}/${file})
mimetype_int=$(zstd -dcf ${CWD}/${file} 2>/dev/null | file -b --mime-type - )
;;
*.so* )
mimetype=$(file -b --mime-type ${CWD}/${file})
mimetype_int=""
;;
esac
case ${mimetype} in
*application/*sharedlib* )
# library
;;
*application/*zstd* )
# APK
;;
* )
debug_message newline "${file} has non-supported mimetype ${mimetype}"
nanodroid_broken_files=1
broken_database=(${broken_database[@]} ${file})
[ "${BP_DEBUG}" != '1' ] && rm -f ${CWD}/${file}
;;
esac
case ${mimetype_int} in
"" )
# library
;;
*application/java-archive* | *application/zip* | *application/vnd.android.package-archive* )
# APK
;;
* )
debug_message newline "compressed ${file} has non-supported mimetype ${mimetype_int}"
nanodroid_broken_files=1
broken_database=(${broken_database[@]} ${file})
[ "${BP_DEBUG}" != '1' ] && rm -f ${CWD}/${file}
;;
esac
fi
done
if [[ ${nanodroid_missing_files} -ne 0 ]]; then
echo -e "\nThe following files are missing:\n"
printf '%s\n' ${missing_database[@]} | uniq | sort
fi
if [[ ${nanodroid_broken_files} -ne 0 && "${BP_DEBUG}" -ne 1 ]]; then
echo -e "\nThe following files are broken (and will be removed):\n"
printf '%s\n' ${broken_database[@]} | uniq | sort
elif [[ ${nanodroid_broken_files} -ne 0 && "${BP_DEBUG}" -eq 1 ]]; then
echo -e "\nThe following files are broken (and are kept because BP_DEBUG is set):\n"
printf '%s\n' ${broken_database[@]} | uniq | sort
fi
if [[ ${nanodroid_missing_files} -eq 0 && ${nanodroid_broken_files} -eq 0 ]]; then
echo -e "\nNanoDroid correctly populated\n"
return 0
else return 1
fi
}
update_patches () {
grab_patches sigspoof-core/services.jar.dex core_services.jar.dex
grab_patches sigspoof-hook-4.1-6.0/services.jar.dex hook_4.1-6.0_services.jar.dex
grab_patches sigspoof-hook-7.0-9.0/services.jar.dex hook_7.0-9.0_services.jar.dex
}
progress () {
sleep 0.5
while [ -d "/proc/${1}" ];do
echo -ne '/\x08' ; sleep 0.05
echo -ne '-\x08' ; sleep 0.05
echo -ne '\\\x08' ; sleep 0.05
echo -ne '|\x08' ; sleep 0.05
done
echo "Done"
}
zip_add () {
local file_path="${CWD}/${1}"
local file_mask="${2}"
local zip_path="${CWD}/${ZIP}"
cd "${file_path}"
if [ -z "${file_mask}" ]; then
zip -qr "${zip_path}" . || exit 1
elif [ -d "${file_mask}" ]; then
zip -qr "${zip_path}" "${file_mask}" || exit 1
else
zip -q "${zip_path}" ${file_mask} || exit 1
fi
cd "${CWD}"
}
zip_add_setup () {
cd "${CWD}/doc"
local zip_path="${CWD}/${ZIP}"
case ${1} in
0 )
sed -e 's/nanodroid_overlay=1/nanodroid_overlay=0/' -i .nanodroid-setup
zip -q "${zip_path}" .nanodroid-setup || exit 1
sed -e 's/nanodroid_overlay=0/nanodroid_overlay=1/' -i .nanodroid-setup
;;
1 )
zip -q "${zip_path}" .nanodroid-setup || exit 1
;;
esac
cd "${CWD}"
}
increase_version_number () {
if [ -z ${2} ]; then
date=99999999
else date=${2}
fi
[ -z ${1} ] && error "no new version number given (current: ${version_code})"
for file in "CommonAddon" "CommonInstaller" \
"systest/SysTest" "patcher/CommonPatcher" \
"uninstaller/META-INF/com/google/android/update-binary"; do
sed -e "s/^VERSION=.*/VERSION=${1}.${date}/" -i "${CWD}/${file}"
done
sed -e "s/^version_code.*/version_code=${1}/g" -i "${CWD}/build-package"
sed -e "s/^version_date.*/version_date=${date}/g" -i "${CWD}/build-package"
for module in Full microG FDroid BromiteWebView OsmAnd Google patcher/dexpatcher; do
sed -e "s/version=.*/version=v${1}.${date}/" -i \
"${CWD}/${module}/module.prop"
done
}
increase_module_version () {
for module in Full microG FDroid BromiteWebView OsmAnd Google patcher/dexpatcher; do
eval $(grep versionCode "${CWD}/${module}/module.prop")
local versionCode=$((versionCode+1))
sed -e "s/versionCode.*/versionCode=${versionCode}/" \
-i "${CWD}/${module}/module.prop"
done
}
dalvikize_jar () {
[ -z "${ANDROID_HOME}" ] && error "ANDROID_HOME is not set!"
[ ! -f "${ANDROID_HOME}/build-tools/29.0.3/dx" ] && error "can't find 'dx' binary in \"${ANDROID_HOME}/build-tools/29.0.3\"!"
[ -n "${2}" ] && local dx_extra_arg="--min-sdk-version=${2}"
if [ -f "${1}" ]; then
${ANDROID_HOME}/build-tools/29.0.3/dx --dex \
--output="$(basename "${1}" .jar).dex" \
${dx_extra_arg} "${1}"
else
error "can't find input file \"${1}\""
fi
}
show_help () {
echo -e "
** NanoDroid ${version_p} helper script **
usage: build-package [opt] [arg]
setup NanoDroid [! do this first !]:
pull | download all required apks for NanoDroid
update contents:
u-microg | update microG and companions
u-fdroid | update F-Droid and Extension
u-bromite | update Bromite System WebView
u-osmand | update OsmAnd and Plugins
u-apps | update applications
u-swipe | update swipe libraries
u-gsync | update Google Sync Adapters
u-patch | download Haystack patches
| currently disabled as we use new Haystack patches
create zip files:
full | create Full package zip from repo
microg | create microG package zip from repo
fdroid | create FDroid package zip from repo
patcher | create framework patcher zip from repo
uninstaller | create uninstaller zip from repo
bromitewebview | create Bromite WebView zip from repo
osmand | create OsmAnd package zip from repo
google | create Google package zip from repo
all | create all zips from repo
misc. stuff:
check | check if all files were properly downloaded
clean | remove any untracked files from the repo
report | create package report (work-in-progress)
dalvik [jar] [:minsdk] | prepare a jar file for dalvikvm usage
ver [ver] [:date] | bump version accross whole project
bump | increment Magisk Module versionCodes by 1
debugging:
BP_DEBUG=1 | pass this to display lots of info useful for debugging
BP_USE_WGET=1 | pass this to use wget instead of curl to download files
| note: curl is still used for some tasks
"
exit 0
}
print_package () {
echo "
Creating Package
Type ${1}
Name ${ZIP}
Directory ${CWD}
"
rm -f "${CWD}/${ZIP}"*
}
error () {
echo -e "${@}"
exit 1
}
sum_sign_package () {
cd "${CWD}"
cd "$(dirname "${1}")"
${sumsha256} "$(basename "${1}")" > "${1}.sha256"
cd "${CWD}"
gpg --sign --detach-sign "${1}.sha256"
}