Android
Related articles
Contents
- 1 Exploring Android device
- 2 Android development
- 3 Building Android
- 4 Restoring Android
- 5 Alternative connection methods
- 6 Tips & Tricks
-
7 Troubleshooting
- 7.1 Android Studio: Android Virtual Devices show 'failed to load'.
- 7.2 Android Studio: 'failed to create the SD card'
- 7.3 aapt: No such file or directory
- 7.4 ValueError: unsupported pickle protocol
- 7.5 libGL error: failed to load driver: swrast OR AVD doesn't load and no error message displayed
- 7.6 sh: glxinfo: command not found
Exploring Android device
There are few methods of exploring your device:
- MTP over USB for files transferring.
- Alternative methods (such as FTP, SSH).
For more advanced usage, development, flashing and restore:
- ADB mostly for development purposes.
- Restoring Android for flashing and restoring Android firmwares (includes fastboot).
Android development
There are 3 steps that need to be performed before you can develop Android applications on your Arch Linux box:
- Install the Android SDK core component,
- Install one or several Android SDK Platform packages,
- Install one of the IDEs compatible with the Android SDK.
Android SDK core components
Before developing Android applications, you need to install the Android SDK, which is made of 4 distinct packages, all installable from AUR:
If supporting older devices, or working with older code, android-supportAUR and android-support-repositoryAUR might be required.
Android-sdk will be installed on /opt/android-sdk
. This folder has root permissions, so keep in mind to run sdk manager as root, otherwise you will not be able to modify anything in this directory. If you intend to use it as a regular user, create the Android sdk users group:
# groupadd sdkusers
Add your user into this group:
# gpasswd -a <user> sdkusers
Change folder's group.
# chown -R :sdkusers /opt/android-sdk/
Change permissions of the folder so the user that was just added to the group will be able to write in it:
# chmod -R g+w /opt/android-sdk/
Re-login or as <user> log your terminal in to the newly created group:
$ newgrp sdkusers
Android SDK platform API
Install the desired Android SDK Platform package from the AUR:
- android-platformAUR (latest)
- android-platform-24AUR
- android-platform-23AUR
- android-platform-22AUR
- android-platform-21AUR
- android-platform-20AUR
- android-platform-19AUR
- android-platform-18AUR
- android-platform-17AUR
- android-platform-16AUR
- android-platform-15AUR
- android-platform-14AUR
Android System Images
Install the desired Android system image package from the AUR. This step may not be necessary if installing Android Studio. The Images are needed for emulating a specific android device. They are not needed if you want to develop with an android phone.
Development environment
Android Studio is the new official Android development environment based on IntelliJ IDEA. Alternatively, you can use Netbeans with the NBAndroid plugin. All are described below.
Android Studio
Android Studio is the official Android development environment based on IntelliJ Idea. Android Studio replaces the older Eclipse Android Developer Tools and provides integrated Android developer tools for development and debugging.
You can download and install it with the android-studioAUR package from the AUR. If you get an error about a missing SDK, refer to the section Getting Android SDK platform API above.
Normally, apps are built through the Android Studio GUI. To build apps from the commandline (using e.g. ./gradlew assembleDebug
), add the following to your ~/.bashrc
:
export ANDROID_HOME=/opt/android-sdk
Netbeans
If you prefer using Netbeans as your IDE and want to develop Android applications, download the NBAndroid by going to:
Tools -> Plugins -> Settings
Add the following URL: http://nbandroid.org/release81/updates/updates.xml
Then go to Available Plugins and install the Android and JUnit plugins. Once you have installed go to:
Tools -> Options -> Miscellaneous -> Android
and select the path where the SDK is installed (/opt/android-sdk by default). That is it, now you can create a new Android project and start developing using Netbeans.
Eclipse
The official, but deprecated, Eclipse ADT plugin can be installed with the eclipse-androidAUR package.
Enter the path to the Android SDK Location in
Windows -> Preferences -> Android
Android Debug Bridge (ADB)
Connect device
To connect to a real device or phone via ADB under Arch, you must:
- Install android-tools. In addition, you might want to install android-udev if you wish to connect the device to the proper
/dev/
entries. - plug in your android device via USB.
- Enable USB Debugging on your phone or device:
- Jelly Bean (4.2) and newer: Go to
Settings --> About Phone
tap “Build Number” 7 times until you get a popup that you have become a developer. Then go toSettings --> Developer --> USB debugging
and enable it. The device will ask to allow the computer with its fingerprint to connect. allowing it permanent will copy $HOME/.android/adbkey.pub onto the devices /data/misc/adb/adb_keys folder. - Older versions: This is usually done from
Settings --> Applications --> Development --> USB debugging
. Reboot the phone after checking this option to make sure USB debugging is enabled.
- Jelly Bean (4.2) and newer: Go to
- If android-udev has been installed, add yourself to the adbusers group:
# gpasswd -a username adbusers
If ADB recognizes your device (adb devices
shows it as "device" and not as "unauthorized", or it is visible and accessible in IDE), you are done. Otherwise see instructions below.
Figure out device IDs
Each Android device has a USB vendor/product ID. An example for HTC Evo is:
vendor id: 0bb4 product id: 0c8d
Plug in your device and execute:
$ lsusb
It should come up something like this:
Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp.
Adding udev Rules
Use the rules from android-udev-gitAUR, install them manually from Android developer, or use the following template for your udev rules, just replace [VENDOR ID] and [PRODUCT ID] with yours. Copy these rules into /etc/udev/rules.d/51-android.rules
:
/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="[VENDOR ID]", MODE="0660", GROUP="adbusers" SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_adb" SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_fastboot"
Then, to reload your new udev rules, execute:
# udevadm control --reload-rules
Make sure you are member of adbusers
group to access adb
devices.
Configuring adb
Instead of using udev rules, you may create/edit ~/.android/adb_usb.ini
which contains a list of vendor IDs.
$ cat ~/.android/adb_usb.ini 0x27e8
Detect the device
After you have setup the udev rules, unplug your device and replug it.
After running:
$ adb devices
you should see something like:
List of devices attached HT07VHL00676 device
General usage
You can now use adb to transfer files between the device and your computer. To transfer files to the device, use
$ adb push <what-to-copy> <where-to-place>
To transfer files from the device, use
$ adb pull <what-to-pull> <where-to-place>
Notes & Troubleshooting
- ADB can also be installed via platform tools(usually available in
/opt/android-sdk/platform-tools/
), so it might not be necessary to install android-tools (available in/usr/bin/
).
- If you are getting an empty list (your device is not there), it may be because you have not enabled USB debugging on your device. You can do that by going to Settings => Applications => Development and enabling USB debugging. On Android 4.2 (Jelly Bean) the Development menu is hidden; to enable it go to Settings => About phone and tap Build number 7 times.
- If there are still problems such as adb displaying
???????? no permissions
under devices, try restarting the adb server as root.
# adb kill-server # adb start-server
- On moto e it could happen to have a different vendor/product id while you are on sideload or fastboot, verify again lsusb if you get no permission.
NVIDIA Tegra platform
If you target your application at NVIDIA Tegra platform, you might also want to install tools, samples and documentation provided by NVIDIA. In NVIDIA Developer Zone for Mobile there are two tools:
- The Tegra Android Development Pack provides tools (NVIDIA Debug Manager) related to Eclipse ADT and their documentation.
- The Tegra Toolkit provides tools (mostly CPU and GPU optimization related), samples and documentation.
Both are currently not available in the AUR anymore, because NVIDIA requires a registration/login for the download.
Building Android
Please note that these instructions are based on the official AOSP build instructions. Other Android-derived systems such as LineageOS will often require extra steps.
OS bitness
Android 2.2.x (Froyo) and below are the only versions of Android that will build on a 32-bit system. For 2.3.x (Gingerbread) and above, you will need a 64-bit installation.
Required packages
To build any version of Android, you need to install these packages:
- gcc-multilib git gnupg flex bison gperf sdl wxgtk squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt python2-virtualenv bc rsync ncurses5-compat-libsAUR lib32-zlib lib32-ncurses lib32-readline lib32-ncurses5-compat-libsAUR
The aosp-develAUR metapackage provides them all for simple installation.
Additionally, LineageOS requires the following packages:
They can be installed with the lineageos-develAUR metapackage.
Java Development Kit
- For Android 7 (Nougat), OpenJDK 8 is required, which is available with the jdk8-openjdk package.
- For Android 5 and 6 (Lollipop and Marshmallow), OpenJDK 7 is required, which is available with the jdk7-openjdk package.
Older versions require a working Oracle JDK installed on your build system. It will not work with OpenJDK.
- For Gingerbread through KitKat (2.3 - 4.4), Java 6 is required, which is available as jdk6AUR from the AUR.
- For Cupcake through Froyo (1.5 - 2.2), Java 5 is required, which is available as jdk5AUR from the AUR.
Setting up the build environment
Create a directory to build.
$ mkdir ~/android $ cd ~/android
The Android build process expects python
to be python2. Create a python2 virtual environment and activate it:
$ virtualenv2 venv $ source venv/bin/activate
Downloading the source code
This will clone the repositories. You only need to do this the first time you build Android, or if you want to switch branches.
- The
repo
has a-j
switch that operates similarly to the one used withmake
. Since it controls the number of simultaneous downloads, you should adjust the value depending on downstream network bandwidth.
- You will need to specify a branch (release of Android) to check out with the
-b
switch. If you leave the switch out, you will get the so-called master branch.
$ repo init -u https://android.googlesource.com/platform/manifest -b master $ repo sync -j4
Wait a long time. Just the uncompiled source code, along with the .repo
and .git
directories that are used to keep track of it, are well over 10 GB. As of Android 6.0.1, the entire codebase totals 40 GB.
Building the code
This should do what you need for AOSP:
$ source build/envsetup.sh $ lunch full-eng $ make -j4
If you run lunch without arguments, it will ask what build you want to create. Use -j with a number between one and two times number of cores/threads.
The build takes a very long time.
Testing the build
When finished, run/test the final image(s).
$ emulator
Creating a Flashable Image
To create an image that can be flashed it is necessary to:
make -j8 updatepackage
This will create a zip image under out/target/product/hammerhead (hammerhead being the device name) that can be flashed.
Restoring Android
In some cases, you want to return to the stock Android after flashing custom ROMs to your Android mobile device. For flashing instructions of your device, please use XDA forums.
Fastboot
Fastboot (as well as ADB) comes together with a package android-tools from the official repositories.
Samsung devices
Samsung devices can't be flashed using Fastboot tool. Alternatives are only Heimdall and Odin (by using Windows and VirtualBox).
Heimdall
Heimdall is a cross-platform open-source tool suite used to flash firmware (also known as ROMs) onto Samsung mobile devices and is also known as an alternative to Odin. It can be installed as heimdall or heimdall-gitAUR.
The flashing instructions can be found on Heimdall's GitHub page or on XDA forums.
Odin (Virtualbox)
It is also possible to restore stock Android on the Samsung devices using Odin, but inside the VirtualBox. For more information, see XDA thread.
Arch Linux related steps:
- Install VirtualBox together with its extension pack and guest additions.
- Install your preferred, but compatible with Odin, Windows operating system (with VirtualBox guest additions) into a virtual hard drive using VirtualBox
- Open VirtualBox settings of your Windows operating system, navigate to USB, then tick (or make sure it is ticked) Enable USB 2.0 (EHCI) Controller.
- At VirtualBox running Windows operating system, click in the menu bar Devices, then USB Devices, then click on your Samsung mobile device connected to your computer via USB.
Windows related links:
- Samsung drivers can be downloaded from here.
- Odin can be downloaded from here.
- Samsung Android firmware can be downloaded from here.
If you want to make sure that everything is working and ready:
- Turn your device into Download mode and connect to your Linux machine.
- In virtual machine toolbar, select
devices
-->USB
-->...Samsung...
device. - Open Odin. The white box (a big one at the bottom-left side) named Message, should print a line similar to this:
<ID:0/003> Added!!
which means that your device is visible to Odin and is ready to be flashed.
Alternative connection methods
Android File Transfer
android-file-transfer — reliable MTP client with minimalistic UI similar to Android File Transfer for Mac. It just works™.
adb-sync
adb-sync (available in adb-sync-gitAUR) is a tool to synchronize files between a PC and an Android device using the ADB protocol.
AirDroid
AirDroid is an Android app to access files from your web browser.
AndroidScreencast
AndroidScreencast was developed to view and control your android device from a PC (using ADB).
FTP
You run a FTP server on Arch and connect to it from your phone, or the other way around: run a FTP server on your phone and connect to it from Arch.
See List of applications/Internet#FTP. There are a lot of FTP clients/servers available for Android.
KDE Connect
kdeconnect integrates your android device with the KDE desktop. Its features include synced notifications, clipboard sync, multimedia control, and file/URL sharing.
SSH Server
There are many SSH servers available for Android, it allows you to transfer files using scp
command. See also SSH.
Samba
See Samba.
Tips & Tricks
During Debugging "Source not found"
Most probably the debugger wants to step into the Java code. As the source code of Android does not come with the Android SDK, this leads to an error. The best solution is to use step filters to not jump into the Java source code. Step filters are not activated by default. To activate them:
Window -> Preferences -> Java -> Debug -> Step Filtering
Consider to select them all. If appropriate you can add the android.* package. See the forum post for more information: http://www.eclipsezone.com/eclipse/forums/t83338.rhtml
Linux distribution on the sdcard
You can install Debian like in this thread. Excellent guide to installing Arch in chroot (in parallel with Android) can be found on archlinuxarm.org forum.
Troubleshooting
Android Studio: Android Virtual Devices show 'failed to load'.
Make sure you've exported the variable ANDROID_HOME
as explained in #Android Studio.
Android Studio: 'failed to create the SD card'
If you try to run an AVD (Android Virtual Device) under x86_64 Arch and get the error above, install the lib32-gcc-libs and lib32-ncurses packages from the Multilib repository.
aapt: No such file or directory
The build tools include 32-bit binaries. For this reason they require 32-bit libraries. If you happened to install the SDK manually, you will additionally need to install multilib/lib32-libstdc++5 and multilib/lib32-zlib.
ValueError: unsupported pickle protocol
One fix is to issue:
rm ~/.repopickle_.gitconfig
If that does not work, then try this:
rm `find /path/to/android-root -name .repopickle_config`
libGL error: failed to load driver: swrast OR AVD doesn't load and no error message displayed
Sometimes, beginning to load an AVD will cause an error message similar to this to be displayed, or the loading process will appear to finish but no AVD will load and no error message will be displayed.
The AVD loads an incorrect version of libstdc++, you can remove the folder libstdc++ from ~/Android/Sdk/emulator/lib64/ (for 64-bit) or ~/Android/Sdk/emulator/lib/ (for 32-bit) , e.g.:
rm -r ~/Android/Sdk/emulator/lib64/libstdc++
Alternatively you can set and export ANDROID_EMULATOR_USE_SYSTEM_LIBS in ~/.profile as:
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
Reference: Android Studio user guide, https://developer.android.com/studio/command-line/variables.html#studio_jdk
Fix for the .desktop file might be achieved by using env command, prefixing the Exec line Desktop entries#Modify environment variables
env ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
sh: glxinfo: command not found
Here's the full error:
Cannot launch AVD in emulator. Output: sh: glxinfo: command not found sh: glxinfo: command not found libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 24 (X_GLXCreateNewContext) Value in failed request: 0x0 Serial number of failed request: 32 Current serial number in output stream: 33 QObject::~QObject: Timers cannot be stopped from another thread
You can try to install glxinfo (Its mesa-demos) but if your computer has enough power you could simply use software to render graphics. To do so, go to Tools -> Android -> AVD Manager, edit the AVD (click the pencil icon), then select "Software - GLES 2.0" for "Emulated Performance -> Graphics".