#!/bin/bash
set -e
test -n "$LINES" || {
eval $(resize)
}
test -n "$LINES" || {
read -r LINES COLUMNS < <(stty size)
}
test -n "$LINES" || {
LINES=25
COLUMS=80
}
type whiptail &>/dev/null && {
ECHO(){
whiptail --msgbox "$1" $((LINES - 6)) $(( $COLUMNS - 6)) --title "incorrect input"
}
READ(){
whiptail --inputbox "$1" $((LINES - 6)) $(( $COLUMNS - 6)) --title "$2" 3>&1 1>&2 2>&3
}
} || {
ECHO(){
echo "$1"
read -N 1 OK
}
READ(){
cat >&2 << EOF
---------------------------------------------
$2
---------------------------------------------
$1
EOF
read RESULT
echo "$RESULT"
}
}
#APP_NAME
while test -z "${APP_NAME:-}"
do
APP_NAME="$(READ 'Please choose the name of the app: ' 'Create new Android-App step (1/)')"
done
#APP_PACKAGE
while test -z "${APP_PACKAGE:-}"
do
APP_PACKAGE_DEFAULT="${APP_NAME,,}"
APP_PACKAGE_DEFAULT="${APP_PACKAGE_DEFAULT//[!a-z0-9]/_}"
APP_PACKAGE="$(READ "Please provide a Package.Name for the App [default=$APP_PACKAGE_DEFAULT]: " 'Create new Android-App step (2/)' )"
APP_PACKAGE="${APP_PACKAGE:-$APP_PACKAGE_DEFAULT}"
APP_PACKAGE="${APP_PACKAGE,,}"
APP_PACKAGE="${APP_PACKAGE//[!a-z0-9\.]/}"
test -d "apps/$APP_PACKAGE" && {
ECHO "There is already an app with APP_PACKAGE '$APP_PACKAGE'. Choose other APP_PACKAGE name" >&2
APP_PACKAGE=""
}
done
#APP_FOLDER
while test -z "${APP_FOLDER:-}"
do
APP_FOLDER_DEFAULT="./apps/${APP_PACKAGE}"
APP_FOLDER="$(READ "Please provide a a path where to setup the Android App Skeleton[default=$APP_FOLDER_DEFAULT]: " 'Create new Android-App step (3/)' )"
APP_FOLDER="${APP_FOLDER:-$APP_FOLDER_DEFAULT}"
test -d "$APP_FOLDER" && {
ECHO "There is already a folder at '$APP_FOLDER'. Choose other APP_PACKAGE name" >&2
APP_FOLDER=""
}
done
#APP_VERSION_SDK_TARGET
while test -z "${APP_VERSION_SDK_TARGET:-}"
do
APP_VERSION_SDK_TARGET_DEFAULT="33"
APP_VERSION_SDK_TARGET="$(READ "$(cat << API_LEVELS
Please Choose the Target SDK Version:
35 = android 15 = 2024
34 = android 14 = 2023
33 = android 13 = 2022
32 = android 12l = 2022
31 = android 12 = 2021
30 = android 11 = 2020
20 = android 10 = 2019
(see https://apilevels.com/ for more info)
please choose [default=$APP_VERSION_SDK_TARGET_DEFAULT]:
API_LEVELS
)" 'Create new Android-App step (4/)' )"
APP_VERSION_SDK_TARGET="${APP_VERSION_SDK_TARGET:-$APP_VERSION_SDK_TARGET_DEFAULT}"
test "$APP_VERSION_SDK_TARGET" -gt 0 || {
ECHO "error: APP_VERSION_SDK_TARGET '$APP_VERSION_SDK_TARGET' is not valid"
APP_VERSION_SDK_TARGET='';
}
done
#APP_VERSION_SDK_TARGET
while test -z "${APP_VERSION_SDK_MIN:-}"
do
APP_VERSION_SDK_MIN_DEFAULT="$(( $APP_VERSION_SDK_TARGET - 3))"
APP_VERSION_SDK_MIN="$(READ "$(cat << API_LEVELS
Please Choose the Target SDK Version:
35 = android 15 = 2024
34 = android 14 = 2023
33 = android 13 = 2022
32 = android 12l = 2022
31 = android 12 = 2021
30 = android 11 = 2020
20 = android 10 = 2019
(see https://apilevels.com/ for more info)
please choose [default=$APP_VERSION_SDK_MIN_DEFAULT]:
API_LEVELS
)" 'Create new Android-App step (5/)' )"
APP_VERSION_SDK_MIN="${APP_VERSION_SDK_MIN:-$APP_VERSION_SDK_MIN_DEFAULT}"
test "$APP_VERSION_SDK_MIN" -gt 0 || {
ECHO "error: APP_VERSION_SDK_MIN '$APP_VERSION_SDK_MIN' is not valid"
APP_VERSION_SDK_TARGET='';
}
done
APP_PERMISSIONS="$(cat << APP_PERMISSIONS_EOF
APP_PERMISSIONS_EOF
)"
mkdir -p "$APP_FOLDER"
APP_VALUES="$(tee "${APP_FOLDER}/values.sh" << VALUES
APP_NAME='$APP_NAME'
APP_PACKAGE='$APP_PACKAGE'
APP_FOLDER='$APP_FOLDER'
APP_VERSION_SDK_TARGET='$APP_VERSION_SDK_TARGET'
APP_VERSION_SDK_MINTARGET='$APP_VERSION_SDK_TARGET'
APP_PERMISSIONS='$APP_PERMISSIONS'
VALUES
)"
cat << INFO
Creating an skeleton for an Android app with the following info:
$APP_VALUES
INFO
cat > "${APP_FOLDER}/AndroidManifest.xml" << ANDROIDMANIFEST
$(sed 's/^/ /' <<< "$APP_PERMISSIONS")
ANDROIDMANIFEST
cat Dockerfile > "${APP_FOLDER}/Dockerfile"
cat >> "${APP_FOLDER}/Dockerfile" << DOCKERFILEADDITION
RUN echo "$YESACCEPT" | sdkmanager --install "build-tools;33.0.2"
RUN echo "$YESACCEPT" | sdkmanager --install "platforms;android-33"
DOCKERFILEADDITION