androidenv: fix problem with avdmanager when trying to create an avd
To do so, we gathered different system images with the same abiVersion in the same derivation.
This commit is contained in:
@@ -185,20 +185,36 @@ rec {
|
||||
|
||||
system-images = lib.flatten (map (apiVersion:
|
||||
map (type:
|
||||
map (abiVersion:
|
||||
lib.optionals (lib.hasAttrByPath [apiVersion type abiVersion] system-images-packages) (
|
||||
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) ''
|
||||
# Deploy all system images with the same systemImageType in one derivation to avoid the `null` problem below
|
||||
# with avdmanager when trying to create an avd!
|
||||
#
|
||||
# $ yes "" | avdmanager create avd --force --name testAVD --package 'system-images;android-33;google_apis;x86_64'
|
||||
# Error: Package path is not valid. Valid system image paths are:
|
||||
# null
|
||||
let
|
||||
availablePackages = map (abiVersion:
|
||||
system-images-packages.${apiVersion}.${type}.${abiVersion}
|
||||
) (builtins.filter (abiVersion:
|
||||
lib.hasAttrByPath [apiVersion type abiVersion] system-images-packages
|
||||
) abiVersions);
|
||||
|
||||
instructions = builtins.listToAttrs (map (package: {
|
||||
name = package.name;
|
||||
value = lib.optionalString (lib.hasPrefix "google_apis" type) ''
|
||||
# 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.
|
||||
sed -i '/^Addon.Vendor/d' source.properties
|
||||
'';
|
||||
}
|
||||
)
|
||||
) abiVersions
|
||||
}) availablePackages
|
||||
);
|
||||
in
|
||||
lib.optionals (availablePackages != [])
|
||||
(deployAndroidPackages {
|
||||
inherit os;
|
||||
packages = availablePackages;
|
||||
patchesInstructions = instructions;
|
||||
})
|
||||
) systemImageTypes
|
||||
) platformVersions);
|
||||
|
||||
@@ -271,8 +287,8 @@ rec {
|
||||
${lib.concatMapStrings (system-image: ''
|
||||
apiVersion=$(basename $(echo ${system-image}/libexec/android-sdk/system-images/*))
|
||||
type=$(basename $(echo ${system-image}/libexec/android-sdk/system-images/*/*))
|
||||
mkdir -p system-images/$apiVersion/$type
|
||||
ln -s ${system-image}/libexec/android-sdk/system-images/$apiVersion/$type/* system-images/$apiVersion/$type
|
||||
mkdir -p system-images/$apiVersion
|
||||
ln -s ${system-image}/libexec/android-sdk/system-images/$apiVersion/$type system-images/$apiVersion/$type
|
||||
'') images}
|
||||
'';
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ pkgs.mkShell rec {
|
||||
installed_packages_section=$(echo "''${output%%Available Packages*}" | awk 'NR>4 {print $1}')
|
||||
|
||||
packages=(
|
||||
"build-tools;30.0.3" "ndk-bundle" "platform-tools" \
|
||||
"build-tools;30.0.3" "platform-tools" \
|
||||
"platforms;android-23" "platforms;android-24" "platforms;android-25" "platforms;android-26" \
|
||||
"platforms;android-27" "platforms;android-28" "platforms;android-29" "platforms;android-30" \
|
||||
"platforms;android-31" "platforms;android-32" "platforms;android-33" \
|
||||
|
||||
Reference in New Issue
Block a user