Loading pkgs/development/mobile/androidenv/compose-android-packages.nix +5 −5 Original line number Diff line number Diff line Loading @@ -2,12 +2,12 @@ , licenseAccepted ? false }: { cmdLineToolsVersion ? "8.0" { cmdLineToolsVersion ? "9.0" , toolsVersion ? "26.1.1" , platformToolsVersion ? "33.0.3" , buildToolsVersions ? [ "33.0.1" ] , platformToolsVersion ? "34.0.1" , buildToolsVersions ? [ "33.0.2" ] , includeEmulator ? false , emulatorVersion ? "31.3.14" , emulatorVersion ? "33.1.6" , platformVersions ? [] , includeSources ? false , includeSystemImages ? false Loading @@ -15,7 +15,7 @@ , abiVersions ? [ "armeabi-v7a" "arm64-v8a" ] , cmakeVersions ? [ ] , includeNDK ? false , ndkVersion ? "25.1.8937393" , ndkVersion ? "25.2.9519653" , ndkVersions ? [ndkVersion] , useGoogleAPIs ? false , useGoogleTVAddOns ? false Loading pkgs/development/mobile/androidenv/examples/shell-with-emulator.nix +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ pkgs.mkShell rec { echo "installed_packages_section: ''${installed_packages_section}" packages=( "build-tools;33.0.1" "cmdline-tools;8.0" \ "build-tools;33.0.2" "cmdline-tools;9.0" \ "emulator" "patcher;v4" "platform-tools" "platforms;android-33" \ "system-images;android-33;google_apis;arm64-v8a" \ "system-images;android-33;google_apis;x86_64" Loading pkgs/development/mobile/androidenv/examples/shell.nix +7 −7 Original line number Diff line number Diff line Loading @@ -25,15 +25,15 @@ let # versions may be used in multiple places in this Nix expression. android = { versions = { cmdLineToolsVersion = "8.0"; platformTools = "33.0.3"; buildTools = "30.0.3"; cmdLineToolsVersion = "9.0"; platformTools = "34.0.1"; buildTools = "33.0.2"; ndk = [ "25.1.8937393" # LTS NDK "24.0.8215888" "25.2.9519653" ]; cmake = "3.22.1"; emulator = "31.3.14"; cmake = "3.6.4111459"; emulator = "33.1.6"; }; platforms = ["23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33"]; Loading Loading @@ -165,7 +165,7 @@ pkgs.mkShell rec { installed_packages_section=$(echo "''${output%%Available Packages*}" | awk 'NR>4 {print $1}') packages=( "build-tools;30.0.3" "platform-tools" \ "build-tools;33.0.2" "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" \ Loading pkgs/development/mobile/androidenv/mkrepo.rb +91 −20 Original line number Diff line number Diff line Loading @@ -177,8 +177,8 @@ def empty? value !value || value.empty? end # Fixes up returned hashes by sorting keys. # Will also convert archives (e.g. {'linux' => {'sha1' => ...}, 'macosx' => ...} to # Fixes up returned hashes by converting archives like # (e.g. {'linux' => {'sha1' => ...}, 'macosx' => ...} to # [{'os' => 'linux', 'sha1' => ...}, {'os' => 'macosx', ...}, ...]. def fixup value Hash[value.map do |k, v| Loading @@ -191,7 +191,35 @@ def fixup value else [k, v] end end.sort {|(k1, v1), (k2, v2)| k1 <=> k2 }] end] end # Today since Unix Epoch, January 1, 1970. def today Time.now.utc.to_i / 24 / 60 / 60 end # The expiration strategy. Expire if the last available day was before the `oldest_valid_day`. def expire_records record, oldest_valid_day if record.is_a?(Hash) if record.has_key?('last-available-day') && record['last-available-day'] < oldest_valid_day return nil end update = {} # This should only happen in the first run of this scrip after adding the `expire_record` function. if record.has_key?('displayName') && !record.has_key?('last-available-day') update['last-available-day'] = today end record.each {|key, value| v = expire_records value, oldest_valid_day update[key] = v if v } update else record end end # Normalize the specified license text. Loading Loading @@ -253,6 +281,7 @@ def parse_package_xml doc target['dependencies'] ||= dependencies if dependencies target['archives'] ||= {} merge target['archives'], archives target['last-available-day'] = today end [licenses, packages] Loading Loading @@ -294,6 +323,7 @@ def parse_image_xml doc target['dependencies'] ||= dependencies if dependencies target['archives'] ||= {} merge target['archives'], archives target['last-available-day'] = today end [licenses, images] Loading Loading @@ -351,19 +381,36 @@ def parse_addon_xml doc target['dependencies'] ||= dependencies if dependencies target['archives'] ||= {} merge target['archives'], archives target['last-available-day'] = today end [licenses, addons, extras] end # Make the clean diff by always sorting the result before puting it in the stdout. def sort_recursively value if value.is_a?(Hash) Hash[ value.map do |k, v| [k, sort_recursively(v)] end.sort_by {|(k, v)| k } ] elsif value.is_a?(Array) value.map do |v| sort_recursively(v) end else value end end def merge_recursively a, b a.merge!(b) {|key, a_item, b_item| if a_item.is_a?(Hash) && b_item.is_a?(Hash) merge_recursively(a_item, b_item) else a[key] = b_item elsif b_item != nil b_item end } a end def merge dest, src Loading @@ -376,31 +423,55 @@ opts = Slop.parse do |o| o.array '-a', '--addons', 'addon repo XMLs to parse' end result = { licenses: {}, packages: {}, images: {}, addons: {}, extras: {} } result = {} result['licenses'] = {} result['packages'] = {} result['images'] = {} result['addons'] = {} result['extras'] = {} opts[:packages].each do |filename| licenses, packages = parse_package_xml(Nokogiri::XML(File.open(filename)) { |conf| conf.noblanks }) merge result[:licenses], licenses merge result[:packages], packages merge result['licenses'], licenses merge result['packages'], packages end opts[:images].each do |filename| licenses, images = parse_image_xml(Nokogiri::XML(File.open(filename)) { |conf| conf.noblanks }) merge result[:licenses], licenses merge result[:images], images 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)) { |conf| conf.noblanks }) merge result[:licenses], licenses merge result[:addons], addons merge result[:extras], extras merge result['licenses'], licenses merge result['addons'], addons merge result['extras'], extras end # As we keep the old packages in the repo JSON file, we should have # a strategy to remove them at some point! # So with this variable we claim it's okay to remove them from the # JSON after two years that they are not available. two_years_ago = today - 2 * 365 input = {} begin input_json = (STDIN.tty?) ? "{}" : $stdin.read if input_json != nil && !input_json.empty? input = expire_records(JSON.parse(input_json), two_years_ago) end rescue JSON::ParserError => e $stderr.write(e.message) return end puts JSON.pretty_generate(fixup(result)) fixup_result = fixup(result) # Regular installation of Android SDK would keep the previously installed packages even if they are not # in the uptodate XML files, so here we try to support this logic by keeping un-available packages, # therefore the old packages will work as long as the links are working on the Google servers. output = merge input, fixup_result puts JSON.pretty_generate(sort_recursively(output)) pkgs/development/mobile/androidenv/mkrepo.sh +4 −3 Original line number Diff line number Diff line #!/usr/bin/env nix-shell #!nix-shell -i bash -p "ruby.withPackages (pkgs: with pkgs; [ slop nokogiri ])" #!nix-shell -i bash -p "ruby.withPackages (pkgs: with pkgs; [ slop nokogiri moreutils ])" set -e pushd "$(dirname "$0")" &>/dev/null || exit 1 echo "Writing repo.json" >&2 ruby mkrepo.rb \ cat ./repo.json | ruby mkrepo.rb \ --packages ./xml/repository2-1.xml \ --images ./xml/android-sys-img2-1.xml \ --images ./xml/android-tv-sys-img2-1.xml \ Loading @@ -14,6 +14,7 @@ ruby mkrepo.rb \ --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 --addons ./xml/addon2-1.xml \ | sponge repo.json popd &>/dev/null Loading
pkgs/development/mobile/androidenv/compose-android-packages.nix +5 −5 Original line number Diff line number Diff line Loading @@ -2,12 +2,12 @@ , licenseAccepted ? false }: { cmdLineToolsVersion ? "8.0" { cmdLineToolsVersion ? "9.0" , toolsVersion ? "26.1.1" , platformToolsVersion ? "33.0.3" , buildToolsVersions ? [ "33.0.1" ] , platformToolsVersion ? "34.0.1" , buildToolsVersions ? [ "33.0.2" ] , includeEmulator ? false , emulatorVersion ? "31.3.14" , emulatorVersion ? "33.1.6" , platformVersions ? [] , includeSources ? false , includeSystemImages ? false Loading @@ -15,7 +15,7 @@ , abiVersions ? [ "armeabi-v7a" "arm64-v8a" ] , cmakeVersions ? [ ] , includeNDK ? false , ndkVersion ? "25.1.8937393" , ndkVersion ? "25.2.9519653" , ndkVersions ? [ndkVersion] , useGoogleAPIs ? false , useGoogleTVAddOns ? false Loading
pkgs/development/mobile/androidenv/examples/shell-with-emulator.nix +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ pkgs.mkShell rec { echo "installed_packages_section: ''${installed_packages_section}" packages=( "build-tools;33.0.1" "cmdline-tools;8.0" \ "build-tools;33.0.2" "cmdline-tools;9.0" \ "emulator" "patcher;v4" "platform-tools" "platforms;android-33" \ "system-images;android-33;google_apis;arm64-v8a" \ "system-images;android-33;google_apis;x86_64" Loading
pkgs/development/mobile/androidenv/examples/shell.nix +7 −7 Original line number Diff line number Diff line Loading @@ -25,15 +25,15 @@ let # versions may be used in multiple places in this Nix expression. android = { versions = { cmdLineToolsVersion = "8.0"; platformTools = "33.0.3"; buildTools = "30.0.3"; cmdLineToolsVersion = "9.0"; platformTools = "34.0.1"; buildTools = "33.0.2"; ndk = [ "25.1.8937393" # LTS NDK "24.0.8215888" "25.2.9519653" ]; cmake = "3.22.1"; emulator = "31.3.14"; cmake = "3.6.4111459"; emulator = "33.1.6"; }; platforms = ["23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33"]; Loading Loading @@ -165,7 +165,7 @@ pkgs.mkShell rec { installed_packages_section=$(echo "''${output%%Available Packages*}" | awk 'NR>4 {print $1}') packages=( "build-tools;30.0.3" "platform-tools" \ "build-tools;33.0.2" "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" \ Loading
pkgs/development/mobile/androidenv/mkrepo.rb +91 −20 Original line number Diff line number Diff line Loading @@ -177,8 +177,8 @@ def empty? value !value || value.empty? end # Fixes up returned hashes by sorting keys. # Will also convert archives (e.g. {'linux' => {'sha1' => ...}, 'macosx' => ...} to # Fixes up returned hashes by converting archives like # (e.g. {'linux' => {'sha1' => ...}, 'macosx' => ...} to # [{'os' => 'linux', 'sha1' => ...}, {'os' => 'macosx', ...}, ...]. def fixup value Hash[value.map do |k, v| Loading @@ -191,7 +191,35 @@ def fixup value else [k, v] end end.sort {|(k1, v1), (k2, v2)| k1 <=> k2 }] end] end # Today since Unix Epoch, January 1, 1970. def today Time.now.utc.to_i / 24 / 60 / 60 end # The expiration strategy. Expire if the last available day was before the `oldest_valid_day`. def expire_records record, oldest_valid_day if record.is_a?(Hash) if record.has_key?('last-available-day') && record['last-available-day'] < oldest_valid_day return nil end update = {} # This should only happen in the first run of this scrip after adding the `expire_record` function. if record.has_key?('displayName') && !record.has_key?('last-available-day') update['last-available-day'] = today end record.each {|key, value| v = expire_records value, oldest_valid_day update[key] = v if v } update else record end end # Normalize the specified license text. Loading Loading @@ -253,6 +281,7 @@ def parse_package_xml doc target['dependencies'] ||= dependencies if dependencies target['archives'] ||= {} merge target['archives'], archives target['last-available-day'] = today end [licenses, packages] Loading Loading @@ -294,6 +323,7 @@ def parse_image_xml doc target['dependencies'] ||= dependencies if dependencies target['archives'] ||= {} merge target['archives'], archives target['last-available-day'] = today end [licenses, images] Loading Loading @@ -351,19 +381,36 @@ def parse_addon_xml doc target['dependencies'] ||= dependencies if dependencies target['archives'] ||= {} merge target['archives'], archives target['last-available-day'] = today end [licenses, addons, extras] end # Make the clean diff by always sorting the result before puting it in the stdout. def sort_recursively value if value.is_a?(Hash) Hash[ value.map do |k, v| [k, sort_recursively(v)] end.sort_by {|(k, v)| k } ] elsif value.is_a?(Array) value.map do |v| sort_recursively(v) end else value end end def merge_recursively a, b a.merge!(b) {|key, a_item, b_item| if a_item.is_a?(Hash) && b_item.is_a?(Hash) merge_recursively(a_item, b_item) else a[key] = b_item elsif b_item != nil b_item end } a end def merge dest, src Loading @@ -376,31 +423,55 @@ opts = Slop.parse do |o| o.array '-a', '--addons', 'addon repo XMLs to parse' end result = { licenses: {}, packages: {}, images: {}, addons: {}, extras: {} } result = {} result['licenses'] = {} result['packages'] = {} result['images'] = {} result['addons'] = {} result['extras'] = {} opts[:packages].each do |filename| licenses, packages = parse_package_xml(Nokogiri::XML(File.open(filename)) { |conf| conf.noblanks }) merge result[:licenses], licenses merge result[:packages], packages merge result['licenses'], licenses merge result['packages'], packages end opts[:images].each do |filename| licenses, images = parse_image_xml(Nokogiri::XML(File.open(filename)) { |conf| conf.noblanks }) merge result[:licenses], licenses merge result[:images], images 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)) { |conf| conf.noblanks }) merge result[:licenses], licenses merge result[:addons], addons merge result[:extras], extras merge result['licenses'], licenses merge result['addons'], addons merge result['extras'], extras end # As we keep the old packages in the repo JSON file, we should have # a strategy to remove them at some point! # So with this variable we claim it's okay to remove them from the # JSON after two years that they are not available. two_years_ago = today - 2 * 365 input = {} begin input_json = (STDIN.tty?) ? "{}" : $stdin.read if input_json != nil && !input_json.empty? input = expire_records(JSON.parse(input_json), two_years_ago) end rescue JSON::ParserError => e $stderr.write(e.message) return end puts JSON.pretty_generate(fixup(result)) fixup_result = fixup(result) # Regular installation of Android SDK would keep the previously installed packages even if they are not # in the uptodate XML files, so here we try to support this logic by keeping un-available packages, # therefore the old packages will work as long as the links are working on the Google servers. output = merge input, fixup_result puts JSON.pretty_generate(sort_recursively(output))
pkgs/development/mobile/androidenv/mkrepo.sh +4 −3 Original line number Diff line number Diff line #!/usr/bin/env nix-shell #!nix-shell -i bash -p "ruby.withPackages (pkgs: with pkgs; [ slop nokogiri ])" #!nix-shell -i bash -p "ruby.withPackages (pkgs: with pkgs; [ slop nokogiri moreutils ])" set -e pushd "$(dirname "$0")" &>/dev/null || exit 1 echo "Writing repo.json" >&2 ruby mkrepo.rb \ cat ./repo.json | ruby mkrepo.rb \ --packages ./xml/repository2-1.xml \ --images ./xml/android-sys-img2-1.xml \ --images ./xml/android-tv-sys-img2-1.xml \ Loading @@ -14,6 +14,7 @@ ruby mkrepo.rb \ --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 --addons ./xml/addon2-1.xml \ | sponge repo.json popd &>/dev/null