Skip to content

Instantly share code, notes, and snippets.

@jjvillavicencio
Last active October 11, 2024 19:54
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
@NOPROD
Copy link

NOPROD commented Aug 30, 2020

@deva-gopalani

first solution :
mkdir -p /root/.android && touch /root/.android/repositories.cfg

second :
If when you do java -version

if you have openjdk version "11.0.8" 2020-07-14 or java > 8

you need to change your java version :

sudo update-alternatives --config java

select : /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

and try again
./sdkmanager --install "platform-tools" "platforms;android-26" "build-tools;26.0.3"

@jenipharachel
Copy link

@NOPROD I want to install the latest version of java and android studio with the android version 29 instead of 6. Any idea on how I can achieve this?

@jenipharachel
Copy link

I followed the exact steps but downloaded android 29 for platform and build tools version as 29.2.0 for react-native and I cant detect my physical device in adb devices. Any help will be much appreciated

@anhdo9797
Copy link

@NOPROD I want to install the latest version of java and android studio with the android version 29 instead of 6. Any idea on how I can achieve this?

change line 11 form:
./sdkmanager "platform-tools" "platforms;android-26" "build-tools;26.0.3"
to
./sdkmanager "platform-tools" "platforms;android-29" "build-tools;29.02 follow version platforms;android and build-tools at https://reactnative.dev/docs/environment-setup

@santos-gabriel-dario
Copy link

sudo update-alternatives --config java

Solved my problem, thank you!

@leandrocrs
Copy link

leandrocrs commented Mar 31, 2021

@BenHunt-io
Copy link

BenHunt-io commented Apr 9, 2021

If downloading the up-to-date cmdline-tools from the Android Studio website, you'll need to change the directory structure in order for you to be able to run the ./sdkmanager.

/home/ben/cmdline-tools/bin -> /home/ben/Android/cmdline-tools/latest/bin
worked for me.

https://stackoverflow.com/questions/65262340/cmdline-tools-could-not-determine-sdk-root

@AditechGH
Copy link

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

@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.

@Kulunkulu
Copy link

@5p0ng3b0b please can you confirm is the original gist above still works Aug 15th, 2024
I have been following different threads and gists referencing StackOverflow, in the StackOverflow, they are saying different things

for example you are suppose to move tools into cmdline-tools, only for an updated comment saying a new thing
i am so confused right now

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