得到
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This is a wrapper script that runs the specific version of Android Studio that is recommended for developing in this repository.
|
||||
# (This serves a similar purpose to gradlew)
|
||||
|
||||
|
||||
function getStudioUrl() {
|
||||
propertiesFile="${scriptDir}/studio_versions.properties"
|
||||
version="$(grep "studio_version=" ${propertiesFile} | sed 's/[^=]*=//')"
|
||||
ideaMajorVersion="$(grep "idea_major_version=" ${propertiesFile} | sed 's/[^=]*=//')"
|
||||
buildNumber="$(grep "studio_build_number=" ${propertiesFile} | sed 's/[^=]*=//')"
|
||||
osName="$1"
|
||||
if [ "${osName}" == "linux" ]; then
|
||||
extension="tar.gz"
|
||||
else
|
||||
extension="zip"
|
||||
fi
|
||||
studioUrl="https://dl.google.com/dl/android/studio/ide-zips/${version}/android-studio-ide-${ideaMajorVersion}.${buildNumber}-${osName}.${extension}"
|
||||
echo "${studioUrl}"
|
||||
}
|
||||
|
||||
acceptsLicenseAgreement="$1"
|
||||
scriptDir="$(cd $(dirname $0) && pwd)"
|
||||
projectDir=$scriptDir
|
||||
tempDir="${scriptDir}/studio"
|
||||
function getOsName() {
|
||||
unameOutput="$(uname)"
|
||||
osName=""
|
||||
if [ "${unameOutput}" == "Linux" ]; then
|
||||
osName="linux"
|
||||
else
|
||||
osName="mac"
|
||||
fi
|
||||
echo "${osName}"
|
||||
}
|
||||
osName="$(getOsName)"
|
||||
studioUrl="$(getStudioUrl $osName)"
|
||||
studioDestName="$(basename ${studioUrl})"
|
||||
studioZipPath="${tempDir}/${studioDestName}"
|
||||
studioUnzippedPath="$(echo ${studioZipPath} | sed 's/\.zip$//' | sed 's/\.tar.gz$//')"
|
||||
|
||||
function error_exit {
|
||||
echo "$1" >&2 ## Send message to stderr.
|
||||
exit 1
|
||||
}
|
||||
|
||||
function downloadFile() {
|
||||
fromUrl="$1"
|
||||
destPath="$2"
|
||||
tempPath="${destPath}.tmp"
|
||||
if [ -f "${destPath}" ]; then
|
||||
read -r -n 1 -p "File already exists. Do you want to delete and re-download? [Y/n]? " reply
|
||||
|
||||
if [ ! -z "${reply}" ]; then
|
||||
# Fix missing newline
|
||||
echo
|
||||
fi
|
||||
|
||||
case "${reply}" in
|
||||
[yY]|"")
|
||||
rm "${destPath}"
|
||||
;;
|
||||
*)
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ -f "${destPath}" ]; then
|
||||
echo "Using existing file from ${destPath}"
|
||||
else
|
||||
echo "Downloading ${fromUrl} to ${destPath}"
|
||||
curl "${fromUrl}" > "${tempPath}"
|
||||
mv "${tempPath}" "${destPath}"
|
||||
fi
|
||||
}
|
||||
|
||||
function findStudioMacAppPath() {
|
||||
echo "$(find "${studioUnzippedPath}" -type d -depth 1 -name "Android Studio*.app")"
|
||||
}
|
||||
|
||||
function getLicensePath() {
|
||||
if [ "${osName}" == "mac" ]; then
|
||||
appPath="$(findStudioMacAppPath)"
|
||||
echo "${appPath}/Contents/Resources/LICENSE.txt"
|
||||
else
|
||||
echo "${studioUnzippedPath}/android-studio/LICENSE.txt"
|
||||
fi
|
||||
}
|
||||
|
||||
function checkLicenseAgreement() {
|
||||
# TODO: Is there a more official way to check that the user accepts the license?
|
||||
|
||||
licenseAcceptedPath="${studioUnzippedPath}/STUDIOW_LICENSE_ACCEPTED"
|
||||
|
||||
if [ ! -f "${licenseAcceptedPath}" ]; then
|
||||
if [ "${acceptsLicenseAgreement}" == "-y" ]; then
|
||||
touch "${licenseAcceptedPath}"
|
||||
else
|
||||
read -r -n 1 -p "Do you accept the license agreement at $(getLicensePath) [Y/n]? " reply
|
||||
|
||||
if [ ! -z "${reply}" ]; then
|
||||
# Fix missing newline
|
||||
echo
|
||||
fi
|
||||
|
||||
case "${reply}" in
|
||||
[yY]|"")
|
||||
touch "${licenseAcceptedPath}"
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function updateStudio() {
|
||||
# skip if already up-to-date
|
||||
if stat "${studioUnzippedPath}" >/dev/null 2>/dev/null; then
|
||||
# already up-to-date
|
||||
return
|
||||
fi
|
||||
|
||||
mkdir -p "${tempDir}"
|
||||
downloadFile "${studioUrl}" "${studioZipPath}"
|
||||
echo
|
||||
|
||||
echo "Removing previous installations"
|
||||
ls "${tempDir}" | grep -v "^${studioDestName}\$" | sed "s|^|${tempDir}/|" | xargs rm -rf
|
||||
|
||||
echo "Unzipping"
|
||||
if [ "${osName}" == "linux" ]; then
|
||||
mkdir $studioUnzippedPath
|
||||
tar -xzf "${studioZipPath}" --directory "${studioUnzippedPath}"
|
||||
else
|
||||
unzip "${studioZipPath}" -d "${studioUnzippedPath}"
|
||||
fi
|
||||
}
|
||||
|
||||
function ensureComposeAt() {
|
||||
pluginPath=$1
|
||||
copyOption=$2
|
||||
idePluginJar="$pluginPath/r4a-ide-plugin.jar"
|
||||
compilerPluginJar="$pluginPath/r4a-compiler-plugin.jar"
|
||||
compilerPluginJarOutput="androidx_prebuilts/out/ui/build/support_repo/androidx/compose/compose-plugin-cli/0.1.0-dev01/compose-plugin-cli-0.1.0-dev01.jar"
|
||||
idePluginJarOutput="androidx_prebuilts/out/ui/build/support_repo/androidx/compose/compose-plugin-ide/0.1.0-dev01/compose-plugin-ide-0.1.0-dev01.jar"
|
||||
if [ ! -e "$idePluginJarOutput" ] || [ ! -e "$compilerPluginJarOutput" ]
|
||||
then
|
||||
echo "Building compose plugin"
|
||||
./gradlew :compose-plugin-ide:assemble :compose-plugin-cli:ideVersion
|
||||
fi
|
||||
cp $copyOption "$compilerPluginJarOutput" "$compilerPluginJar"
|
||||
cp $copyOption "$idePluginJarOutput" "$idePluginJar"
|
||||
}
|
||||
|
||||
function ensureComposeLinux() {
|
||||
ensureComposeAt "${studioUnzippedPath}/android-studio/plugins/Kotlin/lib" "-u"
|
||||
}
|
||||
|
||||
function ensureComposeMac() {
|
||||
ensureComposeAt "$(findStudioMacAppPath)/Contents/plugins/Kotlin/lib"
|
||||
}
|
||||
|
||||
function ensureCompose() {
|
||||
# ensure compose plugin is up-to-date
|
||||
if [ "${osName}" == "mac" ]; then
|
||||
ensureComposeMac
|
||||
else
|
||||
ensureComposeLinux
|
||||
fi
|
||||
}
|
||||
|
||||
function runStudioLinux() {
|
||||
studioPath="${studioUnzippedPath}/android-studio/bin/studio.sh"
|
||||
echo "$studioPath &"
|
||||
env STUDIO_PROPERTIES="${projectDir}/idea.properties" \
|
||||
STUDIO_VM_OPTIONS="${projectDir}/../development/studio/studio.vmoptions" \
|
||||
KOTLIN_OVERRIDE="1.3.30-compose-20190503" \
|
||||
"${studioPath}" "${projectDir}" &
|
||||
}
|
||||
|
||||
function runStudioMac() {
|
||||
appPath="$(findStudioMacAppPath)"
|
||||
echo "open ${appPath}"
|
||||
env STUDIO_PROPERTIES="${projectDir}/idea.properties" \
|
||||
STUDIO_VM_OPTIONS="${projectDir}/../development/studio/studio.vmoptions" \
|
||||
KOTLIN_OVERRIDE="1.3.30-compose-20190503" \
|
||||
open -a "${appPath}" "${projectDir}"
|
||||
}
|
||||
|
||||
function runStudio() {
|
||||
if [ "${osName}" == "mac" ]; then
|
||||
runStudioMac
|
||||
else
|
||||
runStudioLinux
|
||||
fi
|
||||
}
|
||||
|
||||
function main() {
|
||||
updateStudio
|
||||
ensureCompose
|
||||
checkLicenseAgreement
|
||||
runStudio
|
||||
}
|
||||
|
||||
main
|
||||
Reference in New Issue
Block a user