Add buildGradleApp to androidenv

This commit is contained in:
Ali Abrar 2017-05-16 15:27:27 -04:00 committed by Matthew Bauer
parent f431f209d7
commit 62b59e5353
4 changed files with 143 additions and 1 deletions

View file

@ -1,6 +1,7 @@
{ stdenv, stdenv_32bit, fetchurl, unzip, makeWrapper
, platformTools, buildTools, support, supportRepository, platforms, sysimages, addons, sources
, libX11, libXext, libXrender, libxcb, libXau, libXdmcp, libXtst, libGLU_combined, alsaLib
, googleRepository
, freetype, fontconfig, glib, gtk2, atk, file, jdk, coreutils, libpulseaudio, dbus
, zlib, glxinfo, xkeyboardconfig
, includeSources
@ -168,6 +169,8 @@ stdenv.mkDerivation rec {
${stdenv.lib.optionalString useInstantApps
"ln -s ${addons.instant_apps}/whsdk instantapps"}
ln -s ${googleRepository}/m2repository
cd ../..
# Symlink required sources

View file

@ -0,0 +1,112 @@
{ stdenv, androidsdk, jdk, androidndk, gnumake, gawk, file, which, gradle, fetchurl, buildEnv }:
args@{ name, src, platformVersions ? [ "8" ], useGoogleAPIs ? false, useExtraSupportLibs ? false, useGooglePlayServices ? false
, release ? false, keyStore ? null, keyAlias ? null, keyStorePassword ? null, keyAliasPassword ? null
, useNDK ? false, buildInputs ? [], mavenDeps, gradleTask, buildDirectory ? "./."
}:
assert release -> keyStore != null && keyAlias != null && keyStorePassword != null && keyAliasPassword != null;
let
m2install = { repo, version, artifactId, groupId, jarSha256, pomSha256, aarSha256, suffix ? "" }:
let m2Name = "${artifactId}-${version}";
m2Path = "${builtins.replaceStrings ["."] ["/"] groupId}/${artifactId}/${version}";
m2PomFilename = "${m2Name}${suffix}.pom";
m2JarFilename = "${m2Name}${suffix}.jar";
m2AarFilename = "${m2Name}${suffix}.aar";
m2Jar =
if jarSha256 == null
then null
else fetchurl {
sha256 = jarSha256;
url = "${repo}${m2Path}/${m2JarFilename}";
};
m2Pom =
if pomSha256 == null
then null
else fetchurl {
sha256 = pomSha256;
url = "${repo}${m2Path}/${m2PomFilename}";
};
m2Aar =
if aarSha256 == null
then null
else fetchurl {
sha256 = aarSha256;
url = "${repo}${m2Path}/${m2AarFilename}";
};
in stdenv.mkDerivation rec {
name = m2Name;
inherit m2Name m2Path m2Pom m2Jar m2Aar m2JarFilename m2PomFilename m2AarFilename;
installPhase = ''
mkdir -p $out/m2/$m2Path
${if m2Jar != null
then "cp $m2Jar $out/m2/$m2Path/$m2JarFilename"
else ""}
${if m2Pom != null
then "cp $m2Pom $out/m2/$m2Path/$m2PomFilename"
else ""}
${if m2Aar != null
then "cp $m2Aar $out/m2/$m2Path/$m2AarFilename"
else ""}
'';
phases = "installPhase";
};
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 useExtraSupportLibs useGooglePlayServices;
abiVersions = [ "armeabi-v7a" ];
};
in
stdenv.mkDerivation ({
name = stdenv.lib.replaceChars [" "] [""] name;
ANDROID_HOME = "${androidsdkComposition}/libexec";
ANDROID_NDK_HOME = "${androidndk}/libexec/android-ndk-r10e";
buildInputs = [ jdk gradle ] ++
stdenv.lib.optional useNDK [ androidndk gnumake gawk file which ] ++
buildInputs;
DEPENDENCIES = buildEnv { name = "${name}-maven-deps";
paths = map m2install mavenDeps;
};
buildPhase = ''
buildDir=`pwd`
cp -r $ANDROID_HOME $buildDir/local_sdk
chmod -R 755 local_sdk
export ANDROID_HOME=$buildDir/local_sdk
export ANDROID_SDK_HOME=`pwd` # Key files cannot be stored in the user's home directory. This overrides it.
mkdir "$ANDROID_HOME/licenses" || true
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
export APP_HOME=`pwd`
export CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
mkdir -p .m2/repository
for dep in $DEPENDENCIES ; do
cp -RL $dep/m2/* .m2/repository/ ; done
chmod -R 755 .m2
mkdir -p .m2/repository/com/android/support
cp -RL local_sdk/extras/android/m2repository/com/android/support/* .m2/repository/com/android/support/
cp -RL local_sdk/extras/google/m2repository/* .m2/repository/
gradle ${gradleTask} --offline --no-daemon -g ./tmp -Dmaven.repo.local=`pwd`/.m2/repository
'';
installPhase = ''
mkdir -p $out
mv ${buildDirectory}/build/outputs/apk/*.apk $out
mkdir -p $out/nix-support
echo "file binary-dist \"$(echo $out/*.apk)\"" > $out/nix-support/hydra-build-products
'';
} //
builtins.removeAttrs args ["name" "mavenDeps"])

View file

@ -23,6 +23,10 @@ rec {
inherit (pkgs) stdenv fetchurl unzip;
};
googleRepository = import ./google-repository.nix {
inherit (pkgs) stdenv fetchurl unzip;
};
platforms = if (pkgs.stdenv.system == "i686-linux" || pkgs.stdenv.system == "x86_64-linux")
then import ./platforms-linux.nix {
inherit (pkgs) stdenv fetchurl unzip;
@ -50,7 +54,7 @@ rec {
inherit (pkgs) zlib glxinfo freetype fontconfig glib gtk2 atk libGLU_combined file alsaLib jdk coreutils libpulseaudio dbus;
inherit (pkgs.xorg) libX11 libXext libXrender libxcb libXau libXdmcp libXtst xkeyboardconfig;
inherit platformTools buildTools support supportRepository platforms sysimages addons sources includeSources;
inherit platformTools buildTools support supportRepository googleRepository platforms sysimages addons sources includeSources;
stdenv_32bit = pkgs_i686.stdenv;
};
@ -296,4 +300,9 @@ rec {
androidndk = androidndk_10e;
targetAndroidndkPkgs = targetPackages.androidenv.androidndkPkgs_10e;
};
buildGradleApp = import ./build-gradle-app.nix {
inherit (pkgs) stdenv jdk gnumake gawk file which gradle fetchurl buildEnv;
inherit androidsdk androidndk;
};
}

View file

@ -0,0 +1,18 @@
{stdenv, fetchurl, unzip}:
stdenv.mkDerivation rec {
version = "gms_v9_rc41_wear_2_0_rc6";
name = "google-repository";
src = fetchurl {
url = "https://dl-ssl.google.com/android/repository/google_m2repository_${version}.zip";
sha256 = "0gjmmzkvjp80krbak5nkmkvvs75givqbz0cvw58f6kc7i9jm12nf";
};
buildCommand = ''
mkdir -p $out
cd $out
unzip $src
'';
buildInputs = [ unzip ];
}