Replace androidenv by new implementation
This commit is contained in:
@@ -0,0 +1,255 @@
|
||||
{stdenv, fetchurl, requireFile, makeWrapper, unzip, autoPatchelfHook, pkgs, pkgs_i686}:
|
||||
|
||||
{ toolsVersion ? "25.2.5"
|
||||
, platformToolsVersion ? "28.0.1"
|
||||
, buildToolsVersions ? [ "28.0.3" ]
|
||||
, includeEmulator ? false
|
||||
, emulatorVersion ? "28.0.14"
|
||||
, platformVersions ? []
|
||||
, includeSources ? false
|
||||
, includeDocs ? false
|
||||
, includeSystemImages ? false
|
||||
, systemImageTypes ? [ "default" ]
|
||||
, abiVersions ? [ "armeabi-v7a" ]
|
||||
, lldbVersions ? [ ]
|
||||
, cmakeVersions ? [ ]
|
||||
, includeNDK ? false
|
||||
, ndkVersion ? "18.1.5063045"
|
||||
, useGoogleAPIs ? false
|
||||
, useGoogleTVAddOns ? false
|
||||
, includeExtras ? []
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (pkgs) stdenv fetchurl makeWrapper unzip;
|
||||
|
||||
# Determine the Android os identifier from Nix's system identifier
|
||||
os = if stdenv.system == "x86_64-linux" then "linux"
|
||||
else if stdenv.system == "x86_64-darwin" then "macosx"
|
||||
else "No tarballs found for system architecture: ${stdenv.system}";
|
||||
|
||||
# Generated Nix packages
|
||||
packages = import ./generated/packages.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
# Generated system images
|
||||
system-images-packages-android = import ./generated/system-images-android.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
system-images-packages-android-tv = import ./generated/system-images-android-tv.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
system-images-packages-android-wear = import ./generated/system-images-android-wear.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
system-images-packages-android-wear-cn = import ./generated/system-images-android-wear-cn.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
system-images-packages-google_apis = import ./generated/system-images-google_apis.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
system-images-packages-google_apis_playstore = import ./generated/system-images-google_apis_playstore.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
|
||||
system-images-packages =
|
||||
stdenv.lib.recursiveUpdate
|
||||
system-images-packages-android
|
||||
(stdenv.lib.recursiveUpdate system-images-packages-android-tv
|
||||
(stdenv.lib.recursiveUpdate system-images-packages-android-wear
|
||||
(stdenv.lib.recursiveUpdate system-images-packages-android-wear-cn
|
||||
(stdenv.lib.recursiveUpdate system-images-packages-google_apis system-images-packages-google_apis_playstore))));
|
||||
|
||||
# Generated addons
|
||||
addons = import ./generated/addons.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
in
|
||||
rec {
|
||||
deployAndroidPackage = import ./deploy-androidpackage.nix {
|
||||
inherit stdenv unzip;
|
||||
};
|
||||
|
||||
platform-tools = import ./platform-tools.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook pkgs;
|
||||
inherit (stdenv) lib;
|
||||
package = packages.platform-tools."${platformToolsVersion}";
|
||||
};
|
||||
|
||||
build-tools = map (version:
|
||||
import ./build-tools.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs pkgs_i686;
|
||||
inherit (stdenv) lib;
|
||||
package = packages.build-tools."${version}";
|
||||
}
|
||||
) buildToolsVersions;
|
||||
|
||||
docs = deployAndroidPackage {
|
||||
inherit os;
|
||||
package = packages.docs."1";
|
||||
};
|
||||
|
||||
emulator = import ./emulator.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs pkgs_i686;
|
||||
inherit (stdenv) lib;
|
||||
package = packages.emulator."${emulatorVersion}"."${os}";
|
||||
};
|
||||
|
||||
platforms = map (version:
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = packages.platforms."${version}";
|
||||
}
|
||||
) platformVersions;
|
||||
|
||||
sources = stdenv.lib.optional includeSources (map (version:
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = packages.sources."${version}";
|
||||
}
|
||||
) platformVersions);
|
||||
|
||||
system-images = stdenv.lib.flatten (map (apiVersion:
|
||||
map (type:
|
||||
map (abiVersion:
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = system-images-packages.${apiVersion}.${type}.${abiVersion};
|
||||
}
|
||||
) abiVersions
|
||||
) systemImageTypes
|
||||
) platformVersions);
|
||||
|
||||
lldb = map (version:
|
||||
import ./lldb.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook pkgs;
|
||||
inherit (stdenv) lib;
|
||||
package = packages.lldb."${version}";
|
||||
}
|
||||
) lldbVersions;
|
||||
|
||||
cmake = map (version:
|
||||
import ./cmake.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook pkgs;
|
||||
inherit (stdenv) lib;
|
||||
package = packages.cmake."${version}";
|
||||
}
|
||||
) cmakeVersions;
|
||||
|
||||
ndk-bundle = import ./ndk-bundle {
|
||||
inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs platform-tools;
|
||||
inherit (stdenv) lib;
|
||||
package = packages.ndk-bundle."${ndkVersion}";
|
||||
};
|
||||
|
||||
google-apis = map (version:
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = addons.addons."${version}".google_apis;
|
||||
}
|
||||
) (builtins.filter (platformVersion: platformVersion < "26") platformVersions); # API level 26 and higher include Google APIs by default
|
||||
|
||||
google-tv-addons = map (version:
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = addons.addons."${version}".google_tv_addon;
|
||||
}
|
||||
) platformVersions;
|
||||
|
||||
# Function that automatically links all plugins for which multiple versions can coexist
|
||||
linkPlugins = {name, plugins}:
|
||||
stdenv.lib.optionalString (plugins != []) ''
|
||||
mkdir -p ${name}
|
||||
${stdenv.lib.concatMapStrings (plugin: ''
|
||||
ln -s ${plugin}/libexec/android-sdk/${name}/* ${name}
|
||||
'') plugins}
|
||||
'';
|
||||
|
||||
# Function that automatically links a plugin for which only one version exists
|
||||
linkPlugin = {name, plugin, check ? true}:
|
||||
stdenv.lib.optionalString check ''
|
||||
ln -s ${plugin}/libexec/android-sdk/* ${name}
|
||||
'';
|
||||
|
||||
# Links all plugins related to a requested platform
|
||||
linkPlatformPlugins = {name, plugins, check}:
|
||||
stdenv.lib.optionalString check ''
|
||||
mkdir -p ${name}
|
||||
${stdenv.lib.concatMapStrings (plugin: ''
|
||||
ln -s ${plugin}/libexec/android-sdk/${name}/* ${name}
|
||||
'') plugins}
|
||||
''; # */
|
||||
|
||||
# This derivation deploys the tools package and symlinks all the desired
|
||||
# plugins that we want to use.
|
||||
|
||||
androidsdk = import ./tools.nix {
|
||||
inherit deployAndroidPackage requireFile packages toolsVersion autoPatchelfHook makeWrapper os pkgs pkgs_i686;
|
||||
inherit (stdenv) lib;
|
||||
|
||||
postInstall = ''
|
||||
# Symlink all requested plugins
|
||||
|
||||
${linkPlugin { name = "platform-tools"; plugin = platform-tools; }}
|
||||
${linkPlugins { name = "build-tools"; plugins = build-tools; }}
|
||||
${linkPlugin { name = "emulator"; plugin = emulator; check = includeEmulator; }}
|
||||
${linkPlugin { name = "docs"; plugin = docs; check = includeDocs; }}
|
||||
${linkPlugins { name = "platforms"; plugins = platforms; }}
|
||||
${linkPlatformPlugins { name = "sources"; plugins = sources; check = includeSources; }}
|
||||
${linkPlugins { name = "lldb"; plugins = lldb; }}
|
||||
${linkPlugins { name = "cmake"; plugins = cmake; }}
|
||||
${linkPlugin { name = "ndk-bundle"; plugin = ndk-bundle; check = includeNDK; }}
|
||||
|
||||
${stdenv.lib.optionalString includeSystemImages ''
|
||||
mkdir -p system-images
|
||||
${stdenv.lib.concatMapStrings (system-image: ''
|
||||
apiVersion=$(basename $(echo ${system-image}/libexec/android-sdk/system-images/*))
|
||||
type=$(basename $(echo ${system-image}/libexec/android-sdk/system-images/*/*))
|
||||
mkdir -p system-images/$apiVersion/$type
|
||||
ln -s ${system-image}/libexec/android-sdk/system-images/$apiVersion/$type/* system-images/$apiVersion/$type
|
||||
'') system-images}
|
||||
''}
|
||||
|
||||
${linkPlatformPlugins { name = "add-ons"; plugins = google-apis; check = useGoogleAPIs; }}
|
||||
${linkPlatformPlugins { name = "add-ons"; plugins = google-apis; check = useGoogleTVAddOns; }}
|
||||
|
||||
# Link extras
|
||||
${stdenv.lib.concatMapStrings (identifier:
|
||||
let
|
||||
path = addons.extras."${identifier}".path;
|
||||
addon = deployAndroidPackage {
|
||||
inherit os;
|
||||
package = addons.extras."${identifier}";
|
||||
};
|
||||
in
|
||||
''
|
||||
targetDir=$(dirname ${path})
|
||||
mkdir -p $targetDir
|
||||
ln -s ${addon}/libexec/android-sdk/${path} $targetDir
|
||||
'') includeExtras}
|
||||
|
||||
# Expose common executables in bin/
|
||||
mkdir -p $out/bin
|
||||
find $PWD/tools -not -path '*/\.*' -type f -executable -mindepth 1 -maxdepth 1 | while read i
|
||||
do
|
||||
ln -s $i $out/bin
|
||||
done
|
||||
|
||||
find $PWD/tools/bin -not -path '*/\.*' -type f -executable -mindepth 1 -maxdepth 1 | while read i
|
||||
do
|
||||
ln -s $i $out/bin
|
||||
done
|
||||
|
||||
for i in ${platform-tools}/bin/*
|
||||
do
|
||||
ln -s $i $out/bin
|
||||
done
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user