summary refs log tree commit diff
path: root/pkgs/development/mobile
diff options
context:
space:
mode:
authorMatthew Justin Bauer <mjbauer95@gmail.com>2018-06-21 17:45:23 -0400
committerGitHub <noreply@github.com>2018-06-21 17:45:23 -0400
commitec2ea29716b3b00e21eb317ab5a3fe9d4ef62736 (patch)
treef529c91073bf6fa474a722a406acbc9bb37f315e /pkgs/development/mobile
parent26434c0924556f1e6ae9c9d569b9c5cb20fa8ba7 (diff)
parent2a0c328712438e1c37d76b6bf4da36045c2228e1 (diff)
downloadnixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.tar
nixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.tar.gz
nixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.tar.bz2
nixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.tar.lz
nixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.tar.xz
nixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.tar.zst
nixlib-ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736.zip
Merge pull request #41855 from obsidiansystems/gradle-app
init androidenv.buildGradleApp
Diffstat (limited to 'pkgs/development/mobile')
-rw-r--r--pkgs/development/mobile/androidenv/androidsdk.nix14
-rw-r--r--pkgs/development/mobile/androidenv/build-gradle-app.nix104
-rw-r--r--pkgs/development/mobile/androidenv/default.nix23
3 files changed, 135 insertions, 6 deletions
diff --git a/pkgs/development/mobile/androidenv/androidsdk.nix b/pkgs/development/mobile/androidenv/androidsdk.nix
index 699af16cf041..a90c9f8476e3 100644
--- a/pkgs/development/mobile/androidenv/androidsdk.nix
+++ b/pkgs/development/mobile/androidenv/androidsdk.nix
@@ -1,4 +1,4 @@
-{ stdenv, stdenv_32bit, fetchurl, unzip, makeWrapper
+{ stdenv, stdenv_32bit, fetchurl, fetchzip, unzip, makeWrapper
 , platformTools, buildTools, support, supportRepository, platforms, sysimages, addons, sources
 , libX11, libXext, libXrender, libxcb, libXau, libXdmcp, libXtst, libGLU_combined, alsaLib
 , freetype, fontconfig, glib, gtk2, atk, file, jdk, coreutils, libpulseaudio, dbus
@@ -8,7 +8,15 @@
 { platformVersions, abiVersions, useGoogleAPIs, useExtraSupportLibs ? false
 , useGooglePlayServices ? false, useInstantApps ? false }:
 
-let inherit (stdenv.lib) makeLibraryPath; in
+let inherit (stdenv.lib) makeLibraryPath;
+
+    googleRepository = let version = "gms_v9_rc41_wear_2_0_rc6";
+      in fetchzip rec {
+        url = "https://dl-ssl.google.com/android/repository/google_m2repository_${version}.zip";
+        sha256 = "0k99xmynv0k62d301zx5jnjkddflr51i5lb02l9incg7m5cn8kzx";
+      };
+
+in
 
 stdenv.mkDerivation rec {
   name = "android-sdk-${version}";
@@ -168,6 +176,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 000000000000..1ca51fae1c29
--- /dev/null
+++ b/pkgs/development/mobile/androidenv/build-gradle-app.nix
@@ -0,0 +1,104 @@
+{ 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 }:
+
+assert release -> keyStore != null;
+assert release -> keyAlias != null;
+assert release -> keyStorePassword != null;
+assert release -> keyAliasPassword != null;
+assert acceptAndroidSdkLicenses;
+
+let
+  inherit (stdenv.lib) optionalString;
+
+  m2install = { repo, version, artifactId, groupId
+              , jarSha256, pomSha256, aarSha256, suffix ? "" }:
+    let m2Name = "${artifactId}-${version}";
+        m2Path = "${builtins.replaceStrings ["."] ["/"] groupId}/${artifactId}/${version}";
+    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;
+    abiVersions = [ "armeabi-v7a" ];
+  };
+in
+stdenv.mkDerivation ({
+  name = stdenv.lib.replaceChars [" "] [""] name;
+
+  ANDROID_HOME = "${androidsdkComposition}/libexec";
+  ANDROID_NDK_HOME = "${androidndk}/libexec/${androidndk.name}";
+
+  buildInputs = [ jdk gradle ] ++
+    stdenv.lib.optional useNDK [ androidndk gnumake gawk file which ] ++
+      buildInputs;
+
+  DEPENDENCIES = buildEnv { name = "${name}-maven-deps";
+                            paths = map m2install mavenDeps;
+                          };
+
+  buildPhase = ''
+    ${optionalString release ''
+      # Provide key signing attributes
+      ( echo "RELEASE_STORE_FILE=${keyStore}"
+        echo "RELEASE_KEY_ALIAS=${keyAlias}"
+        echo "RELEASE_STORE_PASSWORD=${keyStorePassword}"
+        echo "RELEASE_KEY_PASSWORD=${keyAliasPassword}"
+      ) >> gradle.properties
+    ''}
+    buildDir=`pwd`
+    cp -r $ANDROID_HOME $buildDir/local_sdk
+    chmod -R 755 local_sdk
+    export ANDROID_HOME=$buildDir/local_sdk
+    # Key files cannot be stored in the user's home directory. This
+    # overrides it.
+    export ANDROID_SDK_HOME=`pwd`
+
+    mkdir -p "$ANDROID_HOME/licenses"
+    echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
+    echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
+
+    export APP_HOME=`pwd`
+
+    mkdir -p .m2/repository
+    if [ -d "$DEPENDENCIES/m2" ] ; then
+      cp -RL "$DEPENDENCIES"/m2/* .m2/repository/
+    fi
+    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 5846e4fb6de0..d6d6b8a0cadc 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;
   };
@@ -215,6 +222,8 @@ rec {
     useInstantApps = true;
   };
 
+  androidsdk_latest = androidsdk_8_0;
+
   androidndk_10e = import ./androidndk.nix {
     inherit (buildPackages)
       p7zip makeWrapper;
@@ -296,4 +305,10 @@ rec {
     androidndk = androidndk_10e;
     targetAndroidndkPkgs = targetPackages.androidenv.androidndkPkgs_10e;
   };
+
+  buildGradleApp = import ./build-gradle-app.nix {
+    inherit (pkgs) stdenv jdk gnumake gawk file runCommand
+                   which gradle fetchurl buildEnv;
+    inherit androidsdk androidndk;
+  };
 }