Module: Ruflet::CLI::AndroidSdk
- Included in:
- BuildCommand, ExtraCommand
- Defined in:
- lib/ruflet/cli/android_sdk.rb
Overview
Provisions the Android toolchain so ‘ruflet build apk|aab|android` works on a fresh machine:
* a JDK (Gradle itself is bootstrapped by the project's Gradle
wrapper, but the wrapper needs Java)
* the Android SDK command-line tools
* platform-tools / a platform / build-tools via sdkmanager
* accepted SDK licenses
An existing SDK (ANDROID_HOME, ANDROID_SDK_ROOT, or the standard per-OS install location) is always preferred; otherwise a Ruflet-managed SDK is created under ~/.ruflet/android-sdk.
Constant Summary collapse
- CMDLINE_TOOLS_VERSION =
"11076708"- CMDLINE_TOOLS_BASE =
"https://dl.google.com/android/repository".freeze
- ANDROID_PLATFORM =
"android-35"- ANDROID_BUILD_TOOLS =
"35.0.0"- MINIMUM_JAVA_MAJOR =
17- JDK_PACKAGES =
{ apt: "openjdk-17-jdk", dnf: "java-17-openjdk-devel", pacman: "jdk17-openjdk", zypper: "java-17-openjdk-devel", apk: "openjdk17", brew: "openjdk@17", winget: "EclipseAdoptium.Temurin.17.JDK", choco: "temurin17" }.freeze
Instance Method Summary collapse
-
#android_build_env(env) ⇒ Object
Environment for invoking Flutter/Gradle Android builds.
- #android_environment_setup!(fix: false, verbose: false) ⇒ Object
- #detect_android_sdk_root ⇒ Object
- #managed_android_sdk_root ⇒ Object
Instance Method Details
#android_build_env(env) ⇒ Object
Environment for invoking Flutter/Gradle Android builds.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/ruflet/cli/android_sdk.rb', line 83 def android_build_env(env) merged = env.dup sdk_root = detect_android_sdk_root if sdk_root merged["ANDROID_HOME"] ||= sdk_root merged["ANDROID_SDK_ROOT"] ||= sdk_root platform_tools = File.join(sdk_root, "platform-tools") if Dir.exist?(platform_tools) merged["PATH"] = "#{platform_tools}#{File::PATH_SEPARATOR}#{merged.fetch('PATH', ENV.fetch('PATH', ''))}" end end java_home = detect_java_home merged["JAVA_HOME"] ||= java_home if java_home merged end |
#android_environment_setup!(fix: false, verbose: false) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/ruflet/cli/android_sdk.rb', line 40 def android_environment_setup!(fix: false, verbose: false) issues = [] java = ensure_java!(fix: fix, verbose: verbose) if java puts " Java: #{java[:version]} (#{java[:path]})" else issues << "missing JDK #{MINIMUM_JAVA_MAJOR}+" warn " Java: missing — Android builds need a JDK (Gradle wrapper requirement)." warn " #{jdk_install_hint}" return issues unless fix end sdk_root = detect_android_sdk_root if sdk_root puts " Android SDK: #{sdk_root}" elsif fix unless java warn " Android SDK: skipped (sdkmanager needs Java)" return issues end sdk_root = install_managed_android_sdk(java, verbose: verbose) unless sdk_root issues << "Android SDK install failed" warn " Android SDK: install failed" return issues end puts " Android SDK: #{sdk_root} (installed)" else issues << "missing Android SDK" warn " Android SDK: missing — run `ruflet doctor --fix` to install it under #{managed_android_sdk_root}." return issues end if fix && java ensure_android_packages(sdk_root, java, verbose: verbose) accept_android_licenses(sdk_root, java, verbose: verbose) end issues end |
#detect_android_sdk_root ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/ruflet/cli/android_sdk.rb', line 99 def detect_android_sdk_root candidates = [ ENV["ANDROID_HOME"], ENV["ANDROID_SDK_ROOT"], default_android_sdk_location, managed_android_sdk_root ] candidates.compact.find { |root| android_sdk_present?(root) } end |
#managed_android_sdk_root ⇒ Object
109 110 111 |
# File 'lib/ruflet/cli/android_sdk.rb', line 109 def managed_android_sdk_root File.join(Dir.home, ".ruflet", "android-sdk") end |