summary refs log tree commit diff
path: root/pkgs/development/mobile/androidenv
diff options
context:
space:
mode:
authorAli Abrar <aliabrar@gmail.com>2017-05-16 15:27:27 -0400
committerMatthew Bauer <mjbauer95@gmail.com>2018-06-11 13:25:27 -0400
commit62b59e5353c8ef514ca948032bee89eec6e9f875 (patch)
treee25b54fe66fe21e59f12f58f5954c7148618425f /pkgs/development/mobile/androidenv
parentf431f209d7b207a6c0c487fbd6e1a30d52fe769b (diff)
downloadnixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.tar
nixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.tar.gz
nixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.tar.bz2
nixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.tar.lz
nixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.tar.xz
nixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.tar.zst
nixpkgs-62b59e5353c8ef514ca948032bee89eec6e9f875.zip
Add buildGradleApp to androidenv
Diffstat (limited to 'pkgs/development/mobile/androidenv')
-rw-r--r--pkgs/development/mobile/androidenv/androidsdk.nix3
-rw-r--r--pkgs/development/mobile/androidenv/build-gradle-app.nix112
-rw-r--r--pkgs/development/mobile/androidenv/default.nix11
-rw-r--r--pkgs/development/mobile/androidenv/google-repository.nix18
4 files changed, 143 insertions, 1 deletions
diff --git a/pkgs/development/mobile/androidenv/androidsdk.nix b/pkgs/development/mobile/androidenv/androidsdk.nix
index 699af16cf04..36ac0b06785 100644
--- a/pkgs/development/mobile/androidenv/androidsdk.nix
+++ b/pkgs/development/mobile/androidenv/androidsdk.nix
@@ -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
diff --git a/pkgs/development/mobile/androidenv/build-gradle-app.nix b/pkgs/development/mobile/androidenv/build-gradle-app.nix
new file mode 100644
index 00000000000..d1d7abdc963
--- /dev/null
+++ b/pkgs/development/mobile/androidenv/build-gradle-app.nix
@@ -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"])
diff --git a/pkgs/development/mobile/androidenv/default.nix b/pkgs/development/mobile/androidenv/default.nix
index 5846e4fb6de..cb93717861c 100644
--- a/pkgs/development/mobile/androidenv/default.nix
+++ b/pkgs/development/mobile/androidenv/default.nix
@@ -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;
+  };
 }
diff --git a/pkgs/development/mobile/androidenv/google-repository.nix b/pkgs/development/mobile/androidenv/google-repository.nix
new file mode 100644
index 00000000000..abc1b46c743
--- /dev/null
+++ b/pkgs/development/mobile/androidenv/google-repository.nix
@@ -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 ];
+}