blob: 485d33d95459910efe2e28a18e54896cc60d05e8 [file] [log] [blame]
#!/usr/bin/env bash
function usage() {
echo "Usage: studiow [--clean] [--reinstall] [<project subset>]"
echo
echo "OPTIONS"
echo " --clean"
echo " Clear (with backup) generated files (settings, caches, etc) before launching"
echo
echo " --reinstall"
echo " Remove and re-download Studio itself. Also implies --clean"
echo
echo "Project subsets:"
echo " m, main"
echo " Open the project subset main: non-Compose Jetpack libraries"
echo
echo " c, compose"
echo " Open the project subset compose"
echo
echo " f, flan"
echo " Open the project subset flan: Fragment, Lifecycle, Activity, and Navigation"
echo
echo " media"
echo " Open the project subset media: Media, Media2, and MediaRouter"
echo
echo " w, wear"
echo " Open the project subset for Wear OS libraries"
echo
echo " a, all"
echo " Open the project subset all"
echo
exit 1
}
cd "$(dirname $0)"
subsetArg=""
clean=false
reinstall=false
projectSubset=""
while [ "$1" != "" ]; do
arg="$1"
shift
# parse options
if [ "$arg" == "--clean" ]; then
clean=true
continue
fi
if [ "$arg" == "--reinstall" ]; then
clean=true
reinstall=true
continue
fi
# parse arguments
subsetArg="$arg"
newSubset=""
if [ "$subsetArg" == "m" -o "$subsetArg" == "main" ]; then
newSubset=main
fi
if [ "$subsetArg" == "c" -o "$subsetArg" == "compose" ]; then
newSubset=compose
fi
if [ "$subsetArg" == "f" -o "$subsetArg" == "flan" ]; then
newSubset=flan
fi
if [ "$subsetArg" == "media" ]; then
newSubset=media
fi
if [ "$subsetArg" == "w" -o "$subsetArg" == "wear" ]; then
newSubset=wear
fi
if [ "$subsetArg" == "a" -o "$subsetArg" == "all" ]; then
newSubset=all
fi
if [ "$newSubset" == "" ]; then
echo "Unrecognized argument: '$subsetArg'"
usage
fi
if [ "$projectSubset" != "" ]; then
echo "Unrecognized argument '$subsetArg', cannot specify project subset more than once"
usage
fi
projectSubset=$newSubset
done
if [ "$projectSubset" == "" ]; then
echo "Project subset is required"
usage
fi
export ANDROIDX_PROJECTS=$projectSubset
# ensures the nonexistence of a file or directory, and makes a backup
function remove() {
path="$1"
backup="$(dirname $path)/studio-backup/$(basename $path)"
if [ -e "$path" ]; then
echo "Moving $path to $backup"
rm "$backup" -rf
mkdir -p "$(dirname $backup)"
mv "$path" "$backup"
fi
}
if [ "$reinstall" == "true" ]; then
# remove Studio itself so Gradle will re-download it
rm studio -rf
fi
if [ "$clean" == "true" ]; then
# remove studio-specific caches
# make backups of files that users might have customized
remove ~/.AndroidStudioAndroidX
remove ~/.AndroidStudioAndroidXPlayground
remove ~/.android
# delete (without backup) files that users won't have customized
git clean -fdX .idea/
# remove gradle caches too and build
./cleanBuild.sh -y studio
else
# ask gradle to launch studio
./gradlew studio
fi