summary refs log tree commit diff
path: root/pkgs/development/mobile/androidenv
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-06-21 12:48:05 -0400
committerMatthew Bauer <mjbauer95@gmail.com>2018-06-21 15:57:56 -0400
commitb72da4bee8cbe20951e9818c335554d2abd566df (patch)
tree581ada2b7902138b46f4c30c117ecb0e5dd79c96 /pkgs/development/mobile/androidenv
parent2e8feba171b6d8bfec07df9cec5df5e3ee321ced (diff)
downloadnixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.tar
nixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.tar.gz
nixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.tar.bz2
nixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.tar.lz
nixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.tar.xz
nixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.tar.zst
nixpkgs-b72da4bee8cbe20951e9818c335554d2abd566df.zip
androidenv.buildGradleApp: refactor
Diffstat (limited to 'pkgs/development/mobile/androidenv')
-rw-r--r--pkgs/development/mobile/androidenv/androidsdk.nix2
-rw-r--r--pkgs/development/mobile/androidenv/build-gradle-app.nix105
-rw-r--r--pkgs/development/mobile/androidenv/default.nix18
3 files changed, 58 insertions, 67 deletions
diff --git a/pkgs/development/mobile/androidenv/androidsdk.nix b/pkgs/development/mobile/androidenv/androidsdk.nix
index 593b38036b7..a90c9f8476e 100644
--- a/pkgs/development/mobile/androidenv/androidsdk.nix
+++ b/pkgs/development/mobile/androidenv/androidsdk.nix
@@ -176,7 +176,7 @@ stdenv.mkDerivation rec {
     ${stdenv.lib.optionalString useInstantApps
        "ln -s ${addons.instant_apps}/whsdk instantapps"}
 
-    ln -s ${googleRepository}/m2repository
+    ln -s ${googleRepository} m2repository
 
     cd ../..
 
diff --git a/pkgs/development/mobile/androidenv/build-gradle-app.nix b/pkgs/development/mobile/androidenv/build-gradle-app.nix
index 7601fe14d0a..1ca51fae1c2 100644
--- a/pkgs/development/mobile/androidenv/build-gradle-app.nix
+++ b/pkgs/development/mobile/androidenv/build-gradle-app.nix
@@ -1,66 +1,48 @@
-{ stdenv, androidsdk, jdk, androidndk, gnumake, gawk, file, which, gradle, fetchurl, buildEnv }:
+{ stdenv, androidsdk, jdk, androidndk, gnumake, gawk, file
+, which, gradle, fetchurl, buildEnv, runCommand }:
 
-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 ? "./.", acceptAndroidSdkLicenses ? false
-}:
+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 ? "./.", acceptAndroidSdkLicenses ? false }:
 
-assert release -> keyStore != null && keyAlias != null && keyStorePassword != null && keyAliasPassword != null;
+assert release -> keyStore != null;
+assert release -> keyAlias != null;
+assert release -> keyStorePassword != null;
+assert release -> keyAliasPassword != null;
 assert acceptAndroidSdkLicenses;
 
 let
-  m2install = { repo, version, artifactId, groupId, jarSha256, pomSha256, aarSha256, suffix ? "" }:
+  inherit (stdenv.lib) optionalString;
+
+  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!";
+    in runCommand m2Name {} (''
+         mkdir -p $out/m2/${m2Path}
+       '' + optionalString (jarSha256 != null) ''
+         install -D ${fetchurl {
+                        url = "${repo}${m2Path}/${m2Name}${suffix}.jar";
+                        sha256 = jarSha256;
+                      }} $out/m2/${m2Path}/${m2Name}${suffix}.jar
+       '' + optionalString (pomSha256 != null) ''
+         install -D ${fetchurl {
+                        url = "${repo}${m2Path}/${m2Name}${suffix}.pom";
+                        sha256 = pomSha256;
+                      }} $out/m2/${m2Path}/${m2Name}${suffix}.pom
+       '' + optionalString (aarSha256 != null) ''
+         install -D ${fetchurl {
+                        url = "${repo}${m2Path}/${m2Name}${suffix}.aar";
+                        sha256 = aarSha256;
+                      }} $out/m2/${m2Path}/${m2Name}${suffix}.aar
+       '');
 
   androidsdkComposition = androidsdk {
-    inherit platformVersions useGoogleAPIs useExtraSupportLibs useGooglePlayServices;
+    inherit platformVersions useGoogleAPIs
+            useExtraSupportLibs useGooglePlayServices;
     abiVersions = [ "armeabi-v7a" ];
   };
 in
@@ -68,7 +50,7 @@ stdenv.mkDerivation ({
   name = stdenv.lib.replaceChars [" "] [""] name;
 
   ANDROID_HOME = "${androidsdkComposition}/libexec";
-  ANDROID_NDK_HOME = "${androidndk}/libexec/android-ndk-r10e";
+  ANDROID_NDK_HOME = "${androidndk}/libexec/${androidndk.name}";
 
   buildInputs = [ jdk gradle ] ++
     stdenv.lib.optional useNDK [ androidndk gnumake gawk file which ] ++
@@ -79,7 +61,7 @@ stdenv.mkDerivation ({
                           };
 
   buildPhase = ''
-    ${stdenv.lib.optionalString release ''
+    ${optionalString release ''
       # Provide key signing attributes
       ( echo "RELEASE_STORE_FILE=${keyStore}"
         echo "RELEASE_KEY_ALIAS=${keyAlias}"
@@ -91,9 +73,11 @@ stdenv.mkDerivation ({
     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.
+    # Key files cannot be stored in the user's home directory. This
+    # overrides it.
+    export ANDROID_SDK_HOME=`pwd`
 
-    mkdir "$ANDROID_HOME/licenses" || true
+    mkdir -p "$ANDROID_HOME/licenses"
     echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
     echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
 
@@ -113,9 +97,8 @@ stdenv.mkDerivation ({
   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"])
+} // builtins.removeAttrs args ["name" "mavenDeps"])
diff --git a/pkgs/development/mobile/androidenv/default.nix b/pkgs/development/mobile/androidenv/default.nix
index 21a96c88924..65ec63201c8 100644
--- a/pkgs/development/mobile/androidenv/default.nix
+++ b/pkgs/development/mobile/androidenv/default.nix
@@ -2,6 +2,8 @@
 , includeSources ? true
 }:
 
+# TODO: use callPackage instead of import to avoid so many inherits
+
 rec {
   platformTools = import ./platform-tools.nix {
     inherit buildPackages pkgs;
@@ -46,11 +48,16 @@ rec {
   };
 
   androidsdk = import ./androidsdk.nix {
-    inherit (pkgs) stdenv fetchurl unzip makeWrapper;
-    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 (pkgs) stdenv fetchurl unzip makeWrapper zlib
+                   glxinfo freetype fontconfig glib gtk2 atk
+                   libGLU_combined file alsaLib jdk coreutils
+                   libpulseaudio dbus fetchzip;
+    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 platforms sysimages
+            addons sources includeSources;
 
     stdenv_32bit = pkgs_i686.stdenv;
   };
@@ -298,7 +305,8 @@ rec {
   };
 
   buildGradleApp = import ./build-gradle-app.nix {
-    inherit (pkgs) stdenv jdk gnumake gawk file which gradle fetchurl buildEnv;
+    inherit (pkgs) stdenv jdk gnumake gawk file runCommand
+                   which gradle fetchurl buildEnv;
     inherit androidsdk androidndk;
   };
 }