lbry-android/scripts/lbry-android.sh
2019-07-15 17:36:31 -04:00

168 lines
6.1 KiB
Bash
Executable file

#!/bin/bash
(
ANDROID_STUDIO_SDK=${ANDROID_STUDIO_SDK:-$HOME/Android/Sdk}
LBRY_ANDROID_HOME=${LBRY_ANDROID_HOME:-$HOME/git/vendor/lbryio/lbry-android}
LBRY_ANDROID_BUILDOZER_HOME=${LBRY_ANDROID_BUILDOZER_HOME:-$LBRY_ANDROID_HOME/.buildozer}
LBRY_ANDROID_BUILDOZER_DOWNLOADS=${LBRY_ANDROID_BUILDOZER_DOWNLOADS:-$LBRY_ANDROID_HOME/.buildozer-downloads}
LBRY_ANDROID_REPO=${LBRY_ANDROID_REPO:-https://www.github.com/lbryio/lbry-android}
LBRY_ANDROID_IMAGE=${LBRY_ANDROID_IMAGE:-lbry-android:local}
## Logger utility:
exe() { ( echo "## $*"; $*; ) }
## Confirmation dialog:
## usage: prompt_confirm "Overwrite File?" || return 1
prompt-confirm() {
while true; do
read -r -n 1 -p "${1:-Continue?} [y/n]: " REPLY
case $REPLY in
[yY]) echo ; return 0 ;;
[nN]) echo ; return 1 ;;
*) printf " \033[31m %s \n\033[0m" "invalid input"
esac
done
}
check-dependencies() {
if [ ! -d $ANDROID_STUDIO_SDK ]; then
echo "Error: $ANDROID_STUDIO_SDK not found."
echo "You must download and install Android Studio:"
echo "https://developer.android.com/studio/"
return 1
elif ! which docker > /dev/null; then
echo "You must install docker and setup sudo to access it as regular user."
return 1
elif ! which sudo > /dev/null; then
echo "You must install sudo and setup user account for sudo priviliges."
return 1
fi
}
check-src-dir() {
if [ ! -d $LBRY_ANDROID_HOME ]; then
echo "Cannot find lbry-android source code:"
echo "$LBRY_ANDROID_HOME"
echo ""
echo "Clone the lbry-android repository first, run:"
echo " lbry-android clone"
echo ""
echo "To use a different path set the LBRY_ANDROID_HOME variable."
return 1
fi
}
setup() {
set -e
check-src-dir || return 1
exe $HOME/Android/Sdk/tools/bin/sdkmanager "platforms;android-27"
if [ -d $LBRY_ANDROID_BUILDOZER_HOME ]; then
echo "Buildozer path already exists: $LBRY_ANDROID_BUILDOZER_HOME"
echo "If you would like to re-install from scratch, delete that directory first:"
echo " sudo rm -rf $LBRY_ANDROID_BUILDOZER_HOME"
else
mkdir -p $LBRY_ANDROID_BUILDOZER_HOME
mkdir -p $LBRY_ANDROID_BUILDOZER_DOWNLOADS
exe sudo docker run --rm -it \
-v $LBRY_ANDROID_HOME:/src \
-v $LBRY_ANDROID_BUILDOZER_HOME:/home/lbry-android/.buildozer/ \
-v $LBRY_ANDROID_BUILDOZER_DOWNLOADS:/home/lbry-android/.buildozer-downloads/ \
$LBRY_ANDROID_IMAGE \
/home/lbry-android/bin/setup
fi
}
## Build lbry-android docker image
docker-build(){
check-src-dir || return 1
sudo docker build -t $LBRY_ANDROID_IMAGE $LBRY_ANDROID_HOME
}
## Build lbry-android apk
ANDROID_SDK_LICENSE=$ANDROID_STUDIO_SDK/licenses/android-sdk-license
build(){
if [ ! -f $ANDROID_SDK_LICENSE ]; then
echo "Android SDK license file not found:"
echo $ANDROID_SDK_LICENSE
echo "Open Android-Studio, download the SDK and accept the license agreement."
return 1
fi
if [ ! -d $LBRY_ANDROID_BUILDOZER_HOME ]; then
echo "Buildozer root not found: $LBRY_ANDROID_BUILDOZER_HOME"
echo "Run: lbry-android setup"
return 1
fi
check-src-dir || return 1
mkdir -p $LBRY_ANDROID_HOME/.gradle
exe sudo docker run --rm -it \
-v $LBRY_ANDROID_HOME:/src \
-v $LBRY_ANDROID_BUILDOZER_HOME:/home/lbry-android/.buildozer/ \
-v $LBRY_ANDROID_HOME/.gradle:/home/lbry-android/.gradle/ \
-v $ANDROID_SDK_LICENSE:/home/lbry-android/.buildozer/android/platform/android-sdk-23/licenses/android-sdk-license \
$LBRY_ANDROID_IMAGE
}
clone() {
if [ -d $LBRY_ANDROID_HOME ]; then
echo "$LBRY_ANDROID_HOME already exists."
echo "If you wish to use a different path set the LBRY_ANDROID_HOME variable."
return 1
else
exe git clone $LBRY_ANDROID_REPO $LBRY_ANDROID_HOME
(
cd $LBRY_ANDROID_HOME
exe git submodule update --init --recursive
)
echo ""
echo "lbry-android clone complete."
echo "LBRY_ANDROID_HOME=$LBRY_ANDROID_HOME"
fi
}
clean() {
exe sudo docker run --rm -it \
-v $LBRY_ANDROID_HOME:/src \
-v $LBRY_ANDROID_BUILDOZER_HOME:/home/lbry-android/.buildozer/ \
-v $LBRY_ANDROID_HOME/.gradle:/home/lbry-android/.gradle/ \
-v $ANDROID_SDK_LICENSE:/home/lbry-android/.buildozer/android/platform/android-sdk-23/licenses/android-sdk-license \
$LBRY_ANDROID_IMAGE /bin/bash -c "cd /src && buildozer android clean"
}
SUBCOMMANDS_NO_ARGS=(setup clone docker-build build clean)
SUBCOMMANDS_PASS_ARGS=(none)
check-dependencies || return 1
if printf '%s\n' ${SUBCOMMANDS_NO_ARGS[@]} | grep -q -P "^$1$"; then
## Subcommands that take no arguments:
(
set -e
if [ "$#" -eq 1 ]; then
$*
else
echo "$1 does not take any additional arguments"
fi
)
elif printf '%s\n' ${SUBCOMMANDS_PASS_ARGS[@]} | grep -q -P "^$1$"; then
## Subcommands that pass all arguments:
(
set -e
$*
)
else
if [[ $# -gt 0 ]]; then
echo "## Invalid command: $1"
else
echo "## Must specify a command:"
fi
echo ""
echo "## lbry-android setup"
echo "## - Sets up buildozer and downloads dependencies"
echo "## lbry-android docker-build"
echo "## - Builds the lbry-android docker container"
echo "## lbry-android build"
echo "## - Builds the lbry-android apk"
fi
)