#!/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/x-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* ) # 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} 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" }