Skip to content

Instantly share code, notes, and snippets.

@jjvillavicencio
Last active May 5, 2024 12:53
Show Gist options
  • Save jjvillavicencio/18feb09f0e93e017a861678bc638dcb0 to your computer and use it in GitHub Desktop.
Save jjvillavicencio/18feb09f0e93e017a861678bc638dcb0 to your computer and use it in GitHub Desktop.
Install Android SDK on Windows Bash (WSL)
cd /home/<user>/
sudo apt-get install unzip
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip -d Android
rm sdk-tools-linux-4333796.zip
sudo apt-get install -y lib32z1 openjdk-8-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
printf "\n\nexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc
cd Android/tools/bin
./sdkmanager "platform-tools" "platforms;android-26" "build-tools;26.0.3"
export ANDROID_HOME=/home/<user>/Android
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
printf "\n\nexport ANDROID_HOME=/home/<user>/Android\nexport PATH=\$PATH:\$ANDROID_HOME/tools\nexport PATH=\$PATH:\$ANDROID_HOME/platform-tools" >> ~/.bashrc
android update sdk --no-ui
sudo apt-get install gradle
gradle -v
adb start-server
@alyleite
Copy link

alyleite commented Jun 4, 2021

I got the below exception when I run ./sdkmanager "platform-tools" "platforms;android-26" "build-tools;26.0.3". Any Idea how I can resolve this?

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 5 more

Install jdk 8

@Download
Copy link

printf "\n\nexport ANDROID_HOME=/home//Android\nexport PATH=$PATH:$ANDROID_HOME/tools\nexport PATH=$PATH:$ANDROID_HOME/platform-tools" >> ~/.bashrc

Be careful! When you run this command multiple times it will end up making .bashrc larger and larger.
Ideally this cmd would contain some if to test whether .bashrc was already updated before.

@b6873
Copy link

b6873 commented Jul 31, 2021

Help me

@b6873
Copy link

b6873 commented Jul 31, 2021

i'm pool and we need a moneys please help me i'm myanmar please help My country😭

@unicornlab-brylleg
Copy link

unicornlab-brylleg commented Aug 6, 2021

Thank you all for this! My version of the scripts after looking into all the comments...

sudo apt-get update
cd
sudo apt-get install unzip zip
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip -d Android
rm sdk-tools-linux-4333796.zip
sudo apt-get install -y lib32z1 openjdk-8-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
printf "\n\nexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc
cd Android/tools/bin
### check latest platform and build-tools versions (29, 29.0.2)
./sdkmanager --install "platform-tools" "platforms;android-29" "build-tools;29.0.2"
export ANDROID_HOME=~/Android
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/tools/bin:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
printf "\n\nexport ANDROID_HOME=~/Android\nexport PATH=\$PATH:\$ANDROID_HOME/tools\nexport PATH=\$PATH:\$ANDROID_HOME/platform-tools" >> ~/.bashrc
./sdkmanager --update
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
### check latest grade version
sdk install gradle 5.5.1
gradle -v

### run "adb start-server" in powershell

@juanmartinez-viamericas
Copy link

juanmartinez-viamericas commented Aug 10, 2021

Excellent script thanks for sharing. I think you can update it by replacing /home/<user>/ with $HOME. Example:

export ANDROID_HOME="$HOME/Android"

And ANDROID_HOME environment variable was deprecated. It's recommended write as:

export ANDROID_HOME="$HOME/Android"
export ANDROID_SDK_ROOT="$ANDROID_SDK_ROOT"

@luiscarbonell
Copy link

THIS WORKS!!!! FINALLY!!!

lol

Jokes aside, I tried 6+ different things which led to dozens of StackOverflow Questions, GitHub Threads, etc. and all of them failed except this beautiful gem!

@jjvillavicencio Thank you! (Gracias!) @unicornlab-brylleg Thank you for the update!

@rizkysyazuli
Copy link

is this "sdk-tools-linux-4333796.zip" thing the latest version? anyone knows where to check?

@LuizTM
Copy link

LuizTM commented Nov 21, 2021

no @rizkysyazuli, the last version is "commandlinetools-linux-7302050_latest.zip", you can check how install here too:
https://gist.github.com/jason-s-yu/30375db45c1f71c1259e042d216e4bd3

@5p0ng3b0b
Copy link

Remove all paths with spaces in WSL by adding this line in /etc/profile
PATH=$(echo $PATH | sed 's|:/mnt/[a-z]/[a-z_]*\?/\?[A-Za-z]* [A-Za-z]* \?[A-Za-z]*\?[^:]*||g')
There are other tools such as buildroot that do not work when there are spaces in PATH.

@iago-silva
Copy link

Wonderful!

@ma-za-kpe
Copy link

So, after successfully installing, how do you resolve references while interacting with the code?

@agapiospanos
Copy link

agapiospanos commented Sep 25, 2022

You can easily replace <user> with $USER in the script. That will make things easier since we don't have to replace the any more... It will automatically get the current user ;)

@Dominique-Sakrisson
Copy link

This worked flawlessly thank you so much!

@brahmanandan
Copy link

Thank you, was useful!

@amorimcode
Copy link

java 11 version?

@nullset2
Copy link

nullset2 commented Jan 2, 2023

You can easily replace <user> with $USER in the script. That will make things easier since we don't have to replace the any more... It will automatically get the current user ;)

+1000000

Also, the android call on L16 can be changed to sdkmanager, since android as a command is deprecated

@yvmuogsedoz58122
Copy link

Thank you so much!!!

@Kousthubh02
Copy link

i am getting this error
image

@5p0ng3b0b
Copy link

5p0ng3b0b commented Mar 20, 2024

@Kousthubh02
/usr/bin/java is a symlink. I get the following:

ls -l $(which java)
lrwxrwxrwx 1 root root 22 Jan 28 23:07 /usr/bin/java -> /etc/alternatives/java
ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 43 Jan 28 23:07 /etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-amd64

what does echo $JAVA_HOME give you?
You may need to add export JAVA_HOME=\path\to\java\install\location to your ~/.bashrc file and add export PATH=\path\to\java\install\location\bin;"$PATH" as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment