#!/bin/bash PACKAGES="" REPO_USERNAME="" REPO_PASSWORD="" TMP="/tmp/androBootstrap" REPOURL="" REPODATA="" SKIP="" ret="" ret2="" coloredMessage(){ # $1: First colored text $2: Non colored Text [ $# -gt 2 ] && echo -e "\033[1;32m$1\033[1;m $2" || echo -e "\033[1;31m$1\033[1;m $2" } getVersionCodeInstalledOnSystem(){ # VersionCode of system apk, otherwise -1 local versionCode=`adb shell dumpsys package "$1" | grep "versionCode=" | cut -d= -f2 | cut -d' ' -f1 | tr -d "\r"` [ -z "$versionCode" ] && versionCode="-1" ret="$versionCode" } getLatestPackageFDroid(){ # $REPODATA: Repository XML # $1: Package name [ "$SKIP" == "true" ] && return local fdroid=$(echo "$REPODATA" | grep "$1") fdroid=$(echo "$fdroid" | sed 's/<[^>]*>//g') fdroid=$(echo "$fdroid" | tr -s " " | rev | cut -d '_' -f1 | rev | cut -d '.' -f1 | sort -n -r) local versionCode=$(echo "$fdroid" | head -n1) ret="$REPOURL/$1_$versionCode.apk" ret2="$versionCode" } loadFDroidRepo(){ # $1: Url to repository (https://f-droid.org/repo) [ "$SKIP" == "true" ] && return REPOURL="$1" if [ -n "$REPO_USERNAME" -a -n "$REPO_PASSWORD" ] ; then REPODATA=$(curl -s "$1/index.xml" --user "$REPO_USERNAME:$REPO_PASSWORD" | xmllint --format -) else REPODATA=$(curl -s "$1/index.xml" | xmllint --format -) fi } showDownload(){ [ "$SKIP" == "true" ] && return echo -e "\033[1;31mDownload:\033[1;m $1" } downloadApk(){ # $1: URL # $2: Text, shows download info if set local AGENT="Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5" [ "$SKIP" == "true" ] && return cd "$TMP" # Info [ -n "$2" ] && showDownload "$2" # Download if [ -n "$REPO_USERNAME" -a -n "$REPO_PASSWORD" ] ; then curl -s -A "$AGENT" -J -O "$1" --user "$REPO_USERNAME:$REPO_PASSWORD" else curl -s -A "$AGENT" -J -O "$1" fi } downloadWget(){ cd "$TMP" wget -nc -q -O "$2.apk" "$1" } downloadMultiplePackagesFromFdroid(){ # PACKAGES must be defined as an Array. for (( i=0; i < ${#PACKAGES[@]}; i=`expr $i + 2` )); do local appname="${PACKAGES[$i]}" local apppack="${PACKAGES[$i + 1]}" getVersionCodeInstalledOnSystem "$apppack" && versionCodeOnSystem="$ret" getLatestPackageFDroid "$apppack" # Only download if not installed on system, or different version if [ $ret2 -gt $versionCodeOnSystem -o "$versionCodeOnSystem" == "-1" ] ; then downloadApk "$ret" "$appname" else coloredMessage "Skipping:" "$appname" "true" fi done } enterCredentials(){ [ "$SKIP" == "true" ] && return if [ $# -gt 0 ] ; then REPO_USERNAME="$1" echo "Username: $1" else echo "Enter Username" read REPO_USERNAME fi echo "Enter Password: " read -s REPO_PASSWORD } clearCredentials(){ REPO_USERNAME="" REPO_PASSWORD="" } ##################################### echo "Working folder: $TMP" mkdir -p "$TMP" #################################### # F-Droid packages (official) loadFDroidRepo "https://f-droid.org/repo" # dandelion #getLatestPackageFDroid "com.github.dfa.diaspora_android" #downloadApk "$ret" "dandelion" PACKAGES=( \ "AF-Wall" "dev.ukanth.ufirewall" \ "Ad-Away" "org.adaway" \ "Barcode Scanner" "com.google.zxing.client.android" \ "Contact Merger" "de.measite.contactmerger" \ "Conversations" "eu.siacs.conversations" \ "DavDroid" "at.bitfire.davdroid" \ "Chromium Auto up2" "com.dosse.chromiumautoupdater" \ "NextCloud" "com.nextcloud.client" \ "Night Screen" "info.papdt.blackblub" \ "OpenTasks" "org.dmfs.tasks" \ "OsmAnd" "net.osmand.plus" \ "Silence IM" "org.smssecure.smssecure" \ "VLC" "org.videolan.vlc" \ "QuickDic" "de.reimardoeffinger.quickdic" \ ) downloadMultiplePackagesFromFdroid #################################### # MYSERVER packages PACKAGES=( \ "Omich" "com.omichsoft.newplayer" \ "Titanium" "com.keramidas.TitaniumBackup" \ ) enterCredentials "fdroid" loadFDroidRepo "https://MYSERVER/fdroid" downloadMultiplePackagesFromFdroid $PACKAGES #### Install to phone echo "APK --> Phone?" cd "$TMP" find . -iname "*.apk" -exec bash -c 'printf "\n\n" && adb install -r "{}"' \;