Android: Difference between revisions
imported>GovanifY m python3 is required for acloud & such |
imported>Numinit No edit summary |
||
Line 139: | Line 139: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
See the [https://nixos.org/manual/nixpkgs/unstable/#android androidenv documentation] for full examples. | |||
=== Building Android on NixOS === | === Building Android on NixOS === | ||
Line 201: | Line 203: | ||
== Using the nixpkgs androidenv == | == Using the nixpkgs androidenv == | ||
User Sander van der Burg created two awesome blog posts as well as a number of test cases usable as examples on how to use the nixpkgs androidenv and the emulator | User Sander van der Burg created two awesome blog posts as well as a number of test cases usable as examples on how to use the nixpkgs androidenv and the emulator provided: | ||
# [https://nixos.org/manual/nixpkgs/unstable/#android androidenv documentation] | |||
# [https://sandervanderburg.blogspot.de/2012/11/building-android-applications-with-nix.html Building Android applications with the Nix package manager ] | # [https://sandervanderburg.blogspot.de/2012/11/building-android-applications-with-nix.html Building Android applications with the Nix package manager ] | ||
# [https://sandervanderburg.blogspot.de/2014/02/reproducing-android-app-deployments-or.html Reproducing Android app deployments (or playing Angry Birds on NixOS)] | # [https://sandervanderburg.blogspot.de/2014/02/reproducing-android-app-deployments-or.html Reproducing Android app deployments (or playing Angry Birds on NixOS)] | ||
# [https://github.com/svanderburg/nix-androidenvtests A set of androidenv test cases] | # [https://github.com/svanderburg/nix-androidenvtests A set of androidenv test cases] |
Revision as of 22:51, 12 December 2020
adb setup
To enable adb
in NixOS for unprivileged users
add these lines to your configuration.nix
.
This is mandatory for all further interactions with your android device.
{
programs.adb.enable = true;
users.users.<your-user>.extraGroups = ["adbusers"];
}
This will add additional udev rules for unprivileged access as well as add adb to your $PATH
.
Alternatively, if you don't want to install adb globally but do want to configure the udev rules, you can:
{
services.udev.packages = [
pkgs.android-udev-rules
];
}
Use Older Platform Version
If you would like to get older platform version, you can write the following.
{ pkgs ? import <nixpkgs> {
config.android_sdk.accept_license = true;
overlays = [
(self: super: {
androidPkgs_8_0 = super.androidenv.composeAndroidPackages {
platformVersions = [ "26" ];
abiVersions = [ "x86" "x86_64"];
};
})
];
} }:
(pkgs.buildFHSUserEnv {
name = "android-sdk-env";
targetPkgs = pkgs: (with pkgs;
[
androidPkgs_8_0.androidsdk
glibc
]);
runScript = "bash";
}).env
Interaction with your Android device
adb shell on device
First open a nix-shell with the platform tools and connect your device:
$ # For nixos < 19.03
$ # nix-shell -p androidenv.platformTools
$ nix-shell -p androidenv.androidPkgs_9_0.platform-tools
% adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
BH90272JCU unauthorized
A popup appears on your phone to allow your computer access to it. After allowing, you can:
% adb devices
List of devices attached
BH90272JCU device
% adb shell
You can also connect to an already-running adb server:
$ # For nixos < 19.03
$ # nix-shell -p androidenv.platformTools
$ nix-shell -p androidenv.androidPkgs_9_0.platform-tools
% adb connect 192.168.1.10
% adb shell
Transferring files from/to an Android device
There are two main methods for newer devices:
adb push
andadb pull
: see above.- via MTP, see the corresponding page
Android Development
Android Studio
To develop apps using Android Studio
$ nix-shell -p android-studio --run android-studio
gradlew
It's possible to create a build environment (shell.nix) to use with gradlew as a FHS environment:
{ pkgs ? import <nixpkgs> {config.android_sdk.accept_license = true;} }:
(pkgs.buildFHSUserEnv {
name = "android-sdk-env";
targetPkgs = pkgs: (with pkgs;
[
androidenv.androidPkgs_9_0.androidsdk
glibc
]);
runScript = "bash";
}).env
As an alternative, it's often enough to override just the aapt2 binary for the gradle build process:
{ pkgs ? import <nixpkgs> {config.android_sdk.accept_license = true;} }:
let
androidSdk = pkgs.androidenv.androidPkgs_9_0.androidsdk;
in
pkgs.mkShell {
buildInputs = with pkgs; [
androidSdk
glibc
];
# override the aapt2 that gradle uses with the nix-shipped version
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/28.0.3/aapt2";
}
See the androidenv documentation for full examples.
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.
{ pkgs ? import <nixpkgs> {} }:
let fhs = pkgs.buildFHSUserEnv {
name = "android-env";
targetPkgs = pkgs: with pkgs;
[ git
gitRepo
gnupg
python2
curl
procps
openssl
gnumake
nettools
# For nixos < 19.03, use `androidenv.platformTools`
androidenv.androidPkgs_9_0.platform-tools
jdk
schedtool
utillinux
m4
gperf
perl
libxml2
zip
unzip
bison
flex
lzop
python3
];
multiPkgs = pkgs: with pkgs;
[ zlib
ncurses5
];
runScript = "bash";
profile = ''
export ALLOW_NINJA_ENV=true
export USE_CCACHE=1
export ANDROID_JAVA_HOME=${pkgs.jdk.home}
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
'';
};
in pkgs.stdenv.mkDerivation {
name = "android-env-shell";
nativeBuildInputs = [ fhs ];
shellHook = "exec android-env";
}
- more information on that snippet
- A shell.nix to build LineageOS
- NixDroid, building aosp roms (e.g. LineageOS) with nix. ( not very well documented and requires patches to nix )
- LineageOS build setup using terranix and hcloud, based on the shell.nix to build LineageOS. Useful if you are in a rush and don't have to much CPU power on your hand.
Using the nixpkgs androidenv
User Sander van der Burg created two awesome blog posts as well as a number of test cases usable as examples on how to use the nixpkgs androidenv and the emulator provided: