Android: Difference between revisions

Almino (talk | contribs)
m Making it easier to list USB devices for beginners.
Pigs (talk | contribs)
m Add category development
 
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Using the Android SDK ==
== Using the Android SDK ==
NixOS uses the androidenv package for building android SDKs and manually creating emulators without the use of Android Studio. Example android sdk is <code>androidenv.androidPkgs_9_0.androidsdk</code>. They also include all of the SDK tools such as sdkmanager and avdmanager needed to create emulators.
 
{{Note|<code><small>androidenv.androidPkgs_9_0</small></code> has been replaced with <code><u><small>androidenv.androidPkgs</small></u></code> in nixos 24.11, see [https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2411.section.md#backward-incompatibilities-sec-release-2411-incompatibilities backward-incompatibilities-sec-release-2411-incompatibilities], so all the <code><small>androidPkgs_9_0</small></code> references below need be changed after 24.11 gets released.}}
NixOS uses the androidenv package for building android SDKs and manually creating emulators without the use of Android Studio. Example android sdk is <code>androidenv.androidPkgs.androidsdk</code>. They also include all of the SDK tools such as sdkmanager and avdmanager needed to create emulators.
 
{{Note|<code><small>androidenv.androidPkgs_9_0</small></code> has been replaced with <code><u><small>androidenv.androidPkgs</small></u></code> in nixos 24.11, see [https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2411.section.md#backward-incompatibilities-sec-release-2411-incompatibilities backward-incompatibilities-sec-release-2411-incompatibilities], so all the <code><small>androidPkgs</small></code> references below will be androidPkgs_9_0 if you are still using 24.05 or below.}}
 
The first link provides a guide for creating a custom android SDK, using a predefined SDK, and how to nixify an emulator. The second link is an extra guide that might have some helpful tips for improving your workflow.  
The first link provides a guide for creating a custom android SDK, using a predefined SDK, and how to nixify an emulator. The second link is an extra guide that might have some helpful tips for improving your workflow.  
# [https://nixos.org/manual/nixpkgs/unstable/#android Official Android SDK guide from NixOS.org]  
# [https://nixos.org/manual/nixpkgs/unstable/#android Official Android SDK guide from NixOS.org]  
Line 93: Line 96:


<syntaxhighlight lang=console>
<syntaxhighlight lang=console>
$ # For nixos < 19.03
$ # nix-shell -p androidenv.platformTools
$ # for nixos <= 24.05
$ nix-shell -p androidenv.androidPkgs_9_0.platform-tools
$ # For nixos >= 24.11
$ nix-shell -p androidenv.androidPkgs.platform-tools
$ nix-shell -p androidenv.androidPkgs.platform-tools
% adb devices
% adb devices
Line 115: Line 123:


<syntaxhighlight lang=console>
<syntaxhighlight lang=console>
$ # For nixos < 19.03
$ nix-shell -p androidenv.androidPkgs.platform-tools
$ # nix-shell -p androidenv.platformTools
$ nix-shell -p androidenv.androidPkgs_9_0.platform-tools
% adb connect 192.168.1.10
% adb connect 192.168.1.10
% adb shell
% adb shell
Line 145: Line 151:
nixpkgs.config.android_sdk.accept_license = true;
nixpkgs.config.android_sdk.accept_license = true;
</syntaxhighlight>
</syntaxhighlight>
To use the Android Emulator, you need to enable KVM virtualization (in your BIOS) and make sure your user has permission to use KVM (add yourself to the <code>kvm</code> group).


=== gradlew ===
=== gradlew ===
Line 157: Line 165:
   targetPkgs = pkgs: (with pkgs;
   targetPkgs = pkgs: (with pkgs;
     [
     [
       androidenv.androidPkgs_9_0.androidsdk
       androidenv.androidPkgs.androidsdk
       glibc
       glibc
     ]);
     ]);
Line 170: Line 178:


let
let
   androidSdk = pkgs.androidenv.androidPkgs_9_0.androidsdk;
   androidSdk = pkgs.androidenv.androidPkgs.androidsdk;
in
in
pkgs.mkShell {
pkgs.mkShell {
Line 186: Line 194:
=== Building Android on NixOS ===
=== Building Android on NixOS ===


It's possible to use nix-shell with buildFHSUserEnv to set up an environment in which it's viable to build Android without huge amounts of editing. This is an example shell.nix file.
It's possible to use nix-shell with buildFHSEnv to set up an environment in which it's viable to build Android without huge amounts of editing. This is an example shell.nix file.
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
{ pkgs ? import <nixpkgs> {} }:
{ pkgs ? import <nixpkgs> {} }:
   
   
let fhs = pkgs.buildFHSUserEnv {
let fhs = pkgs.buildFHSEnv {
   name = "android-env";
   name = "android-env";
   targetPkgs = pkgs: with pkgs;
   targetPkgs = pkgs: with pkgs;
Line 203: Line 211:
       gnumake
       gnumake
       nettools
       nettools
       androidenv.androidPkgs_9_0.platform-tools
       androidenv.androidPkgs.platform-tools
       jdk
       jdk
       schedtool
       schedtool
Line 240: Line 248:
=== Android Debug Bridge ===
=== Android Debug Bridge ===


Run <code>nix-shell -p usbutils --run "lsusb"</code> on your terminal to get the list of USB devices connected to your computer. Sample output ([https://stackoverflow.com/a/58594229/437459 source]):<pre>
Run <code>nix-shell -p usbutils --run "lsusb"</code> on your terminal to get the list of USB devices connected to your computer. Sample output:<pre>
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 009: ID 138a:0010 Validity Sensors, Inc. VFS Fingerprint sensor
...
Bus 001 Device 008: ID 13d3:3491 IMC Networks
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 007: ID 0fce:320d Sony Ericsson Mobile Communications AB Xperia 5 III
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
</pre>
</pre>


<code>ID 1d6b:0003</code> can be seen as: <code>idVendor = 1d6b</code> and <code>idProduct = 0003</code>.
<code>ID 0fce:320d</code> can be seen as: <code>idVendor = 0fce</code> and <code>idProduct = 320d</code>.


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 253: Line 264:
     let
     let
       # nix-shell -p usbutils --run "lsusb"
       # nix-shell -p usbutils --run "lsusb"
       idVendor = "1d6b"; # Change according to the guide above
       idVendor = "0fce"; # Change according to the guide above
       idProduct = "0003"; # Change according to the guide above
       idProduct = "320d"; # Change according to the guide above
     in
     in
     ''
     ''
Line 275: Line 286:
# [https://github.com/mrVanDalo/LineagoOS-build LineageOS build setup using terranix and hcloud], based on the [https://gist.github.com/Nadrieril/d006c0d9784ba7eff0b092796d78eb2a shell.nix to build LineageOS]. Useful if you are in a rush and don't have to much CPU power on your hand.
# [https://github.com/mrVanDalo/LineagoOS-build LineageOS build setup using terranix and hcloud], based on the [https://gist.github.com/Nadrieril/d006c0d9784ba7eff0b092796d78eb2a shell.nix to build LineageOS]. Useful if you are in a rush and don't have to much CPU power on your hand.
# [https://wiki.archlinux.org/title/Android_Debug_Bridge Archlinux Wiki to Android_Debug_Bridge]
# [https://wiki.archlinux.org/title/Android_Debug_Bridge Archlinux Wiki to Android_Debug_Bridge]
[[Category:Development]]