#!/bin/bash report_file="${CWD}/NanoDroid-Report-${VERSION}" create_report_real () { case ${VERSION} in *99999999* ) build_type="Beta Release" ;; * ) build_type="Stable Release" ;; esac [ "${build_date}" -ne "${version_date}" ] && build_type="Snapshot Release" rm -f "${report_file}"* echo -e " creating NanoDroid report: | NanoDroid Version: ${VERSION} | NanoDroid Type: ${build_type} | NanoDroid Report: $(basename ${report_file}) " echo "NanoDroid Package Report | NanoDroid Version: ${VERSION} | NanoDroid Type: ${build_type} | Report Date: $(date +%Y%m%d-%H.%M.%S) " > ${report_file} for file in $(find ${CWD} -maxdepth 1 -type f | sort) \ $(find ${CWD} -mindepth 2 -type f | sort); do case ${file} in *NanoDroid*.zip* ) get_dst_info ${file} ;; *.apk.zst ) get_apk_info ${file} ;; *.so* ) get_lib_info ${file} ;; */bin* ) get_bin_info ${file} ;; *tools* ) get_bin_info ${file} ;; *etc* ) get_etc_info ${file} ;; *.dex* ) get_dex_info ${file} ;; * ) get_msc_info ${file} ;; esac done sum_sign_package "${report_file}" } create_report () { create_report_real & progress $! } get_apk_info () { APK=${CWD}/_report.apk zstd -dcqf ${1} > ${APK} apk_file=$(basename ${1}) apk_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') apk_name=$(aapt dump badging ${APK} 2>/dev/null | gawk -F \' '/^package: name/{print $2}') apk_version=$(aapt dump badging ${APK} 2>/dev/null | gawk -F \' '/^package: name/{print $6}') apk_code=$(aapt dump badging ${APK} 2>/dev/null | gawk -F \' '/^package: name/{print $4}') apk_perm=$(aapt dump badging ${APK} 2>/dev/null | gawk -F \' '/^uses-permission:/{print $2}' | sort) apk_sha=$(${sumsha256} ${APK} | gawk '{print $1}') zstd_sha=$(${sumsha256} ${1} | gawk '{print $1}') case ${1} in *gsync/K* ) APK_TYPE="Google Sync Adapters [KitKat]" ;; *gsync/L* ) APK_TYPE="Google Sync Adapters [Lolipop]" ;; *gsync/M* ) APK_TYPE="Google Sync Adapters [Marshmallow]" ;; *gsync/N* ) APK_TYPE="Google Sync Adapters [Nougat]" ;; *gsync/O* ) APK_TYPE="Google Sync Adapters [Oreo]" ;; *gsync/P* ) APK_TYPE="Google Sync Adapters [Pie]" ;; *gsync/common*) APK_TYPE="Google Sync Adapters [Generic]" ;; *priv-app*) APK_TYPE="Privileged Application" ;; *app* ) APK_TYPE="Generic Application" ;; esac echo "Android Package: ${apk_name} | Filename: ${apk_file} | Origin: ${apk_path} | Type: ${APK_TYPE} | Version: ${apk_version} | VersionCode: ${apk_code} | SHA256 APK: ${apk_sha} | SHA256 ZStd: ${zstd_sha}" >> ${report_file} if [ -z "${apk_perm}" ]; then echo -e " | Permissions: none requested\n" >> ${report_file} else echo -e " | Permissions:\n$(printf "\t|- %s\n" ${apk_perm})\n" >> ${report_file} fi rm -f ${APK} } get_lib_info () { local lib_file=$(basename ${1}) local lib_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') case ${lib_file} in *libjni_latinimegoogle* ) LIB_NAME="Latin IME Google" ;; *libjni_keyboarddecoder*) LIB_NAME="Keyboard Decoder" ;; esac case ${1} in *19* ) local lib_code="19 [KitKat]" ;; *21* ) local lib_code="21 [Lollipop]" ;; *22* ) local lib_code="22 [Lollipop]" ;; *23* ) local lib_code="23 [Marshmallow]" ;; *24* ) local lib_code="23 [Nougat] {24}" ;; *25* ) local lib_code="23 [Nougat] {25}" ;; *26* ) local lib_code="26 [Oreo] {26}" ;; *27* ) local lib_code="27 [Oreo]" ;; *28* ) local lib_code="28 [Pie]" ;; *29* ) local lib_code="29 [Q]" ;; * ) local lib_code="Generic" ;; esac local lib_arch=$(file -b ${1} | gawk -F, '{print $2 " [ " $1 " ] [" $3 " ]"}') local lib_specs=$(file -b ${1} | gawk -F, '{print $4 " [" $5 " ]"}') lib_sha=$(${sumsha256} ${1} | gawk '{print $1}') echo "Android Library: ${LIB_NAME} | Filename: ${lib_file} | Origin: ${lib_path} | SDK Code: ${lib_code} | Arch: ${lib_arch} | Specifics: ${lib_specs} | SHA256: ${lib_sha} " >> ${report_file} } get_bin_info () { local bin_file=$(basename ${1}) local bin_name=$(basename ${1} | sed -e 's/\.[^.]*$//') local bin_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') case ${bin_path} in *bin* ) local bin_type="Android User Utility" ;; *tools*) local bin_type="Android Installer Utility" ;; esac local bin_arch=$(file -b ${1} | gawk -F, '{print $2 " [ " $1 " ] [" $3 " ]"}') local bin_specs=$(file -b ${1} | gawk -F, '{print $4 " [" $7 " ] [" $6 " ]"}') local bin_sha=$(${sumsha256} ${1} | gawk '{print $1}') echo "${bin_type}: ${bin_name} | Filename: ${bin_file} | Origin: ${bin_path} | Arch: ${bin_arch} | Specifics: ${bin_specs} | SHA256: ${bin_sha} " >> ${report_file} } get_etc_info () { local etc_file=$(basename ${1}) local etc_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') local etc_pkgs="" case ${1} in *gsync*default-permissions* ) local etc_type="Google Sync Adapters Permissions" local etc_pkgs="$(gawk -F\" '/package=/{print $2}' ${1})" ;; *etc/permissions* ) local etc_type="Application Permissions" local etc_pkgs="$(gawk -F\" '/package=/{print $2}' ${1})" ;; *etc/default-permissions* ) local etc_type="Application Permissions" local etc_pkgs="$(gawk -F\" '/package=/{print $2}' ${1})" ;; *etc/terminfo* ) local etc_type="GNU Nano Terminfo" ;; *etc/init.d* ) local etc_type="NanoDroid init Script" ;; *etc/sysconfig* ) local etc_type="Linux sysconfig Settings" ;; *etc/bash* ) local etc_type="GNU Bash Configuration" ;; *etc/org.fdroid.fdroid* ) local etc_type="F-Droid Configuration" ;; esac local etc_sha=$(${sumsha256} ${1} | gawk '{print $1}') echo "${etc_type}: ${etc_file} | Filename: ${etc_file} | Origin: ${etc_path} | SHA256: ${etc_sha}" >> ${report_file} if [ -n "${etc_pkgs}" ]; then echo -e " | Packages:\n$(printf "\t|- %s\n" ${etc_pkgs})\n" >> ${report_file} else echo "" >> ${report_file} fi } get_dex_info () { local dex_file=$(basename ${1}) local dex_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') case ${dex_file} in *services* ) local dex_type="Android DEX Patch File" local dex_name=$(basename ${1} .jar.dex) ;; * ) local dex_type="Android Dalvik Executable" local dex_name=$(basename ${1} .dex) ;; esac case ${dex_file} in *services* ) local dex_sdk=$(gawk -F\_ '{print $2}' <(echo ${dex_file})) ;; *smali* ) local dex_sdk=$(sed 's/.*_\(.*\)\..*/\1/' <(echo ${dex_file})) ;; * ) local dex_sdk="universal" ;; esac dex_ver=$(file -b ${1} | gawk '{print $5}') dex_sha=$(${sumsha256} ${1} | gawk '{print $1}') echo "${dex_type}: ${dex_name} | Filename: ${dex_file} | Origin: ${dex_path} | DEX Version: ${dex_ver} | DEX SDK: ${dex_sdk} | SHA256: ${dex_sha} " >> ${report_file} } get_msc_info () { case ${1} in *CommonAddon* ) local msc_type="NanoDroid universal addon.d" ;; *CommonInstaller* ) local msc_type="NanoDroid universal Installer" ;; *service.sh* ) local msc_type="NanoDroid universal Magisk Module service.sh" ;; *Full*update* ) local msc_type="NanoDroid Full Package TWRP invoker" ;; *Full*.prop* ) local msc_type="NanoDroid Full Package Module Module properties" ;; *microG*update* ) local msc_type="NanoDroid microG Package TWRP invoker" ;; *microG*.prop* ) local msc_type="NanoDroid microG Package Module Module properties" ;; *FDroid*update* ) local msc_type="NanoDroid F-Droid Package TWRP invoker" ;; *FDroid*.prop* ) local msc_type="NanoDroid F-Droid Package Module Module properties" ;; *Bromite*update* ) local msc_type="NanoDroid BromiteWebView Package TWRP invoker" ;; *Bromite*.prop* ) local msc_type="NanoDroid BromiteWebView Package Module Module properties" ;; *OsmAnd*update* ) local msc_type="NanoDroid OsmAnd Package TWRP invoker" ;; *OsmAnd*.prop* ) local msc_type="NanoDroid OsmAnd Package Module Module properties" ;; *CommonPatcher* ) local msc_type="NanoDroid Framework Patcher" ;; *70-nanodroidpatcher.sh* ) local msc_type="NanoDroid Framework Patcher addon.d" ;; *org.spoofing.apk*) local msc_type="NanoDroid Framework Patcher spoofing info provider" ;; *patcher*update* ) local msc_type="NanoDroid Framework Patcher TWRP invoker" ;; *patcher*.prop* ) local msc_type="NanoDroid Framework Patcher Module Module properties" ;; *SysTest* ) local msc_type="NanoDroid System Tester" ;; *systest*update* ) local msc_type="NanoDroid System Tester TWRP invoker" ;; *uninstaller*binary*) local msc_type="NanoDroid Uninstaller" ;; *uninstaller*update*) local msc_type="NanoDroid Uninstaller TWRP invoker" ;; *Google*update* ) local msc_type="NanoDroid Google Package TWRP invoker" ;; *Google*.prop* ) local msc_type="NanoDroid Google Module properties" ;; *ChangeLog.md* ) local msc_type="NanoDroid ChangeLog" ;; *README.md* ) local msc_type="NanoDroid README" ;; *.nanodroid-apps* ) local msc_type="NanoDroid default app installation configuration" ;; *.nanodroid-setup*) local msc_type="NanoDroid default installation configuration" ;; *.nanodroid-overlay*) local msc_type="NanoDroid default overlay configuration" ;; *.maps.jar* ) local msc_type="microG Maps v1 support" local msc_name=$(basename ${1}) ;; *LICENSE* ) local msc_type="exclude" ;; *doc* ) local msc_type="exclude" ;; *build-package* ) local msc_type="exclude" ;; *.json* ) local msc_type="exclude" ;; *.git* ) local msc_type="exclude" ;; *NanoDroid-Report*) local msc_type="exclude" ;; *NanoDroid/dist* ) local msc_type="exclude" ;; */local* ) local msc_type="exclude" ;; * ) local msc_type="unknown" ;; esac [[ "${1}" == *.prop* ]] && local msc_name=$(basename ${1}) [[ "${msc_type}" == *Zelda* ]] && local msc_name=$(basename ${1} | sed -e 's/\..*//;s/_/ /g') case ${msc_type} in exclude ) return 0 ;; unknown ) echo "No report template for file: ${1}" ;; * ) local msc_file=$(basename ${1}) local msc_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') local msc_sha=$(${sumsha256} ${1} | gawk '{print $1}') [ -z "${msc_name}" ] && local msc_name=$(basename ${1} | sed -e 's/\.[^.]*$//') echo "${msc_type}: ${msc_name} | Filename: ${msc_file} | Origin: ${msc_path} | SHA256: ${msc_sha} " >> ${report_file} ;; esac } get_dst_info () { if [[ ! ${1} == *NanoDroid/dist* ]]; then local dst_file=$(basename ${1}) local dst_name=$(basename ${1} | sed -e 's/-[0-9].*//') local dst_path=$(dirname ${1} | sed -e 's/.*NanoDroid/NanoDroid/') case ${dst_file} in *NanoDroid-[0-9]*.zip*) local dst_pkg="NanoDroid Full" ;; *microG*.zip* ) local dst_pkg="NanoDroid microG" ;; *fdroid*.zip* ) local dst_pkg="NanoDroid F-Droid" ;; *BromiteWebView*.zip* ) local dst_pkg="NanoDroid BromiteWebView" ;; *OsmAnd*.zip* ) local dst_pkg="NanoDroid OsmAnd" ;; *patcher*.zip* ) local dst_pkg="NanoDroid Framework Patcher" ;; *systest*.zip* ) local dst_pkg="NanoDroid System Tester" ;; *uninstaller*.zip* ) local dst_pkg="NanoDroid Uninstaller" ;; *Google*.zip* ) local dst_pkg="NanoDroid Google" ;; esac case ${dst_file} in *.zip ) local dst_type="Flashable Package" ;; *.sha256 ) local dst_type="Flashable Package (SHA256 Checksum)" ;; *.sig ) local dst_type="Flashable Package (GPG Signature)" ;; esac dst_sha=$(${sumsha256} ${1} | gawk '{print $1}') echo "${dst_type}: ${dst_name} | Filename: ${dst_file} | Origin: ${dst_path} | Package: ${dst_pkg} | SHA256: ${dst_sha} " >> ${report_file} fi }