diff options
author | Matthew Justin Bauer <mjbauer95@gmail.com> | 2018-06-21 17:45:23 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-21 17:45:23 -0400 |
commit | ec2ea29716b3b00e21eb317ab5a3fe9d4ef62736 (patch) | |
tree | f529c91073bf6fa474a722a406acbc9bb37f315e /pkgs/development/mobile | |
parent | 26434c0924556f1e6ae9c9d569b9c5cb20fa8ba7 (diff) | |
parent | 2a0c328712438e1c37d76b6bf4da36045c2228e1 (diff) | |
download | nixlib-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.nix | 14 | ||||
-rw-r--r-- | pkgs/development/mobile/androidenv/build-gradle-app.nix | 104 | ||||
-rw-r--r-- | pkgs/development/mobile/androidenv/default.nix | 23 |
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; + }; } |