nixpkgs/pkgs/development/androidenv/build-app.nix

41 lines
1.4 KiB
Nix

{ stdenv, androidsdk, jdk, ant }:
{ name, src, platformVersions ? [ "8" ], useGoogleAPIs ? false
, release ? false, keyStore ? null, keyAlias ? null, keyStorePassword ? null, keyAliasPassword ? null
}:
assert release -> keyStore != null && keyAlias != null && keyStorePassword != null && keyAliasPassword != null;
let
platformName = if (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux") then "linux"
else if stdenv.system == "x86_64-darwin" then "macosx"
else throw "Platform: ${stdenv.system} is not supported!";
androidsdkComposition = androidsdk { inherit platformVersions useGoogleAPIs; };
in
stdenv.mkDerivation {
inherit name src;
ANDROID_HOME = "${androidsdkComposition}/libexec/android-sdk-${platformName}";
buildInputs = [ jdk ant ];
buildPhase = ''
${stdenv.lib.optionalString release ''
# Provide key singing attributes
( echo "key.store=${keyStore}"
echo "key.alias=${keyAlias}"
echo "key.store.password=${keyStorePassword}"
echo "key.alias.password=${keyAliasPassword}"
) >> ant.properties
''}
export ANDROID_SDK_HOME=`pwd` # Key files cannot be stored in the user's home directory. This overrides it.
ant ${if release then "release" else "debug"}
'';
installPhase = ''
mkdir -p $out
mv bin/*-${if release then "release" else "debug"}.apk $out
'';
}