Android: Difference between revisions

From NixOS Wiki
imported>Nadrieril
The example shell.nix file was missing some things when I tried to build a ROM myself. I added a link to a gist with enhanced shell.nix and detailed instructions
imported>Ajs124
m add nixdroid
Line 83: Line 83:


[https://gist.github.com/Nadrieril/d006c0d9784ba7eff0b092796d78eb2a More complete example with instructions, for LineageOS]
[https://gist.github.com/Nadrieril/d006c0d9784ba7eff0b092796d78eb2a More complete example with instructions, for LineageOS]
There is also [https://github.com/ajs124/NixDroid NixDroid], to build Android completely with nix. It is however not very well documented and requires patches to nix, etc.


== Using the nixpkgs androidenv ==
== Using the nixpkgs androidenv ==

Revision as of 21:00, 10 April 2019

Connecting Android device

$ nix-shell -p androidenv.platformTools
% adb connect 192.168.1.10
% adb shell

Add these lines to your configuration.nix for enabling adb in NixOS for unprivileged users

{
  ...
  programs.adb.enable = true;
  users.users.<your-user>.extraGroups = ["adbusers"];
}

Transfering files from/to an Android device

There are two main methods for newer devices:

Building Android apps using Nix

Some software (for example Tinc VPN) have Android client which can be built together with the NixOS version, in the same derivation, sharing the same configuration options.

...

Android Studio on NixOS

$ nix-shell -p android-studio --run android-studio

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
      androidenv.platformTools
      jdk
      schedtool
      utillinux
      m4
      gperf
      perl
      libxml2
      zip
      unzip
      bison
      flex
      lzop
    ];
  multiPkgs = pkgs: with pkgs;
    [ zlib
    ];
  runScript = "bash";
  profile = ''
    export USE_CCACHE=1
    export ANDROID_JAVA_HOME=${pkgs.jdk.home}
  '';
};
in pkgs.stdenv.mkDerivation {
  name = "android-env-shell";
  nativeBuildInputs = [ fhs ];
  shellHook = "exec android-env";

}

Source

More complete example with instructions, for LineageOS

There is also NixDroid, to build Android completely with nix. It is however not very well documented and requires patches to nix, etc.

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 provideded:

  1. Building Android applications with the Nix package manager
  2. Reproducing Android app deployments (or playing Angry Birds on NixOS)
  3. A set of androidenv test cases