Manually install Android SDK on Ubuntu
Tags: uncategorized
Published: 2024-03-27 09:59:24

---
title: Manually install Android SDK on Ubuntu
published: true
date: 2024-03-26 18:25:18 UTC
tags: Uncategorized
canonical_url: https://www.amarjanica.com/manually-install-android-sdk-on-ubuntu
---

I’ve been a long time only Ubuntu user and just recently formatted my desktop computer and bought a Windows 11. Point being, I made a tutorial on [how to configure android sdk on windows](https://www.amarjanica.com/configure-android-sdk-environment-on-windows-11) too.

Instead of using Android studio, I’ll show you how you can install android sdk from the terminal.

## Install Java

This is the first requirement, I prefer the [Oracle version](https://www.oracle.com/java/technologies/downloads/#java17), but feel free to use openjdk if you like.

Verify the installation with `java -version`:

```
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
```

If you happen to get a different java version than the currently installed, you can always fix it by running:

```
sudo update-alternatives --config javac
sudo update-alternatives --config java
```

And I also suggest setting up the JAVA\_HOME. Edit `.profile` and set:

```
export JAVA_HOME="/usr/lib/jvm/jdk-17-oracle-x64"
```

Save file, run` source ~/.profile` to update your current environment.

## **Get just the command line tools**

These tools will help you do anything you need just from the command line, most importantly installing the sdk. Go to [https://developer.android.com/studio](https://developer.android.com/studio) and scroll down to command line tools, download.

![command line tools, manual sdk install](https://www.amarjanica.com/wp-content/uploads/2024/03/commandlinetools-1024x440.png)

## Install the SDK

Extract your tools somewhere, and first run a small configuration as suggested by [https://stackoverflow.com/a/71331807](https://stackoverflow.com/a/71331807) to avoid the “could not determine SDK root” error.

```
unzip commandlinetools-linux-<your_version>.zip 
mv cmdline-tools ~/android-sdk/latest
cd ~/android-sdk/latest/cmdline-tools
```

Run this command from the cmd line tools to install version 34 of api and tools:

```
./sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"
```

You can always see what’s available to install with `sdkmanager --list`.

## Declare paths and environment variables

To be able to access platform-tools and cmdline-tools from anywhere, set up the env variables.

Edit .profile and add:

```
export ANDROID_HOME=$HOME/<location-of-sdk> # where did you extract the sdk?
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator
```

Save file and run source .profile to propagate the changes.

## Verify Installation

If everything went smoothly, `adb version` should give you something like:

```
Android Debug Bridge version 1.0.41
Version 34.0.1-9979309
Installed as /usr/bin/adb
Running on Linux 5-15-0-97-generic (x86_64)
```

Last Part

If you need an emulator, install system images and create an AVD (Android Virtual Device):

```
sdkmanager "system-images;android-34;default;x86_64"
avdmanager create avd -n testDevice -k "system-images;android-34;default;x86_64"

```

Check that your testDevice is in the list and run the emulator

```
emulator -list-avds
emulator @testDevice
```

## Fun with Ubuntu

I said at the beginning of the article, things don’t go as smooth as they should.

### NoClassDefFoundError

[Failed to install android-sdk: “java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema”](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a)

This SO provides a solution, I just wanted to add this kind of thing happens when sdk is downloaded via Android Studio and the included avdmanager is deprecated. You will not have this issue if you installed this manually.

### Deprecated Java Version

> **has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.**0

This error only occurs if you have multiple java versions installed and have not configured the system properly. In my case it was java compiler pointing to the oracle java 8 version.

```
# this is correct
> java -version
openjdk version "11.0.21" 2023-10-17
OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
> javac -version
javac 1.8.0_171
```

You can fix it by running the command below and picking the newer version:

```
sudo update-alternatives --config javac
There are 2 choices for the alternative javac (providing /usr/bin/javac).

  Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 auto mode
  1 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 manual mode
  2 /usr/lib/jvm/java-8-oracle/bin/javac 1081 manual mode

```

### INSTALL\_FAILED\_UPDATE\_INCOMPATIBLE

> adb: failed to install .apk: Failure [INSTALL\_FAILED\_UPDATE\_INCOMPATIBLE: Package your.package signatures do not match previously installed version; ignoring!]

Error message is explanatory enough, solution is to uninstall your.package. This error might happen if you’re running expo android on your actual device, which had another version of your.package installed.

```
adb uninstall your.package
```

## Extra

I’ve already covered setting up the SDK and troubleshooting common issues. This is just an extra section which applies to any OS platform: be it Linux, Windows or MacOS.

While you’re developing you’ll want to run your app on the emulator and real device, be able to communicate with other api services, debug…

### Communicating with services

While you’re developing your app and testing either on your emulator or your device, you might need to access your local api. Localhost won’t do. Check that you’re on the same wifi, that your api is on 0.0.0.0 or more restrictive 192.x.x.x (whatever ip is written in your network settings).

Other solution would be to use a service like [ngrok](https://ngrok.com/), but then your api is open to the world if they manage to guess your ngrok url.

### Adb device permission issues

Check that you have enabled development mode and usb debugging. Connected device should use usb for data transfer.

- Try a different usb port
- The `adb usb` command restarts the adb server and forces it to listen for USB connections, which can also help in resetting the USB interface for ADB.

### Debugging Logs

Very useful when you’re running your app on an emulator or the device, expo logs will not be enough at times. Their errors are sometimes too cryptic. You can use `adb logcat -e your.pack`age to see what’s actually going on.

### Running the emulator from virtualbox

While I was recording my youtube video, I was running Ubuntu from Virtualbox. I tried running the emulator from virtualbox, but error kept saying “missing hardware acceleration”.

You can run the emulator, just add “–no-accel”. No reason why you would want that because it’s extremely slow, but just pointing it’s doable.