Rework androidenv package generation
androidenv did not previously write license files, which caused certain gradle-based Android tools to fail. Restructure androidenv's list of Android packages into a single repo.json file to prevent duplication and enable us to extract the EULA texts, which we then hash with builtins.hashString to produce the license files that Android gradle tools look for. Remove includeDocs and lldbVersions, as these have been removed from the Android package repositories. Improve documentation and examples.
This commit is contained in:
2
pkgs/development/mobile/androidenv/.gitignore
vendored
Normal file
2
pkgs/development/mobile/androidenv/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/xml
|
||||
local.properties
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
deployAndroidPackage {
|
||||
inherit package os;
|
||||
buildInputs = [ autoPatchelfHook ]
|
||||
++ lib.optional (os == "linux") [ pkgs.stdenv.glibc pkgs.stdenv.cc.cc ];
|
||||
nativeBuildInputs = [ autoPatchelfHook ];
|
||||
buildInputs = lib.optional (os == "linux") [ pkgs.stdenv.glibc pkgs.stdenv.cc.cc pkgs.ncurses5 ];
|
||||
patchInstructions = lib.optionalString (os == "linux") ''
|
||||
autoPatchelf $packageBaseDir/bin
|
||||
'';
|
||||
|
||||
@@ -1,23 +1,26 @@
|
||||
{requireFile, autoPatchelfHook, pkgs, pkgsHostHost, pkgs_i686, licenseAccepted ? false}:
|
||||
{ requireFile, autoPatchelfHook, pkgs, pkgsHostHost, pkgs_i686
|
||||
, licenseAccepted ? false
|
||||
}:
|
||||
|
||||
{ toolsVersion ? "25.2.5"
|
||||
, platformToolsVersion ? "29.0.6"
|
||||
, buildToolsVersions ? [ "28.0.3" ]
|
||||
{ toolsVersion ? "26.1.1"
|
||||
, platformToolsVersion ? "30.0.5"
|
||||
, buildToolsVersions ? [ "30.0.3" ]
|
||||
, includeEmulator ? false
|
||||
, emulatorVersion ? "30.0.3"
|
||||
, emulatorVersion ? "30.3.4"
|
||||
, platformVersions ? []
|
||||
, includeSources ? false
|
||||
, includeDocs ? false
|
||||
, includeSystemImages ? false
|
||||
, systemImageTypes ? [ "default" ]
|
||||
, systemImageTypes ? [ "google_apis_playstore" ]
|
||||
, abiVersions ? [ "armeabi-v7a" ]
|
||||
, lldbVersions ? [ ]
|
||||
, cmakeVersions ? [ ]
|
||||
, includeNDK ? false
|
||||
, ndkVersion ? "21.0.6113669"
|
||||
, ndkVersion ? "22.0.7026061"
|
||||
, useGoogleAPIs ? false
|
||||
, useGoogleTVAddOns ? false
|
||||
, includeExtras ? []
|
||||
, repoJson ? ./repo.json
|
||||
, repoXmls ? null
|
||||
, extraLicenses ? []
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -28,48 +31,86 @@ let
|
||||
else if stdenv.system == "x86_64-darwin" then "macosx"
|
||||
else throw "No Android SDK tarballs are available for system architecture: ${stdenv.system}";
|
||||
|
||||
# Generated Nix packages
|
||||
packages = import ./generated/packages.nix {
|
||||
inherit fetchurl;
|
||||
# Uses mkrepo.rb to create a repo spec.
|
||||
mkRepoJson = { packages ? [], images ? [], addons ? [] }: let
|
||||
mkRepoRuby = (pkgs.ruby.withPackages (pkgs: with pkgs; [ slop nokogiri ]));
|
||||
mkRepoRubyArguments = lib.lists.flatten [
|
||||
(builtins.map (package: ["--packages" "${package}"]) packages)
|
||||
(builtins.map (image: ["--images" "${image}"]) images)
|
||||
(builtins.map (addon: ["--addons" "${addon}"]) addons)
|
||||
];
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "androidenv-repo-json";
|
||||
buildInputs = [ mkRepoRuby ];
|
||||
preferLocalBuild = true;
|
||||
unpackPhase = "true";
|
||||
buildPhase = ''
|
||||
ruby ${./mkrepo.rb} ${lib.escapeShellArgs mkRepoRubyArguments} > repo.json
|
||||
'';
|
||||
installPhase = ''
|
||||
mv repo.json $out
|
||||
'';
|
||||
};
|
||||
|
||||
# Generated system images
|
||||
system-images-packages-android = import ./generated/system-images-android.nix {
|
||||
inherit fetchurl;
|
||||
# Reads the repo JSON. If repoXmls is provided, will build a repo JSON into the Nix store.
|
||||
repo = if repoXmls != null then
|
||||
let
|
||||
repoXmlSpec = {
|
||||
packages = repoXmls.packages or [];
|
||||
images = repoXmls.images or [];
|
||||
addons = repoXmls.addons or [];
|
||||
};
|
||||
in
|
||||
builtins.fromJSON (builtins.readFile "${mkRepoJson repoXmlSpec}")
|
||||
else
|
||||
builtins.fromJSON (builtins.readFile repoJson);
|
||||
|
||||
# Converts all 'archives' keys in a repo spec to fetchurl calls.
|
||||
fetchArchives = attrSet:
|
||||
lib.attrsets.mapAttrsRecursive
|
||||
(path: value:
|
||||
if (builtins.elemAt path ((builtins.length path) - 1)) == "archives" then
|
||||
(builtins.listToAttrs
|
||||
(builtins.map
|
||||
(archive: lib.attrsets.nameValuePair archive.os (fetchurl { inherit (archive) url sha1; })) value))
|
||||
else value
|
||||
)
|
||||
attrSet;
|
||||
|
||||
# Converts the repo attrset into fetch calls
|
||||
packages = fetchArchives repo.packages;
|
||||
system-images-packages = fetchArchives repo.images;
|
||||
addons = {
|
||||
addons = fetchArchives repo.addons;
|
||||
extras = fetchArchives repo.extras;
|
||||
};
|
||||
|
||||
system-images-packages-android-tv = import ./generated/system-images-android-tv.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
# Converts a license name to a list of license texts.
|
||||
mkLicenses = licenseName: repo.licenses.${licenseName};
|
||||
|
||||
system-images-packages-android-wear = import ./generated/system-images-android-wear.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
# Converts a list of license names to a flattened list of license texts.
|
||||
# Just used for displaying licenses.
|
||||
mkLicenseTexts = licenseNames:
|
||||
lib.lists.flatten
|
||||
(builtins.map
|
||||
(licenseName:
|
||||
builtins.map
|
||||
(licenseText: "--- ${licenseName} ---\n${licenseText}")
|
||||
(mkLicenses licenseName))
|
||||
licenseNames);
|
||||
|
||||
system-images-packages-android-wear-cn = import ./generated/system-images-android-wear-cn.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
# Converts a license name to a list of license hashes.
|
||||
mkLicenseHashes = licenseName:
|
||||
builtins.map
|
||||
(licenseText: builtins.hashString "sha1" licenseText)
|
||||
(mkLicenses licenseName);
|
||||
|
||||
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 =
|
||||
lib.recursiveUpdate
|
||||
system-images-packages-android
|
||||
(lib.recursiveUpdate system-images-packages-android-tv
|
||||
(lib.recursiveUpdate system-images-packages-android-wear
|
||||
(lib.recursiveUpdate system-images-packages-android-wear-cn
|
||||
(lib.recursiveUpdate system-images-packages-google_apis system-images-packages-google_apis_playstore))));
|
||||
|
||||
# Generated addons
|
||||
addons = import ./generated/addons.nix {
|
||||
inherit fetchurl;
|
||||
};
|
||||
# The list of all license names we're accepting. Put android-sdk-license there
|
||||
# by default.
|
||||
licenseNames = lib.lists.unique ([
|
||||
"android-sdk-license"
|
||||
] ++ extraLicenses);
|
||||
in
|
||||
rec {
|
||||
deployAndroidPackage = import ./deploy-androidpackage.nix {
|
||||
@@ -88,14 +129,9 @@ rec {
|
||||
}
|
||||
) buildToolsVersions;
|
||||
|
||||
docs = deployAndroidPackage {
|
||||
inherit os;
|
||||
package = packages.docs."1";
|
||||
};
|
||||
|
||||
emulator = import ./emulator.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs pkgs_i686 lib;
|
||||
package = packages.emulator.${emulatorVersion}.${os};
|
||||
package = packages.emulator.${emulatorVersion};
|
||||
};
|
||||
|
||||
platforms = map (version:
|
||||
@@ -115,27 +151,22 @@ rec {
|
||||
system-images = lib.flatten (map (apiVersion:
|
||||
map (type:
|
||||
map (abiVersion:
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = system-images-packages.${apiVersion}.${type}.${abiVersion};
|
||||
# Patch 'google_apis' system images so they're recognized by the sdk.
|
||||
# Without this, `android list targets` shows 'Tag/ABIs : no ABIs' instead
|
||||
# of 'Tag/ABIs : google_apis*/*' and the emulator fails with an ABI-related error.
|
||||
patchInstructions = lib.optionalString (lib.hasPrefix "google_apis" type) ''
|
||||
sed -i '/^Addon.Vendor/d' source.properties
|
||||
'';
|
||||
}
|
||||
if lib.hasAttrByPath [apiVersion type abiVersion] system-images-packages then
|
||||
deployAndroidPackage {
|
||||
inherit os;
|
||||
package = system-images-packages.${apiVersion}.${type}.${abiVersion};
|
||||
# Patch 'google_apis' system images so they're recognized by the sdk.
|
||||
# Without this, `android list targets` shows 'Tag/ABIs : no ABIs' instead
|
||||
# of 'Tag/ABIs : google_apis*/*' and the emulator fails with an ABI-related error.
|
||||
patchInstructions = lib.optionalString (lib.hasPrefix "google_apis" type) ''
|
||||
sed -i '/^Addon.Vendor/d' source.properties
|
||||
'';
|
||||
}
|
||||
else []
|
||||
) abiVersions
|
||||
) systemImageTypes
|
||||
) platformVersions);
|
||||
|
||||
lldb = map (version:
|
||||
import ./lldb.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook pkgs lib;
|
||||
package = packages.lldb.${version};
|
||||
}
|
||||
) lldbVersions;
|
||||
|
||||
cmake = map (version:
|
||||
import ./cmake.nix {
|
||||
inherit deployAndroidPackage os autoPatchelfHook pkgs lib;
|
||||
@@ -187,12 +218,15 @@ rec {
|
||||
''; # */
|
||||
|
||||
# This derivation deploys the tools package and symlinks all the desired
|
||||
# plugins that we want to use.
|
||||
|
||||
# plugins that we want to use. If the license isn't accepted, prints all the licenses
|
||||
# requested and throws.
|
||||
androidsdk = if !licenseAccepted then throw ''
|
||||
You must accept the Android Software Development Kit License Agreement at
|
||||
https://developer.android.com/studio/terms
|
||||
by setting nixpkgs config option 'android_sdk.accept_license = true;'
|
||||
${builtins.concatStringsSep "\n\n" (mkLicenseTexts licenseNames)}
|
||||
|
||||
You must accept the following licenses:
|
||||
${lib.concatMapStringsSep "\n" (str: " - ${str}") licenseNames}
|
||||
|
||||
by setting nixpkgs config option 'android_sdk.accept_license = true;'.
|
||||
'' else import ./tools.nix {
|
||||
inherit deployAndroidPackage requireFile packages toolsVersion autoPatchelfHook makeWrapper os pkgs pkgs_i686 lib;
|
||||
|
||||
@@ -202,10 +236,8 @@ rec {
|
||||
${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; }}
|
||||
|
||||
@@ -253,6 +285,17 @@ rec {
|
||||
do
|
||||
ln -s $i $out/bin
|
||||
done
|
||||
|
||||
# Write licenses
|
||||
mkdir -p licenses
|
||||
${lib.concatMapStrings (licenseName:
|
||||
let
|
||||
licenseHashes = builtins.concatStringsSep "\n" (mkLicenseHashes licenseName);
|
||||
licenseHashFile = pkgs.writeText "androidenv-${licenseName}" licenseHashes;
|
||||
in
|
||||
''
|
||||
ln -s ${licenseHashFile} licenses/${licenseName}
|
||||
'') licenseNames}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:addon="http://schemas.android.com/sdk/android/repo/addon2/01"
|
||||
xmlns:sdk="http://schemas.android.com/repository/android/common/01"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
|
||||
<xsl:output omit-xml-declaration="yes" indent="no" />
|
||||
|
||||
<!-- Template that puts a google HTTP prefix in front of relative URLs -->
|
||||
<xsl:template name="repository-url">
|
||||
<xsl:variable name="raw-url" select="complete/url"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with($raw-url, 'http')">
|
||||
<xsl:value-of select="$raw-url"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>https://dl.google.com/android/repository/</xsl:text>
|
||||
<xsl:value-of select="$raw-url"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/addon:sdk-addon">
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
addons = {
|
||||
<!-- Convert all addons, but skip the entry for google APIs version 25 because it is inconsistent with the spec -->
|
||||
<xsl:for-each select="remotePackage[type-details/@xsi:type='addon:addonDetailsType' and archives/archive/complete/url != 'google_apis-25_r1.zip' ]"><xsl:sort select="@path" />
|
||||
"<xsl:value-of select="type-details/api-level" />"."<xsl:value-of select="type-details/tag/id" />" = {
|
||||
name = "<xsl:value-of select="type-details/tag/id" />";
|
||||
path = "<xsl:value-of select="translate(@path, ';', '/')" />";
|
||||
revision = "<xsl:value-of select="type-details/api-level" />";
|
||||
displayName = "<xsl:value-of select="display-name" />";
|
||||
archives = {
|
||||
<xsl:for-each select="archives/archive[not(host-os)]">
|
||||
all = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="archives/archive[host-os and not(host-os = 'windows')]">
|
||||
<xsl:value-of select="host-os" /> = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
};
|
||||
};
|
||||
</xsl:for-each>
|
||||
|
||||
<!-- Workaround to make google APIs version 25 work. Hopefully, we can get rid of this at some point -->
|
||||
<xsl:for-each select="remotePackage[type-details/@xsi:type='addon:addonDetailsType' and archives/archive/complete/url = 'google_apis-25_r1.zip' ]">
|
||||
"<xsl:value-of select="25" />"."<xsl:value-of select="type-details/tag/id" />" = {
|
||||
name = "<xsl:value-of select="type-details/tag/id" />";
|
||||
path = "add-ons/addon-google_apis-google-25";
|
||||
revision = "<xsl:value-of select="25" />";
|
||||
displayName = "<xsl:value-of select="display-name" />";
|
||||
archives = {
|
||||
<xsl:for-each select="archives/archive[not(host-os)]">
|
||||
all = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="archives/archive[host-os and not(host-os = 'windows')]">
|
||||
<xsl:value-of select="host-os" /> = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
};
|
||||
};
|
||||
</xsl:for-each>
|
||||
};
|
||||
|
||||
extras = {
|
||||
<!-- Convert all extras and maven artefacts -->
|
||||
<xsl:for-each select="remotePackage[type-details/@xsi:type='addon:extraDetailsType' or type-details/@xsi:type='addon:mavenType']"><xsl:sort select="@path" />
|
||||
|
||||
<!-- Compose revision string from revision attributes -->
|
||||
<xsl:variable name="revision">
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/major">
|
||||
<xsl:value-of select="revision/major" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/minor">.<xsl:value-of select="revision/minor" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/micro">.<xsl:value-of select="revision/micro" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/preview">-rc<xsl:value-of select="revision/preview" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
"<xsl:value-of select="@path" />" = {
|
||||
name = "<xsl:value-of select="translate(@path, ';', '-')" />";
|
||||
path = "<xsl:value-of select="translate(@path, ';', '/')" />";
|
||||
revision = "<xsl:value-of select="$revision" />";
|
||||
displayName = "<xsl:value-of select="display-name" />";
|
||||
archives = {
|
||||
<xsl:for-each select="archives/archive[not(host-os)]">
|
||||
all = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="archives/archive[host-os and not(host-os = 'windows')]">
|
||||
<xsl:value-of select="host-os" /> = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
};
|
||||
};
|
||||
</xsl:for-each>
|
||||
};
|
||||
}
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
@@ -1,116 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:common="http://schemas.android.com/repository/android/common/01"
|
||||
xmlns:generic="http://schemas.android.com/repository/android/generic/01"
|
||||
xmlns:sdk="http://schemas.android.com/sdk/android/repo/repository2/01"
|
||||
xmlns:sdk-common="http://schemas.android.com/sdk/android/repo/common/01"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
|
||||
<xsl:output omit-xml-declaration="yes" indent="no" />
|
||||
|
||||
<!-- Template that puts a google HTTP prefix in front of relative URLs -->
|
||||
<xsl:template name="repository-url">
|
||||
<xsl:variable name="raw-url" select="complete/url"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with($raw-url, 'http')">
|
||||
<xsl:value-of select="$raw-url"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>https://dl.google.com/android/repository/</xsl:text>
|
||||
<xsl:value-of select="$raw-url"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/sdk:sdk-repository">
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
<!-- Convert all remote packages -->
|
||||
<xsl:for-each select="remotePackage[not(contains(@path, ';') and substring-after(@path, ';') = 'latest')]"><xsl:sort select="@path" />
|
||||
|
||||
<!-- Extract the package name from the path -->
|
||||
<xsl:variable name="name">
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains(@path, ';')">
|
||||
<xsl:value-of select="substring-before(@path, ';')" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@path" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- Compose version string from version attributes -->
|
||||
<xsl:variable name="revision">
|
||||
<xsl:choose>
|
||||
<!-- Compose revision for a generic package from the revision attributes -->
|
||||
<xsl:when test="type-details/@xsi:type='generic:genericDetailsType'">
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/major">
|
||||
<xsl:value-of select="revision/major" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/minor">.<xsl:value-of select="revision/minor" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/micro">.<xsl:value-of select="revision/micro" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="revision/preview">-rc<xsl:value-of select="revision/preview" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
<!-- Compose revision of a platform SDK from the API-level or codename if the latter exists -->
|
||||
<xsl:when test="type-details/@xsi:type='sdk:platformDetailsType'">
|
||||
<xsl:choose>
|
||||
<xsl:when test="not(type-details/codename='')">
|
||||
<xsl:value-of select="type-details/codename" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="type-details/api-level" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
<!-- Compose revision of a source SDK from the API-level -->
|
||||
<xsl:when test="type-details/@xsi:type='sdk:sourceDetailsType'">
|
||||
<xsl:value-of select="type-details/api-level" />
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="@path='emulator'"> <!-- An emulator package provides one archive per operating system but the same versions -->
|
||||
"<xsl:value-of select="$name" />"."<xsl:value-of select="$revision" />".<xsl:value-of select="archives/archive/host-os" /> = {
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
"<xsl:value-of select="$name" />"."<xsl:value-of select="$revision" />" = {
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
name = "<xsl:value-of select="$name" />";
|
||||
path = "<xsl:value-of select="translate(@path, ';', '/')" />";
|
||||
revision = "<xsl:value-of select="$revision" />";
|
||||
displayName = "<xsl:value-of select="display-name" />";
|
||||
archives = {
|
||||
<xsl:for-each select="archives/archive[not(host-os)]">
|
||||
all = fetchurl {
|
||||
url = !<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="archives/archive[host-os and not(host-os = 'windows')]">
|
||||
<xsl:value-of select="host-os" /> = fetchurl {
|
||||
url = "<xsl:call-template name="repository-url"/>";
|
||||
sha1 = "<xsl:value-of select="complete/checksum" />";
|
||||
};
|
||||
</xsl:for-each>
|
||||
};
|
||||
};
|
||||
</xsl:for-each>
|
||||
}
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
@@ -1,76 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:sys-img="http://schemas.android.com/sdk/android/repo/sys-img2/01"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
|
||||
<xsl:param name="imageType" />
|
||||
|
||||
<xsl:output method="text" omit-xml-declaration="yes" indent="no" />
|
||||
|
||||
<xsl:template name="repository-url">
|
||||
<xsl:variable name="raw-url" select="complete/url"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with($raw-url, 'http')">
|
||||
<xsl:value-of select="$raw-url"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>https://dl.google.com/android/repository/sys-img/</xsl:text><xsl:value-of select="$imageType" /><xsl:text>/</xsl:text><xsl:value-of select="$raw-url"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template mode="revision" match="type-details[codename]">
|
||||
<xsl:value-of select="codename" />-<xsl:value-of select="tag/id" />-<xsl:value-of select="abi" />
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template mode="revision" match="type-details[not(codename)]">
|
||||
<xsl:value-of select="api-level" />-<xsl:value-of select="tag/id" />-<xsl:value-of select="abi" />
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template mode="attrkey" match="type-details[codename]">
|
||||
<xsl:text>"</xsl:text>
|
||||
<xsl:value-of select="codename" />
|
||||
<xsl:text>".</xsl:text>
|
||||
<xsl:value-of select="tag/id" />
|
||||
<xsl:text>."</xsl:text>
|
||||
<xsl:value-of select="abi" />
|
||||
<xsl:text>"</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template mode="attrkey" match="type-details[not(codename)]">
|
||||
<xsl:text>"</xsl:text>
|
||||
<xsl:value-of select="api-level" />
|
||||
<xsl:text>".</xsl:text>
|
||||
<xsl:value-of select="tag/id" />
|
||||
<xsl:text>."</xsl:text>
|
||||
<xsl:value-of select="abi" />
|
||||
<xsl:text>"</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/sys-img:sdk-sys-img">
|
||||
<xsl:text>{fetchurl}:
|
||||
|
||||
{
|
||||
</xsl:text><xsl:for-each select="remotePackage[starts-with(@path, 'system-images;')]">
|
||||
<xsl:variable name="revision"><xsl:apply-templates mode="revision" select="type-details" /></xsl:variable>
|
||||
|
||||
<xsl:variable name="attrkey"><xsl:apply-templates mode="attrkey" select="type-details" /></xsl:variable>
|
||||
|
||||
<xsl:text> </xsl:text><xsl:value-of select="$attrkey" /><xsl:text> = {
|
||||
name = "system-image-</xsl:text><xsl:value-of select="$revision" /><xsl:text>";
|
||||
path = "</xsl:text><xsl:value-of select="translate(@path, ';', '/')" /><xsl:text>";
|
||||
revision = "</xsl:text><xsl:value-of select="$revision" /><xsl:text>";
|
||||
displayName = "</xsl:text><xsl:value-of select="display-name" /><xsl:text>";
|
||||
archives.all = fetchurl {</xsl:text>
|
||||
<xsl:for-each select="archives/archive"><xsl:text>
|
||||
url = "</xsl:text><xsl:call-template name="repository-url"/><xsl:text>";
|
||||
sha1 = "</xsl:text><xsl:value-of select="complete/checksum" /><xsl:text>";</xsl:text>
|
||||
</xsl:for-each><xsl:text>
|
||||
};
|
||||
};
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
<xsl:text>}</xsl:text>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
145
pkgs/development/mobile/androidenv/examples/shell.nix
Normal file
145
pkgs/development/mobile/androidenv/examples/shell.nix
Normal file
@@ -0,0 +1,145 @@
|
||||
{
|
||||
# If you copy this example out of nixpkgs, use these lines instead of the next.
|
||||
# This example pins nixpkgs: https://nix.dev/tutorials/towards-reproducibility-pinning-nixpkgs.html
|
||||
/*nixpkgsSource ? (builtins.fetchTarball {
|
||||
name = "nixpkgs-20.09";
|
||||
url = https://github.com/NixOS/nixpkgs/archive/20.09.tar.gz;
|
||||
sha256 = "1wg61h4gndm3vcprdcg7rc4s1v3jkm5xd7lw8r2f67w502y94gcy";
|
||||
}),
|
||||
pkgs ? import nixpkgsSource {},
|
||||
pkgs_i686 ? import nixpkgsSource { system = "i686-linux"; },*/
|
||||
|
||||
# If you want to use the in-tree version of nixpkgs:
|
||||
pkgs ? import ../../../../.. {},
|
||||
pkgs_i686 ? import ../../../../.. { system = "i686-linux"; },
|
||||
|
||||
config ? pkgs.config
|
||||
}:
|
||||
|
||||
# Copy this file to your Android project.
|
||||
let
|
||||
# Declaration of versions for everything. This is useful since these
|
||||
# versions may be used in multiple places in this Nix expression.
|
||||
android = {
|
||||
versions = {
|
||||
tools = "26.1.1";
|
||||
platformTools = "30.0.5";
|
||||
buildTools = "30.0.3";
|
||||
ndk = "22.0.7026061";
|
||||
|
||||
# or the LTS NDK:
|
||||
# ndk = "21.3.6528147";
|
||||
cmake = "3.10.2";
|
||||
emulator = "30.3.4";
|
||||
};
|
||||
|
||||
platforms = ["23" "24" "25" "26" "27" "28" "29" "30"];
|
||||
abis = ["armeabi-v7a" "arm64-v8a"];
|
||||
extras = ["extras;google;gcm"];
|
||||
};
|
||||
|
||||
# If you copy this example out of nixpkgs, something like this will work:
|
||||
/*androidEnvNixpkgs = fetchTarball {
|
||||
name = "androidenv";
|
||||
url = https://github.com/NixOS/nixpkgs/archive/<fill me in from Git>.tar.gz;
|
||||
sha256 = "<fill me in with nix-prefetch-url --unpack>";
|
||||
};
|
||||
|
||||
androidEnv = pkgs.callPackage "${androidEnvNixpkgs}/pkgs/development/mobile/androidenv" {
|
||||
inherit config pkgs pkgs_i686;
|
||||
licenseAccepted = true;
|
||||
};*/
|
||||
|
||||
# Otherwise, just use the in-tree androidenv:
|
||||
androidEnv = pkgs.callPackage ./.. {
|
||||
inherit config pkgs pkgs_i686;
|
||||
licenseAccepted = true;
|
||||
};
|
||||
|
||||
androidComposition = androidEnv.composeAndroidPackages {
|
||||
toolsVersion = android.versions.tools;
|
||||
platformToolsVersion = android.versions.platformTools;
|
||||
buildToolsVersions = [android.versions.buildTools];
|
||||
platformVersions = android.platforms;
|
||||
abiVersions = android.abis;
|
||||
|
||||
includeSources = true;
|
||||
includeSystemImages = true;
|
||||
includeEmulator = true;
|
||||
emulatorVersion = android.versions.emulator;
|
||||
|
||||
includeNDK = true;
|
||||
ndkVersion = android.versions.ndk;
|
||||
cmakeVersions = [android.versions.cmake];
|
||||
|
||||
useGoogleAPIs = true;
|
||||
includeExtras = android.extras;
|
||||
|
||||
# If you want to use a custom repo JSON:
|
||||
# repoJson = ../repo.json;
|
||||
|
||||
# If you want to use custom repo XMLs:
|
||||
/*repoXmls = {
|
||||
packages = [ ../xml/repository2-1.xml ];
|
||||
images = [
|
||||
../xml/android-sys-img2-1.xml
|
||||
../xml/android-tv-sys-img2-1.xml
|
||||
../xml/android-wear-sys-img2-1.xml
|
||||
../xml/android-wear-cn-sys-img2-1.xml
|
||||
../xml/google_apis-sys-img2-1.xml
|
||||
../xml/google_apis_playstore-sys-img2-1.xml
|
||||
];
|
||||
addons = [ ../xml/addon2-1.xml ];
|
||||
};*/
|
||||
|
||||
# Accepting more licenses declaratively:
|
||||
extraLicenses = [
|
||||
# Already accepted for you with the global accept_license = true or
|
||||
# licenseAccepted = true on androidenv.
|
||||
# "android-sdk-license"
|
||||
|
||||
# These aren't, but are useful for more uncommon setups.
|
||||
"android-sdk-preview-license"
|
||||
"android-googletv-license"
|
||||
"android-sdk-arm-dbt-license"
|
||||
"google-gdk-license"
|
||||
"intel-android-extra-license"
|
||||
"intel-android-sysimage-license"
|
||||
"mips-android-sysimage-license"
|
||||
];
|
||||
};
|
||||
|
||||
androidSdk = androidComposition.androidsdk;
|
||||
platformTools = androidComposition.platform-tools;
|
||||
jdk = pkgs.jdk;
|
||||
in
|
||||
pkgs.mkShell rec {
|
||||
name = "androidenv-demo";
|
||||
buildInputs = [ androidSdk platformTools jdk pkgs.android-studio ];
|
||||
|
||||
LANG = "C.UTF-8";
|
||||
LC_ALL = "C.UTF-8";
|
||||
JAVA_HOME = jdk.home;
|
||||
|
||||
# Note: ANDROID_HOME is deprecated. Use ANDROID_SDK_ROOT.
|
||||
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
|
||||
ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";
|
||||
|
||||
# Ensures that we don't have to use a FHS env by using the nix store's aapt2.
|
||||
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${android.versions.buildTools}/aapt2";
|
||||
|
||||
shellHook = ''
|
||||
# Add cmake to the path.
|
||||
cmake_root="$(echo "$ANDROID_SDK_ROOT/cmake/${android.versions.cmake}".*/)"
|
||||
export PATH="$cmake_root/bin:$PATH"
|
||||
|
||||
# Write out local.properties for Android Studio.
|
||||
cat <<EOF > local.properties
|
||||
# This file was automatically generated by nix-shell.
|
||||
sdk.dir=$ANDROID_SDK_ROOT
|
||||
ndk.dir=$ANDROID_NDK_ROOT
|
||||
cmake.dir=$cmake_root
|
||||
EOF
|
||||
'';
|
||||
}
|
||||
|
||||
26
pkgs/development/mobile/androidenv/fetchrepo.sh
Executable file
26
pkgs/development/mobile/androidenv/fetchrepo.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p curl
|
||||
|
||||
die() {
|
||||
echo "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
fetch() {
|
||||
local url="https://dl.google.com/android/repository/$1"
|
||||
echo "$url -> $2"
|
||||
curl -s "$url" -o "$2" || die "Failed to fetch $url"
|
||||
}
|
||||
|
||||
pushd "$(dirname "$0")" &>/dev/null || exit 1
|
||||
|
||||
mkdir -p xml
|
||||
|
||||
fetch repository2-1.xml xml/repository2-1.xml
|
||||
for img in android android-tv android-wear android-wear-cn android-automotive google_apis google_apis_playstore
|
||||
do
|
||||
fetch sys-img/$img/sys-img2-1.xml xml/$img-sys-img2-1.xml
|
||||
done
|
||||
fetch addon2-1.xml xml/addon2-1.xml
|
||||
|
||||
popd &>/dev/null
|
||||
@@ -1,36 +1,3 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p curl libxslt
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
die() {
|
||||
echo "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
fetch() {
|
||||
local url="https://dl.google.com/android/repository/$1"
|
||||
echo "$url -> $2"
|
||||
curl -s "$url" -o "$2" || die "Failed to fetch $url"
|
||||
}
|
||||
|
||||
pushd "$(dirname "$0")" &>/dev/null || exit 1
|
||||
|
||||
mkdir -p xml
|
||||
|
||||
# Convert base packages
|
||||
fetch repository2-1.xml xml/repository2-1.xml
|
||||
xsltproc convertpackages.xsl xml/repository2-1.xml > generated/packages.nix
|
||||
|
||||
# Convert system images
|
||||
for img in android android-tv android-wear android-wear-cn google_apis google_apis_playstore
|
||||
do
|
||||
fetch sys-img/$img/sys-img2-1.xml xml/$img-sys-img2-1.xml
|
||||
xsltproc --stringparam imageType $img convertsystemimages.xsl xml/$img-sys-img2-1.xml > generated/system-images-$img.nix
|
||||
done
|
||||
|
||||
# Convert system addons
|
||||
fetch addon2-1.xml xml/addon2-1.xml
|
||||
xsltproc convertaddons.xsl xml/addon2-1.xml > generated/addons.nix
|
||||
|
||||
popd &>/dev/null
|
||||
./fetchrepo.sh && ./mkrepo.sh
|
||||
|
||||
@@ -1,964 +0,0 @@
|
||||
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
addons = {
|
||||
|
||||
"10"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-10";
|
||||
revision = "10";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-10_r02.zip";
|
||||
sha1 = "cc0711857c881fa7534f90cf8cc09b8fe985484d";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"11"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-11";
|
||||
revision = "11";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-11_r01.zip";
|
||||
sha1 = "5eab5e81addee9f3576d456d205208314b5146a5";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"12"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-12";
|
||||
revision = "12";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-12_r01.zip";
|
||||
sha1 = "e9999f4fa978812174dfeceec0721c793a636e5d";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"13"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-13";
|
||||
revision = "13";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-13_r01.zip";
|
||||
sha1 = "3b153edd211c27dc736c893c658418a4f9041417";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"14"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-14";
|
||||
revision = "14";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-14_r02.zip";
|
||||
sha1 = "f8eb4d96ad0492b4c0db2d7e4f1a1a3836664d39";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"15"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-15";
|
||||
revision = "15";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-15_r03.zip";
|
||||
sha1 = "d0d2bf26805eb271693570a1aaec33e7dc3f45e9";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"16"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-16";
|
||||
revision = "16";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-16_r04.zip";
|
||||
sha1 = "ee6acf1b01020bfa8a8e24725dbc4478bee5e792";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"17"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-17";
|
||||
revision = "17";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-17_r04.zip";
|
||||
sha1 = "a076be0677f38df8ca5536b44dfb411a0c808c4f";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"18"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-18";
|
||||
revision = "18";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-18_r04.zip";
|
||||
sha1 = "6109603409debdd40854d4d4a92eaf8481462c8b";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"19"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-19";
|
||||
revision = "19";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-19_r20.zip";
|
||||
sha1 = "5b933abe830b2f25b4c0f171d45e9e0651e56311";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"21"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-21";
|
||||
revision = "21";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-21_r01.zip";
|
||||
sha1 = "66a754efb24e9bb07cc51648426443c7586c9d4a";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"22"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-22";
|
||||
revision = "22";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-22_r01.zip";
|
||||
sha1 = "5def0f42160cba8acff51b9c0c7e8be313de84f5";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"23"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-23";
|
||||
revision = "23";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-23_r01.zip";
|
||||
sha1 = "04c5cc1a7c88967250ebba9561d81e24104167db";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"24"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-24";
|
||||
revision = "24";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-24_r1.zip";
|
||||
sha1 = "31361c2868f27343ee917fbd259c1463821b6145";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"3"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-3";
|
||||
revision = "3";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-3-r03.zip";
|
||||
sha1 = "1f92abf3a76be66ae8032257fc7620acbd2b2e3a";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"4"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-4";
|
||||
revision = "4";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-4_r02.zip";
|
||||
sha1 = "9b6e86d8568558de4d606a7debc4f6049608dbd0";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"5"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-5";
|
||||
revision = "5";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-5_r01.zip";
|
||||
sha1 = "46eaeb56b645ee7ffa24ede8fa17f3df70db0503";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"6"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-6";
|
||||
revision = "6";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-6_r01.zip";
|
||||
sha1 = "5ff545d96e031e09580a6cf55713015c7d4936b2";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"7"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-7";
|
||||
revision = "7";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-7_r01.zip";
|
||||
sha1 = "2e7f91e0fe34fef7f58aeced973c6ae52361b5ac";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"8"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-8";
|
||||
revision = "8";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-8_r02.zip";
|
||||
sha1 = "3079958e7ec87222cac1e6b27bc471b27bf2c352";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"9"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-9";
|
||||
revision = "9";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-9_r02.zip";
|
||||
sha1 = "78664645a1e9accea4430814f8694291a7f1ea5d";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"12"."google_tv_addon" = {
|
||||
name = "google_tv_addon";
|
||||
path = "add-ons/addon-google_tv_addon-google-12";
|
||||
revision = "12";
|
||||
displayName = "Google TV Addon";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_tv-12_r02.zip";
|
||||
sha1 = "92128a12e7e8b0fb5bac59153d7779b717e7b840";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"13"."google_tv_addon" = {
|
||||
name = "google_tv_addon";
|
||||
path = "add-ons/addon-google_tv_addon-google-13";
|
||||
revision = "13";
|
||||
displayName = "Google TV Addon";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_tv-13_r01.zip";
|
||||
sha1 = "b73f7c66011ac8180b44aa4e83b8d78c66ea9a09";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"25"."google_apis" = {
|
||||
name = "google_apis";
|
||||
path = "add-ons/addon-google_apis-google-25";
|
||||
revision = "25";
|
||||
displayName = "Google APIs";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_apis-25_r1.zip";
|
||||
sha1 = "550e83eea9513ab11c44919ac6da54b36084a9f3";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
extras = {
|
||||
|
||||
|
||||
"extras;android;gapid;1" = {
|
||||
name = "extras-android-gapid-1";
|
||||
path = "extras/android/gapid/1";
|
||||
revision = "1.0.3";
|
||||
displayName = "GPU Debugging tools";
|
||||
archives = {
|
||||
linux = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/gapid_r01_linux.zip";
|
||||
sha1 = "7c9ef7544cf0aea030bcc29bd8e12c04fd53e653";
|
||||
};
|
||||
macosx = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/gapid_r01_osx.zip";
|
||||
sha1 = "597eb271349d890566274861eba2770a84ee4c69";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;android;gapid;3" = {
|
||||
name = "extras-android-gapid-3";
|
||||
path = "extras/android/gapid/3";
|
||||
revision = "3.1.0";
|
||||
displayName = "GPU Debugging tools";
|
||||
archives = {
|
||||
linux = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/gapid_2994895_linux.zip";
|
||||
sha1 = "e40371ba191f617e4e79bc760d0ab2948ba8cf46";
|
||||
};
|
||||
macosx = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/gapid_2994895_osx.zip";
|
||||
sha1 = "ad86a2350b7b9908300277bf03d41649659de384";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;android;m2repository" = {
|
||||
name = "extras-android-m2repository";
|
||||
path = "extras/android/m2repository";
|
||||
revision = "47.0.0";
|
||||
displayName = "Android Support Repository";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/android_m2repository_r47.zip";
|
||||
sha1 = "a0d22beacc106a6977321f2b07d692ce4979e96a";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;Android_Emulator_Hypervisor_Driver" = {
|
||||
name = "extras-google-Android_Emulator_Hypervisor_Driver";
|
||||
path = "extras/google/Android_Emulator_Hypervisor_Driver";
|
||||
revision = "1.4.0";
|
||||
displayName = "Android Emulator Hypervisor Driver for AMD Processors (installer)";
|
||||
archives = {
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;admob_ads_sdk" = {
|
||||
name = "extras-google-admob_ads_sdk";
|
||||
path = "extras/google/admob_ads_sdk";
|
||||
revision = "11";
|
||||
displayName = "Google AdMob Ads SDK";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/GoogleAdMobAdsSdkAndroid-6.4.1.zip";
|
||||
sha1 = "0102859d9575baa0bf4fd5eb422af2ad0fe6cb82";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;analytics_sdk_v2" = {
|
||||
name = "extras-google-analytics_sdk_v2";
|
||||
path = "extras/google/analytics_sdk_v2";
|
||||
revision = "3";
|
||||
displayName = "Google Analytics App Tracking SDK";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/GoogleAnalyticsAndroid_2.0beta5.zip";
|
||||
sha1 = "dc14026bf0ce78315cb5dd00552607de0894de83";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;auto" = {
|
||||
name = "extras-google-auto";
|
||||
path = "extras/google/auto";
|
||||
revision = "1.1";
|
||||
displayName = "Android Auto Desktop Head Unit emulator";
|
||||
archives = {
|
||||
linux = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/desktop-head-unit-linux_r01.1.zip";
|
||||
sha1 = "202a6e1b3009a0eb815f8c672d2d5b3717de6169";
|
||||
};
|
||||
macosx = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/desktop-head-unit-macosx_r01.1.zip";
|
||||
sha1 = "8179cbb3914493ebc5eb65b731cba061582f2e84";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;gcm" = {
|
||||
name = "extras-google-gcm";
|
||||
path = "extras/google/gcm";
|
||||
revision = "3";
|
||||
displayName = "Google Cloud Messaging for Android Library";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/gcm_r03.zip";
|
||||
sha1 = "ad066fd0dc7fc99d8aadac09c65a3c2519fbc7bf";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;google_play_services" = {
|
||||
name = "extras-google-google_play_services";
|
||||
path = "extras/google/google_play_services";
|
||||
revision = "49";
|
||||
displayName = "Google Play services";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_play_services_v16_1_rc09.zip";
|
||||
sha1 = "f95bf19634e2ab0430923247fe2c50246432d2e9";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;google_play_services_froyo" = {
|
||||
name = "extras-google-google_play_services_froyo";
|
||||
path = "extras/google/google_play_services_froyo";
|
||||
revision = "12";
|
||||
displayName = "Google Play services for Froyo";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_play_services_3265130_r12.zip";
|
||||
sha1 = "92558dbc380bba3d55d0ec181167fb05ce7c79d9";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;instantapps" = {
|
||||
name = "extras-google-instantapps";
|
||||
path = "extras/google/instantapps";
|
||||
revision = "1.9.0";
|
||||
displayName = "Google Play Instant Development SDK";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/iasdk-1.9.0-1566514721.zip";
|
||||
sha1 = "c498367dcd7db30154b3e70c4ddbb1b0ea4b8d20";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;m2repository" = {
|
||||
name = "extras-google-m2repository";
|
||||
path = "extras/google/m2repository";
|
||||
revision = "58";
|
||||
displayName = "Google Repository";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/google_m2repository_gms_v11_3_rc05_wear_2_0_5.zip";
|
||||
sha1 = "05086add9e3a0eb1b67111108d7757a4337c3f10";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;market_apk_expansion" = {
|
||||
name = "extras-google-market_apk_expansion";
|
||||
path = "extras/google/market_apk_expansion";
|
||||
revision = "1";
|
||||
displayName = "Google Play APK Expansion library";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/market_apk_expansion-r03.zip";
|
||||
sha1 = "5305399dc1a56814e86b8459ce24871916f78b8c";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;market_licensing" = {
|
||||
name = "extras-google-market_licensing";
|
||||
path = "extras/google/market_licensing";
|
||||
revision = "1";
|
||||
displayName = "Google Play Licensing Library";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/market_licensing-r02.zip";
|
||||
sha1 = "355e8dc304a92a5616db235af8ee7bd554356254";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;simulators" = {
|
||||
name = "extras-google-simulators";
|
||||
path = "extras/google/simulators";
|
||||
revision = "1";
|
||||
displayName = "Android Auto API Simulators";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/simulator_r01.zip";
|
||||
sha1 = "4fb5344e34e8faab4db18af07dace44c50db26a7";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;usb_driver" = {
|
||||
name = "extras-google-usb_driver";
|
||||
path = "extras/google/usb_driver";
|
||||
revision = "12";
|
||||
displayName = "Google USB Driver";
|
||||
archives = {
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;google;webdriver" = {
|
||||
name = "extras-google-webdriver";
|
||||
path = "extras/google/webdriver";
|
||||
revision = "2";
|
||||
displayName = "Google Web Driver";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/webdriver_r02.zip";
|
||||
sha1 = "13f3a3b2670a5fc04a7342861644be9a01b07e38";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0.zip";
|
||||
sha1 = "b621b9d5adf273bb0725948589863e60e96eeaf1";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha4";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha4";
|
||||
revision = "1";
|
||||
displayName = "com.android.support.constraint:constraint-layout-solver:1.0.0-alpha4";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-alpha4.zip";
|
||||
sha1 = "2aa2aceecc6ba172742d0af0b43f11d03924eeb8";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-alpha8";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha8";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0-alpha8";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-alpha8.zip";
|
||||
sha1 = "cd13d16a8f0198c1d6040ec8b1d0d4e5bb7feb6a";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta1" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-beta1";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-beta1";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0-beta1";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-beta1.zip";
|
||||
sha1 = "042c25575e7650e96f0f5f5d1d3c54ed38eb821a";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta2" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-beta2";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-beta2";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0-beta2";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-beta2.zip";
|
||||
sha1 = "28492fd42b20ae1586591ff906556d459cfdaae8";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta3" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-beta3";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-beta3";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0-beta3";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-beta3.zip";
|
||||
sha1 = "268e763fa64bd217d8d830e59ce76be19aaba631";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta4" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-beta4";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-beta4";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0-beta4";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-beta4.zip";
|
||||
sha1 = "2213bf37e7a2869db2635895b8e90ca6841e79d2";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta5" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.0-beta5";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-beta5";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.0-beta5";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.0-beta5.zip";
|
||||
sha1 = "3918cfef73e64048d0b3e048068e208b414e7e91";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.1";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.1";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.1";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.1.zip";
|
||||
sha1 = "76f8823def9a6da8954a54737762a6820bc1d043";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-solver-1.0.2";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.2";
|
||||
revision = "1";
|
||||
displayName = "Solver for ConstraintLayout 1.0.2";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-solver-1.0.2.zip";
|
||||
sha1 = "96d7ff669f0e808e9833b2c2e320702826ccc8be";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0.zip";
|
||||
sha1 = "70acf99689b933bc6735645d5c3d92b91954b6cb";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha4" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha4";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha4";
|
||||
revision = "1";
|
||||
displayName = "com.android.support.constraint:constraint-layout:1.0.0-alpha4";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-alpha4.zip";
|
||||
sha1 = "645a9be1f0c1177301e71cd0ddccf1dd67c554fe";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha8" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-alpha8";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha8";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0-alpha8";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-alpha8.zip";
|
||||
sha1 = "7912ba03b04831f918f523648f118c4ee4da7604";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta1" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-beta1";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-beta1";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0-beta1";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-beta1.zip";
|
||||
sha1 = "11f2f5cec4ff02986bad75435e5be77b704b4c64";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta2" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-beta2";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-beta2";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0-beta2";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-beta2.zip";
|
||||
sha1 = "623939865ede2e5c2c975dc55963e0d182bcce95";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta3" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-beta3";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-beta3";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0-beta3";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-beta3.zip";
|
||||
sha1 = "d78bb6a8ce92005fb1e4ed55d892a65b4258c60b";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta4" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-beta4";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-beta4";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0-beta4";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-beta4.zip";
|
||||
sha1 = "dc60844aab93a09a54a3c107685a77b18d7c1c39";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta5" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.0-beta5";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-beta5";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.0-beta5";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.0-beta5.zip";
|
||||
sha1 = "4660f6c7a576ea1364f0c3225db71c29ca660d9a";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.1";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.1";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.1";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.1.zip";
|
||||
sha1 = "342b0894b8651fff37586f80f383733e97aba9f9";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" = {
|
||||
name = "extras-m2repository-com-android-support-constraint-constraint-layout-1.0.2";
|
||||
path = "extras/m2repository/com/android/support/constraint/constraint-layout/1.0.2";
|
||||
revision = "1";
|
||||
displayName = "ConstraintLayout for Android 1.0.2";
|
||||
archives = {
|
||||
|
||||
all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/com.android.support.constraint-constraint-layout-1.0.2.zip";
|
||||
sha1 = "3d9688a50fe0ed7348275f85d1b02278f616d8a4";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,114 +0,0 @@
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
"21".android-tv."x86" = {
|
||||
name = "system-image-21-android-tv-x86";
|
||||
path = "system-images/android-21/android-tv/x86";
|
||||
revision = "21-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-21_r03.zip";
|
||||
sha1 = "2f8a1988188d6abfd6c6395baeb4471a034dc1e8";
|
||||
};
|
||||
};
|
||||
"21".android-tv."armeabi-v7a" = {
|
||||
name = "system-image-21-android-tv-armeabi-v7a";
|
||||
path = "system-images/android-21/android-tv/armeabi-v7a";
|
||||
revision = "21-android-tv-armeabi-v7a";
|
||||
displayName = "Android TV ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/armeabi-v7a-21_r03.zip";
|
||||
sha1 = "b63e28a47f11b639dd94981a458b7abfa89ac331";
|
||||
};
|
||||
};
|
||||
"22".android-tv."x86" = {
|
||||
name = "system-image-22-android-tv-x86";
|
||||
path = "system-images/android-22/android-tv/x86";
|
||||
revision = "22-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-22_r03.zip";
|
||||
sha1 = "c78efd5a155622eb490be9d326f5783993375c35";
|
||||
};
|
||||
};
|
||||
"23".android-tv."x86" = {
|
||||
name = "system-image-23-android-tv-x86";
|
||||
path = "system-images/android-23/android-tv/x86";
|
||||
revision = "23-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-23_r19.zip";
|
||||
sha1 = "47e8d6b08a337a0672f0f105bf907d39ed9457ec";
|
||||
};
|
||||
};
|
||||
"23".android-tv."armeabi-v7a" = {
|
||||
name = "system-image-23-android-tv-armeabi-v7a";
|
||||
path = "system-images/android-23/android-tv/armeabi-v7a";
|
||||
revision = "23-android-tv-armeabi-v7a";
|
||||
displayName = "Android TV ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/armeabi-v7a-23_r12.zip";
|
||||
sha1 = "bd84678ae8caf71d584f5210e866b2807e7b4b52";
|
||||
};
|
||||
};
|
||||
"24".android-tv."x86" = {
|
||||
name = "system-image-24-android-tv-x86";
|
||||
path = "system-images/android-24/android-tv/x86";
|
||||
revision = "24-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-24_r20.zip";
|
||||
sha1 = "0b8cd98dec9ebd04376ce4f6e270193ceae8acea";
|
||||
};
|
||||
};
|
||||
"25".android-tv."x86" = {
|
||||
name = "system-image-25-android-tv-x86";
|
||||
path = "system-images/android-25/android-tv/x86";
|
||||
revision = "25-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-25_r14.zip";
|
||||
sha1 = "1c88f11683375c059803c3a7be8e880cc23a6f9a";
|
||||
};
|
||||
};
|
||||
"26".android-tv."x86" = {
|
||||
name = "system-image-26-android-tv-x86";
|
||||
path = "system-images/android-26/android-tv/x86";
|
||||
revision = "26-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-26_r12.zip";
|
||||
sha1 = "d8b12e543925a0454403d2a854996a76410ec374";
|
||||
};
|
||||
};
|
||||
"27".android-tv."x86" = {
|
||||
name = "system-image-27-android-tv-x86";
|
||||
path = "system-images/android-27/android-tv/x86";
|
||||
revision = "27-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-27_r07.zip";
|
||||
sha1 = "5ed40e568c0d8d023c5b6c76634b22a477ed54aa";
|
||||
};
|
||||
};
|
||||
"28".android-tv."x86" = {
|
||||
name = "system-image-28-android-tv-x86";
|
||||
path = "system-images/android-28/android-tv/x86";
|
||||
revision = "28-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-28_r08.zip";
|
||||
sha1 = "f5f8f296dfaca7945434992761c8d47d50257c21";
|
||||
};
|
||||
};
|
||||
"Q".android-tv."x86" = {
|
||||
name = "system-image-Q-android-tv-x86";
|
||||
path = "system-images/android-Q/android-tv/x86";
|
||||
revision = "Q-android-tv-x86";
|
||||
displayName = "Android TV Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-tv/x86-Q_r01.zip";
|
||||
sha1 = "80c66ddce0dbe53fe6fedcade230d518112fffb1";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
"25".android-wear."armeabi-v7a" = {
|
||||
name = "system-image-25-android-wear-armeabi-v7a";
|
||||
path = "system-images/android-25/android-wear-cn/armeabi-v7a";
|
||||
revision = "25-android-wear-armeabi-v7a";
|
||||
displayName = "China version of Android Wear ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear-cn/armeabi-v7a-25_r04.zip";
|
||||
sha1 = "02d7bc86df054d1e89fe5856b3af1d2c142cab41";
|
||||
};
|
||||
};
|
||||
"25".android-wear."x86" = {
|
||||
name = "system-image-25-android-wear-x86";
|
||||
path = "system-images/android-25/android-wear-cn/x86";
|
||||
revision = "25-android-wear-x86";
|
||||
displayName = "China version of Android Wear Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear-cn/x86-25_r04.zip";
|
||||
sha1 = "73eab14c7cf2f6941e1fee61e0038ead7a2c7f4d";
|
||||
};
|
||||
};
|
||||
"26".android-wear."x86" = {
|
||||
name = "system-image-26-android-wear-x86";
|
||||
path = "system-images/android-26/android-wear-cn/x86";
|
||||
revision = "26-android-wear-x86";
|
||||
displayName = "China version of Android Wear Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear-cn/x86-26_r04.zip";
|
||||
sha1 = "fdc8a313f889a2d6522de1fbc00ee9e13547d096";
|
||||
};
|
||||
};
|
||||
"28".android-wear."x86" = {
|
||||
name = "system-image-28-android-wear-x86";
|
||||
path = "system-images/android-28/android-wear-cn/x86";
|
||||
revision = "28-android-wear-x86";
|
||||
displayName = "China version of Wear OS Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear-cn/x86-28_r03.zip";
|
||||
sha1 = "2099d87709c5e064273925dbf2cf1fd081bf0262";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
"23".android-wear."armeabi-v7a" = {
|
||||
name = "system-image-23-android-wear-armeabi-v7a";
|
||||
path = "system-images/android-23/android-wear/armeabi-v7a";
|
||||
revision = "23-android-wear-armeabi-v7a";
|
||||
displayName = "Android Wear ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear/armeabi-v7a-23_r06.zip";
|
||||
sha1 = "0df5d34b1cdaaaa3805a2f06bb889901eabe2e71";
|
||||
};
|
||||
};
|
||||
"23".android-wear."x86" = {
|
||||
name = "system-image-23-android-wear-x86";
|
||||
path = "system-images/android-23/android-wear/x86";
|
||||
revision = "23-android-wear-x86";
|
||||
displayName = "Android Wear Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear/x86-23_r06.zip";
|
||||
sha1 = "3b15c123f3f71459d5b60c1714d49c5d90a5525e";
|
||||
};
|
||||
};
|
||||
"25".android-wear."armeabi-v7a" = {
|
||||
name = "system-image-25-android-wear-armeabi-v7a";
|
||||
path = "system-images/android-25/android-wear/armeabi-v7a";
|
||||
revision = "25-android-wear-armeabi-v7a";
|
||||
displayName = "Android Wear ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear/armeabi-v7a-25_r03.zip";
|
||||
sha1 = "76d3568a4e08023047af7d13025a35c9bf1d7e5c";
|
||||
};
|
||||
};
|
||||
"25".android-wear."x86" = {
|
||||
name = "system-image-25-android-wear-x86";
|
||||
path = "system-images/android-25/android-wear/x86";
|
||||
revision = "25-android-wear-x86";
|
||||
displayName = "Android Wear Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear/x86-25_r03.zip";
|
||||
sha1 = "693fce7b487a65491a4e88e9f740959688c9dbe6";
|
||||
};
|
||||
};
|
||||
"26".android-wear."x86" = {
|
||||
name = "system-image-26-android-wear-x86";
|
||||
path = "system-images/android-26/android-wear/x86";
|
||||
revision = "26-android-wear-x86";
|
||||
displayName = "Android Wear Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear/x86-26_r04.zip";
|
||||
sha1 = "fbffa91b936ca18fcc1e0bab2b52a8b0835cbb1c";
|
||||
};
|
||||
};
|
||||
"28".android-wear."x86" = {
|
||||
name = "system-image-28-android-wear-x86";
|
||||
path = "system-images/android-28/android-wear/x86";
|
||||
revision = "28-android-wear-x86";
|
||||
displayName = "Wear OS Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android-wear/x86-28_r03.zip";
|
||||
sha1 = "b80bd53ab69f19441714bff2e4d55931e6d3f7be";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,364 +0,0 @@
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
"10".default."armeabi-v7a" = {
|
||||
name = "system-image-10-default-armeabi-v7a";
|
||||
path = "system-images/android-10/default/armeabi-v7a";
|
||||
revision = "10-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-10_r05.zip";
|
||||
sha1 = "8537616a7add47cce24c60f18bc2429e3dc90ae3";
|
||||
};
|
||||
};
|
||||
"14".default."armeabi-v7a" = {
|
||||
name = "system-image-14-default-armeabi-v7a";
|
||||
path = "system-images/android-14/default/armeabi-v7a";
|
||||
revision = "14-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/sysimg_armv7a-14_r02.zip";
|
||||
sha1 = "d8991b0c06b18d7d6ed4169d67460ee1add6661b";
|
||||
};
|
||||
};
|
||||
"15".default."armeabi-v7a" = {
|
||||
name = "system-image-15-default-armeabi-v7a";
|
||||
path = "system-images/android-15/default/armeabi-v7a";
|
||||
revision = "15-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-15_r05.zip";
|
||||
sha1 = "03d7ed95a9d3b107e3f2e5b166d017ea12529e70";
|
||||
};
|
||||
};
|
||||
"16".default."armeabi-v7a" = {
|
||||
name = "system-image-16-default-armeabi-v7a";
|
||||
path = "system-images/android-16/default/armeabi-v7a";
|
||||
revision = "16-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-16_r06.zip";
|
||||
sha1 = "69b944b0d5a18c8563fa80d7d229af64890f724e";
|
||||
};
|
||||
};
|
||||
"17".default."armeabi-v7a" = {
|
||||
name = "system-image-17-default-armeabi-v7a";
|
||||
path = "system-images/android-17/default/armeabi-v7a";
|
||||
revision = "17-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-17_r06.zip";
|
||||
sha1 = "a18a3fd0958ec4ef52507f58e414fc5c7dfd59d6";
|
||||
};
|
||||
};
|
||||
"18".default."armeabi-v7a" = {
|
||||
name = "system-image-18-default-armeabi-v7a";
|
||||
path = "system-images/android-18/default/armeabi-v7a";
|
||||
revision = "18-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-18_r05.zip";
|
||||
sha1 = "580b583720f7de671040d5917c8c9db0c7aa03fd";
|
||||
};
|
||||
};
|
||||
"19".default."armeabi-v7a" = {
|
||||
name = "system-image-19-default-armeabi-v7a";
|
||||
path = "system-images/android-19/default/armeabi-v7a";
|
||||
revision = "19-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-19_r05.zip";
|
||||
sha1 = "d1a5fd4f2e1c013c3d3d9bfe7e9db908c3ed56fa";
|
||||
};
|
||||
};
|
||||
"21".default."armeabi-v7a" = {
|
||||
name = "system-image-21-default-armeabi-v7a";
|
||||
path = "system-images/android-21/default/armeabi-v7a";
|
||||
revision = "21-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-21_r04.zip";
|
||||
sha1 = "8c606f81306564b65e41303d2603e4c42ded0d10";
|
||||
};
|
||||
};
|
||||
"22".default."armeabi-v7a" = {
|
||||
name = "system-image-22-default-armeabi-v7a";
|
||||
path = "system-images/android-22/default/armeabi-v7a";
|
||||
revision = "22-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-22_r02.zip";
|
||||
sha1 = "2114ec015dbf3a16cbcb4f63e8a84a1b206a07a1";
|
||||
};
|
||||
};
|
||||
"23".default."armeabi-v7a" = {
|
||||
name = "system-image-23-default-armeabi-v7a";
|
||||
path = "system-images/android-23/default/armeabi-v7a";
|
||||
revision = "23-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-23_r06.zip";
|
||||
sha1 = "7cf2ad756e54a3acfd81064b63cb0cb9dff2798d";
|
||||
};
|
||||
};
|
||||
"24".default."armeabi-v7a" = {
|
||||
name = "system-image-24-default-armeabi-v7a";
|
||||
path = "system-images/android-24/default/armeabi-v7a";
|
||||
revision = "24-default-armeabi-v7a";
|
||||
displayName = "ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/armeabi-v7a-24_r07.zip";
|
||||
sha1 = "3454546b4eed2d6c3dd06d47757d6da9f4176033";
|
||||
};
|
||||
};
|
||||
"24".default."arm64-v8a" = {
|
||||
name = "system-image-24-default-arm64-v8a";
|
||||
path = "system-images/android-24/default/arm64-v8a";
|
||||
revision = "24-default-arm64-v8a";
|
||||
displayName = "ARM 64 v8a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/arm64-v8a-24_r07.zip";
|
||||
sha1 = "e8ab2e49e4efe4b064232b33b5eeaded61437d7f";
|
||||
};
|
||||
};
|
||||
"16".default."mips" = {
|
||||
name = "system-image-16-default-mips";
|
||||
path = "system-images/android-16/default/mips";
|
||||
revision = "16-default-mips";
|
||||
displayName = "MIPS System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/sysimg_mips-16_r04.zip";
|
||||
sha1 = "67943c54fb3943943ffeb05fdd39c0b753681f6e";
|
||||
};
|
||||
};
|
||||
"17".default."mips" = {
|
||||
name = "system-image-17-default-mips";
|
||||
path = "system-images/android-17/default/mips";
|
||||
revision = "17-default-mips";
|
||||
displayName = "MIPS System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/sysimg_mips-17_r01.zip";
|
||||
sha1 = "f0c6e153bd584c29e51b5c9723cfbf30f996a05d";
|
||||
};
|
||||
};
|
||||
"10".default."x86" = {
|
||||
name = "system-image-10-default-x86";
|
||||
path = "system-images/android-10/default/x86";
|
||||
revision = "10-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-10_r05.zip";
|
||||
sha1 = "a166d5ccbb165e1dd5464fbfeec30a61f77790d8";
|
||||
};
|
||||
};
|
||||
"15".default."x86" = {
|
||||
name = "system-image-15-default-x86";
|
||||
path = "system-images/android-15/default/x86";
|
||||
revision = "15-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-15_r05.zip";
|
||||
sha1 = "c387e0efed2cdc610e5944eea67b7b692d03760c";
|
||||
};
|
||||
};
|
||||
"16".default."x86" = {
|
||||
name = "system-image-16-default-x86";
|
||||
path = "system-images/android-16/default/x86";
|
||||
revision = "16-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-16_r06.zip";
|
||||
sha1 = "bf1bf8c5591346118d2235da1ad20e7be8a3e9cd";
|
||||
};
|
||||
};
|
||||
"17".default."x86" = {
|
||||
name = "system-image-17-default-x86";
|
||||
path = "system-images/android-17/default/x86";
|
||||
revision = "17-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-17_r04.zip";
|
||||
sha1 = "03c6d022ab2dcbbcf655d78ba5ccb0431cadcaec";
|
||||
};
|
||||
};
|
||||
"18".default."x86" = {
|
||||
name = "system-image-18-default-x86";
|
||||
path = "system-images/android-18/default/x86";
|
||||
revision = "18-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-18_r04.zip";
|
||||
sha1 = "7a4ced4d9b0ab48047825491b4072dc2eb9b610e";
|
||||
};
|
||||
};
|
||||
"19".default."x86" = {
|
||||
name = "system-image-19-default-x86";
|
||||
path = "system-images/android-19/default/x86";
|
||||
revision = "19-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-19_r06.zip";
|
||||
sha1 = "2ac82153aae97f7eae4c5a0761224fe04321d03d";
|
||||
};
|
||||
};
|
||||
"21".default."x86" = {
|
||||
name = "system-image-21-default-x86";
|
||||
path = "system-images/android-21/default/x86";
|
||||
revision = "21-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-21_r05.zip";
|
||||
sha1 = "00f0eb0a1003efe3316347f762e20a85d8749cff";
|
||||
};
|
||||
};
|
||||
"22".default."x86" = {
|
||||
name = "system-image-22-default-x86";
|
||||
path = "system-images/android-22/default/x86";
|
||||
revision = "22-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-22_r06.zip";
|
||||
sha1 = "e33e2a6cc3f1cc56b2019dbef3917d2eeb26f54e";
|
||||
};
|
||||
};
|
||||
"23".default."x86" = {
|
||||
name = "system-image-23-default-x86";
|
||||
path = "system-images/android-23/default/x86";
|
||||
revision = "23-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-23_r10.zip";
|
||||
sha1 = "f6c3e3dd7bd951454795aa75c3a145fd05ac25bb";
|
||||
};
|
||||
};
|
||||
"24".default."x86" = {
|
||||
name = "system-image-24-default-x86";
|
||||
path = "system-images/android-24/default/x86";
|
||||
revision = "24-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-24_r08.zip";
|
||||
sha1 = "c1cae7634b0216c0b5990f2c144eb8ca948e3511";
|
||||
};
|
||||
};
|
||||
"25".default."x86" = {
|
||||
name = "system-image-25-default-x86";
|
||||
path = "system-images/android-25/default/x86";
|
||||
revision = "25-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-25_r01.zip";
|
||||
sha1 = "78ce7eb1387d598685633b9f7cbb300c3d3aeb5f";
|
||||
};
|
||||
};
|
||||
"26".default."x86" = {
|
||||
name = "system-image-26-default-x86";
|
||||
path = "system-images/android-26/default/x86";
|
||||
revision = "26-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-26_r01.zip";
|
||||
sha1 = "e613d6e0da668e30daf547f3c6627a6352846f90";
|
||||
};
|
||||
};
|
||||
"27".default."x86" = {
|
||||
name = "system-image-27-default-x86";
|
||||
path = "system-images/android-27/default/x86";
|
||||
revision = "27-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-27_r01.zip";
|
||||
sha1 = "4ec990fac7b62958decd12e18a4cd389dfe7c582";
|
||||
};
|
||||
};
|
||||
"28".default."x86" = {
|
||||
name = "system-image-28-default-x86";
|
||||
path = "system-images/android-28/default/x86";
|
||||
revision = "28-default-x86";
|
||||
displayName = "Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86-28_r04.zip";
|
||||
sha1 = "ce03c42d80c0fc6dc47f6455dbee7aa275d02780";
|
||||
};
|
||||
};
|
||||
"21".default."x86_64" = {
|
||||
name = "system-image-21-default-x86_64";
|
||||
path = "system-images/android-21/default/x86_64";
|
||||
revision = "21-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-21_r05.zip";
|
||||
sha1 = "9078a095825a69e5e215713f0866c83cef65a342";
|
||||
};
|
||||
};
|
||||
"22".default."x86_64" = {
|
||||
name = "system-image-22-default-x86_64";
|
||||
path = "system-images/android-22/default/x86_64";
|
||||
revision = "22-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-22_r06.zip";
|
||||
sha1 = "5db3b27f78cd9c4c5092b1cad5a5dd479fb5b2e4";
|
||||
};
|
||||
};
|
||||
"23".default."x86_64" = {
|
||||
name = "system-image-23-default-x86_64";
|
||||
path = "system-images/android-23/default/x86_64";
|
||||
revision = "23-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-23_r10.zip";
|
||||
sha1 = "7cbc291483ca07dc67b71268c5f08a5755f50f51";
|
||||
};
|
||||
};
|
||||
"24".default."x86_64" = {
|
||||
name = "system-image-24-default-x86_64";
|
||||
path = "system-images/android-24/default/x86_64";
|
||||
revision = "24-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-24_r08.zip";
|
||||
sha1 = "f6559e1949a5879f31a9662f4f0e50ad60181684";
|
||||
};
|
||||
};
|
||||
"25".default."x86_64" = {
|
||||
name = "system-image-25-default-x86_64";
|
||||
path = "system-images/android-25/default/x86_64";
|
||||
revision = "25-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-25_r01.zip";
|
||||
sha1 = "7093d7b39216020226ff430a3b7b81c94d31ad37";
|
||||
};
|
||||
};
|
||||
"26".default."x86_64" = {
|
||||
name = "system-image-26-default-x86_64";
|
||||
path = "system-images/android-26/default/x86_64";
|
||||
revision = "26-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-26_r01.zip";
|
||||
sha1 = "432f149c048bffce7f9de526ec65b336daf7a0a3";
|
||||
};
|
||||
};
|
||||
"27".default."x86_64" = {
|
||||
name = "system-image-27-default-x86_64";
|
||||
path = "system-images/android-27/default/x86_64";
|
||||
revision = "27-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-27_r01.zip";
|
||||
sha1 = "2878261011a59ca3de29dc5b457a495fdb268d60";
|
||||
};
|
||||
};
|
||||
"28".default."x86_64" = {
|
||||
name = "system-image-28-default-x86_64";
|
||||
path = "system-images/android-28/default/x86_64";
|
||||
revision = "28-default-x86_64";
|
||||
displayName = "Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/android/x86_64-28_r04.zip";
|
||||
sha1 = "d47a85c8f4e9fd57df97814ad8884eeb0f3a0ef0";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,384 +0,0 @@
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
"10".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-10-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-10/google_apis/armeabi-v7a";
|
||||
revision = "10-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-10_r06.zip";
|
||||
sha1 = "970abf3a2a9937a43576afd9bb56e4a8191947f8";
|
||||
};
|
||||
};
|
||||
"10".google_apis."x86" = {
|
||||
name = "system-image-10-google_apis-x86";
|
||||
path = "system-images/android-10/google_apis/x86";
|
||||
revision = "10-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-10_r06.zip";
|
||||
sha1 = "070a9552e3d358d8e72e8b2042e539e2b7a1b035";
|
||||
};
|
||||
};
|
||||
"15".google_apis."x86" = {
|
||||
name = "system-image-15-google_apis-x86";
|
||||
path = "system-images/android-15/google_apis/x86";
|
||||
revision = "15-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-15_r06.zip";
|
||||
sha1 = "a7deb32c12396b6c4fd60ad14a62e19f8bdcae20";
|
||||
};
|
||||
};
|
||||
"15".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-15-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-15/google_apis/armeabi-v7a";
|
||||
revision = "15-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-15_r06.zip";
|
||||
sha1 = "6deb76cf34760a6037cb18d89772c9e986d07497";
|
||||
};
|
||||
};
|
||||
"16".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-16-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-16/google_apis/armeabi-v7a";
|
||||
revision = "16-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-16_r06.zip";
|
||||
sha1 = "5a5ff097680c6dae473c8719296ce6d7b70edb2d";
|
||||
};
|
||||
};
|
||||
"16".google_apis."x86" = {
|
||||
name = "system-image-16-google_apis-x86";
|
||||
path = "system-images/android-16/google_apis/x86";
|
||||
revision = "16-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-16_r06.zip";
|
||||
sha1 = "b57adef2f43dd176b8c02c980c16a796021b2071";
|
||||
};
|
||||
};
|
||||
"17".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-17-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-17/google_apis/armeabi-v7a";
|
||||
revision = "17-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-17_r06.zip";
|
||||
sha1 = "a59f26cb5707da97e869a27d87b83477204ac594";
|
||||
};
|
||||
};
|
||||
"17".google_apis."x86" = {
|
||||
name = "system-image-17-google_apis-x86";
|
||||
path = "system-images/android-17/google_apis/x86";
|
||||
revision = "17-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-17_r06.zip";
|
||||
sha1 = "7864c34faf0402b8923d8c6e609a5339f74cc8d6";
|
||||
};
|
||||
};
|
||||
"18".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-18-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-18/google_apis/armeabi-v7a";
|
||||
revision = "18-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-18_r06.zip";
|
||||
sha1 = "7faaccabbcc5f08e410436d3f63eea42521ea974";
|
||||
};
|
||||
};
|
||||
"18".google_apis."x86" = {
|
||||
name = "system-image-18-google_apis-x86";
|
||||
path = "system-images/android-18/google_apis/x86";
|
||||
revision = "18-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-18_r06.zip";
|
||||
sha1 = "dd674d719cad61602702be4b3d98edccfbfea53e";
|
||||
};
|
||||
};
|
||||
"19".google_apis."x86" = {
|
||||
name = "system-image-19-google_apis-x86";
|
||||
path = "system-images/android-19/google_apis/x86";
|
||||
revision = "19-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-19_r38.zip";
|
||||
sha1 = "928e4ec82876c61ef53451425d10ccb840cdd0f2";
|
||||
};
|
||||
};
|
||||
"19".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-19-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-19/google_apis/armeabi-v7a";
|
||||
revision = "19-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-19_r38.zip";
|
||||
sha1 = "434edd2ddc39d1ca083a5fa9721c0db8ab804737";
|
||||
};
|
||||
};
|
||||
"21".google_apis."x86" = {
|
||||
name = "system-image-21-google_apis-x86";
|
||||
path = "system-images/android-21/google_apis/x86";
|
||||
revision = "21-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-21_r30.zip";
|
||||
sha1 = "37548caae9e2897fb1d2b15f7fcf624c714cb610";
|
||||
};
|
||||
};
|
||||
"21".google_apis."x86_64" = {
|
||||
name = "system-image-21-google_apis-x86_64";
|
||||
path = "system-images/android-21/google_apis/x86_64";
|
||||
revision = "21-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-21_r30.zip";
|
||||
sha1 = "82d34fdaae2916bd4d48a4f144db51e4e5719aa4";
|
||||
};
|
||||
};
|
||||
"21".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-21-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-21/google_apis/armeabi-v7a";
|
||||
revision = "21-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-21_r30.zip";
|
||||
sha1 = "bbdbbb3c4387752a8f28718a3190d901c0378058";
|
||||
};
|
||||
};
|
||||
"22".google_apis."x86" = {
|
||||
name = "system-image-22-google_apis-x86";
|
||||
path = "system-images/android-22/google_apis/x86";
|
||||
revision = "22-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-22_r24.zip";
|
||||
sha1 = "e4cd95b1c0837fc12d6544742e82d8ef344c8758";
|
||||
};
|
||||
};
|
||||
"22".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-22-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-22/google_apis/armeabi-v7a";
|
||||
revision = "22-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-22_r24.zip";
|
||||
sha1 = "d2b7ca5f8259c6e4b3cfa5a0d77e4a088899cfb0";
|
||||
};
|
||||
};
|
||||
"22".google_apis."x86_64" = {
|
||||
name = "system-image-22-google_apis-x86_64";
|
||||
path = "system-images/android-22/google_apis/x86_64";
|
||||
revision = "22-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-22_r24.zip";
|
||||
sha1 = "cde738f9353606af69ad7b4e625c957a4d603f27";
|
||||
};
|
||||
};
|
||||
"23".google_apis."x86" = {
|
||||
name = "system-image-23-google_apis-x86";
|
||||
path = "system-images/android-23/google_apis/x86";
|
||||
revision = "23-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-23_r31.zip";
|
||||
sha1 = "877cf79f5198fa53351eab08ba9ce162dc84f7ba";
|
||||
};
|
||||
};
|
||||
"23".google_apis."x86_64" = {
|
||||
name = "system-image-23-google_apis-x86_64";
|
||||
path = "system-images/android-23/google_apis/x86_64";
|
||||
revision = "23-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-23_r31.zip";
|
||||
sha1 = "342c39df061804ee0d5bc671147e90dead3d6665";
|
||||
};
|
||||
};
|
||||
"23".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-23-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-23/google_apis/armeabi-v7a";
|
||||
revision = "23-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-23_r31.zip";
|
||||
sha1 = "da0a07800b4eec53fcdb2e5c3b69a9a5d7a6b8a6";
|
||||
};
|
||||
};
|
||||
"24".google_apis."x86" = {
|
||||
name = "system-image-24-google_apis-x86";
|
||||
path = "system-images/android-24/google_apis/x86";
|
||||
revision = "24-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-24_r25.zip";
|
||||
sha1 = "53dba25eed8359aba394a1be1c7ccb741a459ec0";
|
||||
};
|
||||
};
|
||||
"24".google_apis."x86_64" = {
|
||||
name = "system-image-24-google_apis-x86_64";
|
||||
path = "system-images/android-24/google_apis/x86_64";
|
||||
revision = "24-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-24_r25.zip";
|
||||
sha1 = "d757dd13ad9b0ba4dd872660e31b6506f60dcf32";
|
||||
};
|
||||
};
|
||||
"24".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-24-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-24/google_apis/armeabi-v7a";
|
||||
revision = "24-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-24_r25.zip";
|
||||
sha1 = "9a0ec5e9a239a7a6889364e44e9fa4fcd0052c6b";
|
||||
};
|
||||
};
|
||||
"24".google_apis."arm64-v8a" = {
|
||||
name = "system-image-24-google_apis-arm64-v8a";
|
||||
path = "system-images/android-24/google_apis/arm64-v8a";
|
||||
revision = "24-google_apis-arm64-v8a";
|
||||
displayName = "Google APIs ARM 64 v8a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/arm64-v8a-24_r25.zip";
|
||||
sha1 = "5ff407d439e3c595ce9221f445a31dcc35df5a86";
|
||||
};
|
||||
};
|
||||
"25".google_apis."x86" = {
|
||||
name = "system-image-25-google_apis-x86";
|
||||
path = "system-images/android-25/google_apis/x86";
|
||||
revision = "25-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-25_r16.zip";
|
||||
sha1 = "562e3335c6334b8d1947bb9efb90f8d82f2d3e4d";
|
||||
};
|
||||
};
|
||||
"25".google_apis."x86_64" = {
|
||||
name = "system-image-25-google_apis-x86_64";
|
||||
path = "system-images/android-25/google_apis/x86_64";
|
||||
revision = "25-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-25_r16.zip";
|
||||
sha1 = "e08b94903631d58964467b0b310c93642d85df6c";
|
||||
};
|
||||
};
|
||||
"25".google_apis."armeabi-v7a" = {
|
||||
name = "system-image-25-google_apis-armeabi-v7a";
|
||||
path = "system-images/android-25/google_apis/armeabi-v7a";
|
||||
revision = "25-google_apis-armeabi-v7a";
|
||||
displayName = "Google APIs ARM EABI v7a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-25_r16.zip";
|
||||
sha1 = "4c49e0edb845b0bf1f231cb0e8598b1a9f9aa9c8";
|
||||
};
|
||||
};
|
||||
"25".google_apis."arm64-v8a" = {
|
||||
name = "system-image-25-google_apis-arm64-v8a";
|
||||
path = "system-images/android-25/google_apis/arm64-v8a";
|
||||
revision = "25-google_apis-arm64-v8a";
|
||||
displayName = "Google APIs ARM 64 v8a System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/arm64-v8a-25_r16.zip";
|
||||
sha1 = "33ffbd335d9a6dc8d9843469d0963091566b3167";
|
||||
};
|
||||
};
|
||||
"26".google_apis."x86" = {
|
||||
name = "system-image-26-google_apis-x86";
|
||||
path = "system-images/android-26/google_apis/x86";
|
||||
revision = "26-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-26_r14.zip";
|
||||
sha1 = "935da6794d5f64f7ae20a1f352929cb7e3b20cba";
|
||||
};
|
||||
};
|
||||
"26".google_apis."x86_64" = {
|
||||
name = "system-image-26-google_apis-x86_64";
|
||||
path = "system-images/android-26/google_apis/x86_64";
|
||||
revision = "26-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-26_r14.zip";
|
||||
sha1 = "965631f0554ca9027ac465ba147baa6a6a22fcce";
|
||||
};
|
||||
};
|
||||
"27".google_apis."x86" = {
|
||||
name = "system-image-27-google_apis-x86";
|
||||
path = "system-images/android-27/google_apis/x86";
|
||||
revision = "27-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-27_r09.zip";
|
||||
sha1 = "ab009fc1308ded01539af4f8233b252d411145bc";
|
||||
};
|
||||
};
|
||||
"28".google_apis."x86" = {
|
||||
name = "system-image-28-google_apis-x86";
|
||||
path = "system-images/android-28/google_apis/x86";
|
||||
revision = "28-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-28_r09.zip";
|
||||
sha1 = "7c84ba5cbc009132ce38df52830c17b9bffc54bb";
|
||||
};
|
||||
};
|
||||
"28".google_apis."x86_64" = {
|
||||
name = "system-image-28-google_apis-x86_64";
|
||||
path = "system-images/android-28/google_apis/x86_64";
|
||||
revision = "28-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-28_r09.zip";
|
||||
sha1 = "eeb066346d29194e5b9387a0c0dd0f9e2a570b70";
|
||||
};
|
||||
};
|
||||
"29".google_apis."x86" = {
|
||||
name = "system-image-29-google_apis-x86";
|
||||
path = "system-images/android-29/google_apis/x86";
|
||||
revision = "29-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-29_r09.zip";
|
||||
sha1 = "33d71d17138ea322dec2dea6d8198aebf4767ab3";
|
||||
};
|
||||
};
|
||||
"29".google_apis."x86_64" = {
|
||||
name = "system-image-29-google_apis-x86_64";
|
||||
path = "system-images/android-29/google_apis/x86_64";
|
||||
revision = "29-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-29_r09.zip";
|
||||
sha1 = "0aa76b20a7ad30f2e41bc21b897b848d82533d26";
|
||||
};
|
||||
};
|
||||
"R".google_apis."x86" = {
|
||||
name = "system-image-R-google_apis-x86";
|
||||
path = "system-images/android-R/google_apis/x86";
|
||||
revision = "R-google_apis-x86";
|
||||
displayName = "Google APIs Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86-R_r01.zip";
|
||||
sha1 = "4e260bef94760eecba3224b68c1a4fed0fb89485";
|
||||
};
|
||||
};
|
||||
"R".google_apis."x86_64" = {
|
||||
name = "system-image-R-google_apis-x86_64";
|
||||
path = "system-images/android-R/google_apis/x86_64";
|
||||
revision = "R-google_apis-x86_64";
|
||||
displayName = "Google APIs Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis/x86_64-R_r01.zip";
|
||||
sha1 = "ae12e1c3e1b36043a299359850e9315f47262f81";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
{fetchurl}:
|
||||
|
||||
{
|
||||
"24".google_apis_playstore."x86" = {
|
||||
name = "system-image-24-google_apis_playstore-x86";
|
||||
path = "system-images/android-24/google_apis_playstore/x86";
|
||||
revision = "24-google_apis_playstore-x86";
|
||||
displayName = "Google Play Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86-24_r19.zip";
|
||||
sha1 = "b52e9593ffdde65c1a0970256a32e8967c89cc22";
|
||||
};
|
||||
};
|
||||
"25".google_apis_playstore."x86" = {
|
||||
name = "system-image-25-google_apis_playstore-x86";
|
||||
path = "system-images/android-25/google_apis_playstore/x86";
|
||||
revision = "25-google_apis_playstore-x86";
|
||||
displayName = "Google Play Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86-25_r09.zip";
|
||||
sha1 = "6f6668954f7fd52f896fe7528aa122028c9b026c";
|
||||
};
|
||||
};
|
||||
"26".google_apis_playstore."x86" = {
|
||||
name = "system-image-26-google_apis_playstore-x86";
|
||||
path = "system-images/android-26/google_apis_playstore/x86";
|
||||
revision = "26-google_apis_playstore-x86";
|
||||
displayName = "Google Play Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86-26_r07.zip";
|
||||
sha1 = "2c8bee7b97a309f099941532e63c42a7d4a06e19";
|
||||
};
|
||||
};
|
||||
"27".google_apis_playstore."x86" = {
|
||||
name = "system-image-27-google_apis_playstore-x86";
|
||||
path = "system-images/android-27/google_apis_playstore/x86";
|
||||
revision = "27-google_apis_playstore-x86";
|
||||
displayName = "Google Play Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86-27_r03.zip";
|
||||
sha1 = "eb5a944ceb691ca0648d0a6f0d93893a47223b5d";
|
||||
};
|
||||
};
|
||||
"28".google_apis_playstore."x86" = {
|
||||
name = "system-image-28-google_apis_playstore-x86";
|
||||
path = "system-images/android-28/google_apis_playstore/x86";
|
||||
revision = "28-google_apis_playstore-x86";
|
||||
displayName = "Google Play Intel x86 Atom System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86-28_r08.zip";
|
||||
sha1 = "5381f9d52a3bf1967c9c92a25b20012cd68764c8";
|
||||
};
|
||||
};
|
||||
"28".google_apis_playstore."x86_64" = {
|
||||
name = "system-image-28-google_apis_playstore-x86_64";
|
||||
path = "system-images/android-28/google_apis_playstore/x86_64";
|
||||
revision = "28-google_apis_playstore-x86_64";
|
||||
displayName = "Google Play Intel x86 Atom_64 System Image";
|
||||
archives.all = fetchurl {
|
||||
url = "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-28_r08.zip";
|
||||
sha1 = "a767da996fdea7a1f5632a9206fa5c009d6e580c";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{deployAndroidPackage, lib, package, os, autoPatchelfHook, pkgs}:
|
||||
|
||||
deployAndroidPackage {
|
||||
inherit package os;
|
||||
buildInputs = [ autoPatchelfHook ]
|
||||
++ lib.optional (os == "linux") [ pkgs.glibc pkgs.stdenv.cc.cc pkgs.zlib pkgs.openssl_1_0_2.out pkgs.ncurses5 ];
|
||||
patchInstructions = lib.optionalString (os == "linux") ''
|
||||
addAutoPatchelfSearchPath $packageBaseDir/lib
|
||||
autoPatchelf $packageBaseDir/lib
|
||||
autoPatchelf $packageBaseDir/bin
|
||||
'';
|
||||
}
|
||||
321
pkgs/development/mobile/androidenv/mkrepo.rb
Normal file
321
pkgs/development/mobile/androidenv/mkrepo.rb
Normal file
@@ -0,0 +1,321 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'json'
|
||||
require 'nokogiri'
|
||||
require 'slop'
|
||||
|
||||
# Returns a repo URL for a given package name.
|
||||
def repo_url value
|
||||
if value && value.start_with?('http')
|
||||
value
|
||||
elsif value
|
||||
"https://dl.google.com/android/repository/#{value}"
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
# Returns a system image URL for a given system image name.
|
||||
def image_url value, dir
|
||||
if value && value.start_with?('http')
|
||||
value
|
||||
elsif value
|
||||
"https://dl.google.com/android/repository/sys-img/#{dir}/#{value}"
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
# Returns a tuple of [type, revision, revision components] for a package node.
|
||||
def package_revision package
|
||||
type_details = package.at_css('> type-details')
|
||||
type = type_details.attributes['type']
|
||||
type &&= type.value
|
||||
|
||||
revision = nil
|
||||
components = nil
|
||||
|
||||
case type
|
||||
when 'generic:genericDetailsType', 'addon:extraDetailsType', 'addon:mavenType'
|
||||
major = text package.at_css('> revision > major')
|
||||
minor = text package.at_css('> revision > minor')
|
||||
micro = text package.at_css('> revision > micro')
|
||||
preview = text package.at_css('> revision > preview')
|
||||
|
||||
revision = ''
|
||||
components = []
|
||||
unless empty?(major)
|
||||
revision << major
|
||||
components << major
|
||||
end
|
||||
|
||||
unless empty?(minor)
|
||||
revision << ".#{minor}"
|
||||
components << minor
|
||||
end
|
||||
|
||||
unless empty?(micro)
|
||||
revision << ".#{micro}"
|
||||
components << micro
|
||||
end
|
||||
|
||||
unless empty?(preview)
|
||||
revision << "-rc#{preview}"
|
||||
components << preview
|
||||
end
|
||||
when 'sdk:platformDetailsType'
|
||||
codename = text type_details.at_css('> codename')
|
||||
api_level = text type_details.at_css('> api-level')
|
||||
revision = empty?(codename) ? api_level : codename
|
||||
components = [revision]
|
||||
when 'sdk:sourceDetailsType'
|
||||
api_level = text type_details.at_css('> api-level')
|
||||
revision, components = api_level, [api_level]
|
||||
when 'sys-img:sysImgDetailsType'
|
||||
codename = text type_details.at_css('> codename')
|
||||
api_level = text type_details.at_css('> api-level')
|
||||
id = text type_details.at_css('> tag > id')
|
||||
abi = text type_details.at_css('> abi')
|
||||
|
||||
revision = ''
|
||||
components = []
|
||||
if empty?(codename)
|
||||
revision << api_level
|
||||
components << api_level
|
||||
else
|
||||
revision << codename
|
||||
components << codename
|
||||
end
|
||||
|
||||
unless empty?(id)
|
||||
revision << "-#{id}"
|
||||
components << id
|
||||
end
|
||||
|
||||
unless empty?(abi)
|
||||
revision << "-#{abi}"
|
||||
components << abi
|
||||
end
|
||||
when 'addon:addonDetailsType' then
|
||||
api_level = text type_details.at_css('> api-level')
|
||||
id = text type_details.at_css('> tag > id')
|
||||
revision = api_level
|
||||
components = [api_level, id]
|
||||
end
|
||||
|
||||
[type, revision, components]
|
||||
end
|
||||
|
||||
# Returns a hash of archives for the specified package node.
|
||||
def package_archives package
|
||||
archives = {}
|
||||
package.css('> archives > archive').each do |archive|
|
||||
host_os = text archive.at_css('> host-os')
|
||||
host_os = 'all' if empty?(host_os)
|
||||
archives[host_os] = {
|
||||
'size' => Integer(text(archive.at_css('> complete > size'))),
|
||||
'sha1' => text(archive.at_css('> complete > checksum')),
|
||||
'url' => yield(text(archive.at_css('> complete > url')))
|
||||
}
|
||||
end
|
||||
archives
|
||||
end
|
||||
|
||||
# Returns the text from a node, or nil.
|
||||
def text node
|
||||
node ? node.text : nil
|
||||
end
|
||||
|
||||
# Nil or empty helper.
|
||||
def empty? value
|
||||
!value || value.empty?
|
||||
end
|
||||
|
||||
# Fixes up returned hashes by sorting keys.
|
||||
# Will also convert archives (e.g. {'linux' => {'sha1' => ...}, 'macosx' => ...} to
|
||||
# [{'os' => 'linux', 'sha1' => ...}, {'os' => 'macosx', ...}, ...].
|
||||
def fixup value
|
||||
Hash[value.map do |k, v|
|
||||
if k == 'archives' && v.is_a?(Hash)
|
||||
[k, v.map do |os, archive|
|
||||
fixup({'os' => os}.merge(archive))
|
||||
end]
|
||||
elsif v.is_a?(Hash)
|
||||
[k, fixup(v)]
|
||||
else
|
||||
[k, v]
|
||||
end
|
||||
end.sort {|(k1, v1), (k2, v2)| k1 <=> k2}]
|
||||
end
|
||||
|
||||
# Normalize the specified license text.
|
||||
# See: https://brash-snapper.glitch.me/ for how the munging works.
|
||||
def normalize_license license
|
||||
license = license.dup
|
||||
license.gsub!(/([^\n])\n([^\n])/m, '\1 \2')
|
||||
license.gsub!(/ +/, ' ')
|
||||
license
|
||||
end
|
||||
|
||||
# Gets all license texts, deduplicating them.
|
||||
def get_licenses doc
|
||||
licenses = {}
|
||||
doc.css('license[type="text"]').each do |license_node|
|
||||
license_id = license_node['id']
|
||||
if license_id
|
||||
licenses[license_id] ||= []
|
||||
licenses[license_id] |= [normalize_license(text(license_node))]
|
||||
end
|
||||
end
|
||||
licenses
|
||||
end
|
||||
|
||||
def parse_package_xml doc
|
||||
licenses = get_licenses doc
|
||||
packages = {}
|
||||
|
||||
doc.css('remotePackage').each do |package|
|
||||
name, _, version = package['path'].partition(';')
|
||||
next if version == 'latest'
|
||||
|
||||
type, revision, _ = package_revision(package)
|
||||
next unless revision
|
||||
|
||||
path = package['path'].tr(';', '/')
|
||||
display_name = text package.at_css('> display-name')
|
||||
uses_license = package.at_css('> uses-license')
|
||||
uses_license &&= uses_license['ref']
|
||||
archives = package_archives(package) {|url| repo_url url}
|
||||
|
||||
target = (packages[name] ||= {})
|
||||
target = (target[revision] ||= {})
|
||||
|
||||
target['name'] ||= name
|
||||
target['path'] ||= path
|
||||
target['revision'] ||= revision
|
||||
target['displayName'] ||= display_name
|
||||
target['license'] ||= uses_license if uses_license
|
||||
target['archives'] ||= {}
|
||||
merge target['archives'], archives
|
||||
end
|
||||
|
||||
[licenses, packages]
|
||||
end
|
||||
|
||||
def parse_image_xml doc
|
||||
licenses = get_licenses doc
|
||||
images = {}
|
||||
|
||||
doc.css('remotePackage[path^="system-images;"]').each do |package|
|
||||
type, revision, components = package_revision(package)
|
||||
next unless revision
|
||||
|
||||
path = package['path'].tr(';', '/')
|
||||
display_name = text package.at_css('> display-name')
|
||||
uses_license = package.at_css('> uses-license')
|
||||
uses_license &&= uses_license['ref']
|
||||
archives = package_archives(package) {|url| image_url url, components[-2]}
|
||||
|
||||
target = images
|
||||
components.each do |component|
|
||||
target = (target[component] ||= {})
|
||||
end
|
||||
|
||||
target['name'] ||= "system-image-#{revision}"
|
||||
target['path'] ||= path
|
||||
target['revision'] ||= revision
|
||||
target['displayName'] ||= display_name
|
||||
target['license'] ||= uses_license if uses_license
|
||||
target['archives'] ||= {}
|
||||
merge target['archives'], archives
|
||||
end
|
||||
|
||||
[licenses, images]
|
||||
end
|
||||
|
||||
def parse_addon_xml doc
|
||||
licenses = get_licenses doc
|
||||
addons, extras = {}, {}
|
||||
|
||||
doc.css('remotePackage').each do |package|
|
||||
type, revision, components = package_revision(package)
|
||||
next unless revision
|
||||
|
||||
path = package['path'].tr(';', '/')
|
||||
display_name = text package.at_css('> display-name')
|
||||
uses_license = package.at_css('> uses-license')
|
||||
uses_license &&= uses_license['ref']
|
||||
archives = package_archives(package) {|url| repo_url url}
|
||||
|
||||
case type
|
||||
when 'addon:addonDetailsType'
|
||||
name = components.last
|
||||
target = addons
|
||||
|
||||
# Hack for Google APIs 25 r1, which displays as 23 for some reason
|
||||
archive_name = text package.at_css('> archives > archive > complete > url')
|
||||
if archive_name == 'google_apis-25_r1.zip'
|
||||
path = 'add-ons/addon-google_apis-google-25'
|
||||
revision = '25'
|
||||
components = [revision, components.last]
|
||||
end
|
||||
when 'addon:extraDetailsType', 'addon:mavenType'
|
||||
name = package['path'].tr(';', '-')
|
||||
components = [package['path']]
|
||||
target = extras
|
||||
end
|
||||
|
||||
components.each do |component|
|
||||
target = (target[component] ||= {})
|
||||
end
|
||||
|
||||
target['name'] ||= name
|
||||
target['path'] ||= path
|
||||
target['revision'] ||= revision
|
||||
target['displayName'] ||= display_name
|
||||
target['license'] ||= uses_license if uses_license
|
||||
target['archives'] ||= {}
|
||||
merge target['archives'], archives
|
||||
end
|
||||
|
||||
[licenses, addons, extras]
|
||||
end
|
||||
|
||||
def merge dest, src
|
||||
dest.merge! src
|
||||
end
|
||||
|
||||
opts = Slop.parse do |o|
|
||||
o.array '-p', '--packages', 'packages repo XMLs to parse'
|
||||
o.array '-i', '--images', 'system image repo XMLs to parse'
|
||||
o.array '-a', '--addons', 'addon repo XMLs to parse'
|
||||
end
|
||||
|
||||
result = {
|
||||
licenses: {},
|
||||
packages: {},
|
||||
images: {},
|
||||
addons: {},
|
||||
extras: {}
|
||||
}
|
||||
|
||||
opts[:packages].each do |filename|
|
||||
licenses, packages = parse_package_xml(Nokogiri::XML(File.open(filename)))
|
||||
merge result[:licenses], licenses
|
||||
merge result[:packages], packages
|
||||
end
|
||||
|
||||
opts[:images].each do |filename|
|
||||
licenses, images = parse_image_xml(Nokogiri::XML(File.open(filename)))
|
||||
merge result[:licenses], licenses
|
||||
merge result[:images], images
|
||||
end
|
||||
|
||||
opts[:addons].each do |filename|
|
||||
licenses, addons, extras = parse_addon_xml(Nokogiri::XML(File.open(filename)))
|
||||
merge result[:licenses], licenses
|
||||
merge result[:addons], addons
|
||||
merge result[:extras], extras
|
||||
end
|
||||
|
||||
puts JSON.pretty_generate(fixup(result))
|
||||
19
pkgs/development/mobile/androidenv/mkrepo.sh
Executable file
19
pkgs/development/mobile/androidenv/mkrepo.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p "ruby.withPackages (pkgs: with pkgs; [ slop nokogiri ])"
|
||||
|
||||
set -e
|
||||
|
||||
pushd "$(dirname "$0")" &>/dev/null || exit 1
|
||||
|
||||
echo "Writing repo.json" >&2
|
||||
ruby mkrepo.rb \
|
||||
--packages ./xml/repository2-1.xml \
|
||||
--images ./xml/android-sys-img2-1.xml \
|
||||
--images ./xml/android-tv-sys-img2-1.xml \
|
||||
--images ./xml/android-wear-cn-sys-img2-1.xml \
|
||||
--images ./xml/android-wear-sys-img2-1.xml \
|
||||
--images ./xml/google_apis-sys-img2-1.xml \
|
||||
--images ./xml/google_apis_playstore-sys-img2-1.xml \
|
||||
--addons ./xml/addon2-1.xml > repo.json
|
||||
|
||||
popd &>/dev/null
|
||||
@@ -9,14 +9,14 @@ let
|
||||
in
|
||||
deployAndroidPackage {
|
||||
inherit package os;
|
||||
buildInputs = [ autoPatchelfHook makeWrapper pkgs.python2 ]
|
||||
++ lib.optional (os == "linux") [ pkgs.glibc pkgs.stdenv.cc.cc pkgs.ncurses5 pkgs.zlib pkgs.libcxx.out ];
|
||||
nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
|
||||
buildInputs = lib.optional (os == "linux") [ pkgs.glibc pkgs.stdenv.cc.cc pkgs.python2 pkgs.ncurses5 pkgs.zlib pkgs.libcxx.out pkgs.libxml2 ];
|
||||
patchInstructions = lib.optionalString (os == "linux") (''
|
||||
patchShebangs .
|
||||
|
||||
'' + lib.optionalString (builtins.compareVersions (lib.getVersion package) "21" > 0) ''
|
||||
patch -p1 \
|
||||
--no-backup-if-mismatch < ${./make_standalone_toolchain.py_18.patch}
|
||||
--no-backup-if-mismatch < ${./make_standalone_toolchain.py_18.patch} || true
|
||||
wrapProgram $(pwd)/build/tools/make_standalone_toolchain.py --prefix PATH : "${runtime_paths}"
|
||||
'' + ''
|
||||
|
||||
@@ -24,33 +24,35 @@ deployAndroidPackage {
|
||||
rm -rf docs tests
|
||||
|
||||
# Patch the executables of the toolchains, but not the libraries -- they are needed for crosscompiling
|
||||
if [ -d $out/libexec/android-sdk/ndk-bundle/toolchains/renderscript/prebuilt/linux-x86_64/lib64 ]; then
|
||||
addAutoPatchelfSearchPath $out/libexec/android-sdk/ndk-bundle/toolchains/renderscript/prebuilt/linux-x86_64/lib64
|
||||
fi
|
||||
|
||||
addAutoPatchelfSearchPath $out/libexec/android-sdk/ndk-bundle/toolchains/renderscript/prebuilt/linux-x86_64/lib64
|
||||
find toolchains -type d -name bin | while read dir
|
||||
do
|
||||
if [ -d $out/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/lib64 ]; then
|
||||
addAutoPatchelfSearchPath $out/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/lib64
|
||||
fi
|
||||
|
||||
find toolchains -type d -name bin -or -name lib64 | while read dir; do
|
||||
autoPatchelf "$dir"
|
||||
done
|
||||
|
||||
# fix ineffective PROGDIR / MYNDKDIR determination
|
||||
for i in ndk-build
|
||||
do
|
||||
sed -i -e 's|^PROGDIR=`dirname $0`|PROGDIR=`dirname $(readlink -f $(which $0))`|' $i
|
||||
for progname in ndk-build; do
|
||||
sed -i -e 's|^PROGDIR=`dirname $0`|PROGDIR=`dirname $(readlink -f $(which $0))`|' $progname
|
||||
done
|
||||
|
||||
# Patch executables
|
||||
autoPatchelf prebuilt/linux-x86_64
|
||||
|
||||
# wrap
|
||||
for i in ndk-build
|
||||
do
|
||||
wrapProgram "$(pwd)/$i" --prefix PATH : "${runtime_paths}"
|
||||
for progname in ndk-build; do
|
||||
wrapProgram "$(pwd)/$progname" --prefix PATH : "${runtime_paths}"
|
||||
done
|
||||
|
||||
# make some executables available in PATH
|
||||
mkdir -p $out/bin
|
||||
for i in ndk-build
|
||||
do
|
||||
ln -sf ../libexec/android-sdk/ndk-bundle/$i $out/bin/$i
|
||||
for progname in ndk-build; do
|
||||
ln -sf ../libexec/android-sdk/ndk-bundle/$progname $out/bin/$progname
|
||||
done
|
||||
'');
|
||||
noAuditTmpdir = true; # Audit script gets invoked by the build/ component in the path for the make standalone script
|
||||
|
||||
36
pkgs/development/mobile/androidenv/querypackages.sh
Normal file → Executable file
36
pkgs/development/mobile/androidenv/querypackages.sh
Normal file → Executable file
@@ -1,27 +1,23 @@
|
||||
#!/bin/sh -e
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p jq
|
||||
|
||||
if [ "$1" = "" ]
|
||||
then
|
||||
echo "Please select a package set: 'packages', 'addons', 'system-images'" >&2
|
||||
set -e
|
||||
|
||||
pushd "$(dirname "$0")" &>/dev/null || exit 1
|
||||
|
||||
if [ "$1" == '' ]; then
|
||||
echo "Please select a group: 'packages', 'images', 'addons', 'extras', or 'licenses'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$2" = "" ]
|
||||
then
|
||||
echo "Please select a package group:" >&2
|
||||
( cat <<EOF
|
||||
builtins.attrNames (import ./generated/$1.nix {
|
||||
fetchurl = null;
|
||||
})
|
||||
EOF
|
||||
) | nix-instantiate --eval-only -
|
||||
namespace="$1"
|
||||
|
||||
exit 1
|
||||
if [ "$namespace" == 'licenses' ]; then
|
||||
jq -r '.licenses | keys | join("\n")' < repo.json
|
||||
else
|
||||
jq -r --arg NAMESPACE "$namespace" \
|
||||
'.[$NAMESPACE] | paths as $path | getpath($path) as $v | select($path[-1] == "displayName") | [[$NAMESPACE] + $path[:-1] | map("\"" + . + "\"") | join("."), $v] | join(": ")' \
|
||||
< repo.json
|
||||
fi
|
||||
|
||||
( cat <<EOF
|
||||
builtins.attrNames (import ./generated/$1.nix {
|
||||
fetchurl = null;
|
||||
}).$2
|
||||
EOF
|
||||
) | nix-instantiate --eval-only -
|
||||
popd &>/dev/null
|
||||
|
||||
5343
pkgs/development/mobile/androidenv/repo.json
Normal file
5343
pkgs/development/mobile/androidenv/repo.json
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user