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:
parent
80677f372f
commit
5b91d4ab65
|
@ -13,21 +13,19 @@ with import <nixpkgs> {};
|
|||
|
||||
let
|
||||
androidComposition = androidenv.composeAndroidPackages {
|
||||
toolsVersion = "25.2.5";
|
||||
platformToolsVersion = "27.0.1";
|
||||
buildToolsVersions = [ "27.0.3" ];
|
||||
toolsVersion = "26.1.1";
|
||||
platformToolsVersion = "30.0.5";
|
||||
buildToolsVersions = [ "30.0.3" ];
|
||||
includeEmulator = false;
|
||||
emulatorVersion = "27.2.0";
|
||||
platformVersions = [ "24" ];
|
||||
emulatorVersion = "30.3.4";
|
||||
platformVersions = [ "28" "29" "30" ];
|
||||
includeSources = false;
|
||||
includeDocs = false;
|
||||
includeSystemImages = false;
|
||||
systemImageTypes = [ "default" ];
|
||||
abiVersions = [ "armeabi-v7a" ];
|
||||
lldbVersions = [ "2.0.2558144" ];
|
||||
cmakeVersions = [ "3.6.4111459" ];
|
||||
includeNDK = false;
|
||||
ndkVersion = "16.1.4479499";
|
||||
systemImageTypes = [ "google_apis_playstore" ];
|
||||
abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
|
||||
cmakeVersions = [ "3.10.2" ];
|
||||
includeNDK = true;
|
||||
ndkVersion = "22.0.7026061";
|
||||
useGoogleAPIs = false;
|
||||
useGoogleTVAddOns = false;
|
||||
includeExtras = [
|
||||
|
@ -46,13 +44,11 @@ The following parameters are supported:
|
|||
|
||||
* `toolsVersion`, specifies the version of the tools package to use
|
||||
* `platformsToolsVersion` specifies the version of the `platform-tools` plugin
|
||||
* `buildToolsVersion` specifies the versions of the `build-tools` plugins to
|
||||
* `buildToolsVersions` specifies the versions of the `build-tools` plugins to
|
||||
use.
|
||||
* `includeEmulator` specifies whether to deploy the emulator package (`false`
|
||||
by default). When enabled, the version of the emulator to deploy can be
|
||||
specified by setting the `emulatorVersion` parameter.
|
||||
* `includeDocs` specifies whether the documentation catalog should be included.
|
||||
* `lldbVersions` specifies what LLDB versions should be deployed.
|
||||
* `cmakeVersions` specifies which CMake versions should be deployed.
|
||||
* `includeNDK` specifies that the Android NDK bundle should be included.
|
||||
Defaults to: `false`.
|
||||
|
@ -82,6 +78,38 @@ For each requested system image we can specify the following options:
|
|||
|
||||
Most of the function arguments have reasonable default settings.
|
||||
|
||||
You can specify license names:
|
||||
|
||||
* `extraLicenses` is a list of of license names.
|
||||
You can get these names from repo.json or `querypackages.sh licenses`. The SDK
|
||||
license (`android-sdk-license`) is accepted for you if you set accept_license
|
||||
to true. If you are doing something like working with preview SDKs, you will
|
||||
want to add `android-sdk-preview-license` or whichever license applies here.
|
||||
|
||||
Additionally, you can override the repositories that composeAndroidPackages will
|
||||
pull from:
|
||||
|
||||
* `repoJson` specifies a path to a generated repo.json file. You can generate this
|
||||
by running `generate.sh`, which in turn will call into `mkrepo.rb`.
|
||||
* `repoXmls` is an attribute set containing paths to repo XML files. If specified,
|
||||
it takes priority over `repoJson`, and will trigger a local build writing out a
|
||||
repo.json to the Nix store based on the given repository XMLs.
|
||||
|
||||
```nix
|
||||
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 ];
|
||||
};
|
||||
```
|
||||
|
||||
When building the above expression with:
|
||||
|
||||
```bash
|
||||
|
@ -104,8 +132,8 @@ in
|
|||
androidComposition.platform-tools
|
||||
```
|
||||
|
||||
Using predefine Android package compositions
|
||||
--------------------------------------------
|
||||
Using predefined Android package compositions
|
||||
---------------------------------------------
|
||||
In addition to composing an Android package set manually, it is also possible
|
||||
to use a predefined composition that contains all basic packages for a specific
|
||||
Android version, such as version 9.0 (API-level 28).
|
||||
|
@ -209,27 +237,104 @@ androidenv.emulateApp {
|
|||
In addition to prebuilt APKs, you can also bind the APK parameter to a
|
||||
`buildApp {}` function invocation shown in the previous example.
|
||||
|
||||
Notes on environment variables in Android projects
|
||||
--------------------------------------------------
|
||||
* `ANDROID_SDK_ROOT` should point to the Android SDK. In your Nix expressions, this should be
|
||||
`${androidComposition.androidsdk}/libexec/android-sdk`. Note that `ANDROID_HOME` is deprecated,
|
||||
but if you rely on tools that need it, you can export it too.
|
||||
* `ANDROID_NDK_ROOT` should point to the Android NDK, if you're doing NDK development.
|
||||
In your Nix expressions, this should be `${ANDROID_SDK_ROOT}/ndk-bundle`.
|
||||
|
||||
If you are running the Android Gradle plugin, you need to export GRADLE_OPTS to override aapt2
|
||||
to point to the aapt2 binary in the Nix store as well, or use a FHS environment so the packaged
|
||||
aapt2 can run. If you don't want to use a FHS environment, something like this should work:
|
||||
|
||||
```nix
|
||||
let
|
||||
buildToolsVersion = "30.0.3";
|
||||
|
||||
# Use buildToolsVersion when you define androidComposition
|
||||
androidComposition = <...>;
|
||||
in
|
||||
pkgs.mkShell rec {
|
||||
ANDROID_SDK_ROOT = "${androidComposition.androidsdk}/libexec/android-sdk";
|
||||
ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";
|
||||
|
||||
# Use the same buildToolsVersion here
|
||||
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${buildToolsVersion}/aapt2";
|
||||
}
|
||||
```
|
||||
|
||||
If you are using cmake, you need to add it to PATH in a shell hook or FHS env profile.
|
||||
The path is suffixed with a build number, but properly prefixed with the version.
|
||||
So, something like this should suffice:
|
||||
|
||||
```nix
|
||||
let
|
||||
cmakeVersion = "3.10.2";
|
||||
|
||||
# Use cmakeVersion when you define androidComposition
|
||||
androidComposition = <...>;
|
||||
in
|
||||
pkgs.mkShell rec {
|
||||
ANDROID_SDK_ROOT = "${androidComposition.androidsdk}/libexec/android-sdk";
|
||||
ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";
|
||||
|
||||
# Use the same cmakeVersion here
|
||||
shellHook = ''
|
||||
export PATH="$(echo "$ANDROID_SDK_ROOT/cmake/${cmakeVersion}".*/bin):$PATH"
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
Note that running Android Studio with ANDROID_SDK_ROOT set will automatically write a
|
||||
`local.properties` file with `sdk.dir` set to $ANDROID_SDK_ROOT if one does not already
|
||||
exist. If you are using the NDK as well, you may have to add `ndk.dir` to this file.
|
||||
|
||||
An example shell.nix that does all this for you is provided in examples/shell.nix.
|
||||
This shell.nix includes a shell hook that overwrites local.properties with the correct
|
||||
sdk.dir and ndk.dir values. This will ensure that the SDK and NDK directories will
|
||||
both be correct when you run Android Studio inside nix-shell.
|
||||
|
||||
Notes on improving build.gradle compatibility
|
||||
---------------------------------------------
|
||||
Ensure that your buildToolsVersion and ndkVersion match what is declared in androidenv.
|
||||
If you are using cmake, make sure its declared version is correct too.
|
||||
|
||||
Otherwise, you may get cryptic errors from aapt2 and the Android Gradle plugin warning
|
||||
that it cannot install the build tools because the SDK directory is not writeable.
|
||||
|
||||
```gradle
|
||||
android {
|
||||
buildToolsVersion "30.0.3"
|
||||
ndkVersion = "22.0.7026061"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version "3.10.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
Querying the available versions of each plugin
|
||||
----------------------------------------------
|
||||
When using any of the previously shown functions, it may be a bit inconvenient
|
||||
to find out what options are supported, since the Android SDK provides many
|
||||
plugins.
|
||||
repo.json provides all the options in one file now.
|
||||
|
||||
A shell script in the `pkgs/development/mobile/androidenv/` sub directory can be used to retrieve all
|
||||
A shell script in the `pkgs/development/mobile/androidenv/` subdirectory can be used to retrieve all
|
||||
possible options:
|
||||
|
||||
```bash
|
||||
sh ./querypackages.sh packages build-tools
|
||||
./querypackages.sh packages
|
||||
```
|
||||
|
||||
The above command-line instruction queries all build-tools versions in the
|
||||
generated `packages.nix` expression.
|
||||
The above command-line instruction queries all package versions in repo.json.
|
||||
|
||||
Updating the generated expressions
|
||||
----------------------------------
|
||||
Most of the Nix expressions are generated from XML files that the Android
|
||||
package manager uses. To update the expressions run the `generate.sh` script
|
||||
that is stored in the `pkgs/development/mobile/androidenv/` sub directory:
|
||||
repo.json is generated from XML files that the Android Studio package manager uses.
|
||||
To update the expressions run the `generate.sh` script that is stored in the
|
||||
`pkgs/development/mobile/androidenv/` subdirectory:
|
||||
|
||||
```bash
|
||||
./generate.sh
|
||||
|
|
|
@ -335,6 +335,22 @@ http://some.json-exporter.host:7979/probe?target=https://example.com/some/json/e
|
|||
official documentation</link> of the json_exporter.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Androidenv was updated, removing the <literal>includeDocs</literal> and <literal>lldbVersions</literal>
|
||||
arguments. Docs only covered a single version of the Android SDK, LLDB is now bundled with the NDK,
|
||||
and both are no longer available to download from the Android package repositories. Additionally, since
|
||||
the package lists have been updated, some older versions of Android packages may not be bundled. If you
|
||||
depend on older versions of Android packages, we recommend overriding the repo.
|
||||
</para>
|
||||
<para>
|
||||
Android packages are now loaded from a repo.json file created by parsing Android repo XML files. The arguments
|
||||
<literal>repoJson</literal> and <literal>repoXmls</literal> have been added to allow overriding the built-in
|
||||
androidenv repo.json with your own. Additionally, license files are now written to allow compatibility
|
||||
with Gradle-based tools, and the <literal>extraLicenses</literal> argument has been added to accept more
|
||||
SDK licenses if your project requires it. See the androidenv documentation for more details.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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
|
||||
'';
|
||||
}
|
||||
|
|
@ -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
|
||||
'';
|
||||
}
|
|
@ -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))
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue