Module: Pindo::GradleHelper
- Includes:
- BaseAndroidHelper
- Included in:
- AndroidBuildHelper
- Defined in:
- lib/pindo/module/android/gradle_helper.rb
Constant Summary collapse
- RECOMMENDED_GRADLE_VERSION =
常量定义
'7.6.4'
- MIN_GRADLE_WRAPPER_JAR_SIZE =
50KB
50_000
- DOWNLOAD_TIMEOUT =
30秒
30
Instance Method Summary collapse
- #check_gradle_files(project_path) ⇒ Object
-
#setup_gradle_wrapper_from_properties(project_path) ⇒ Object
基于gradle-wrapper.properties自动配置gradle工具.
-
#setup_gradle_wrapper_traditional(project_path) ⇒ Object
传统的gradle wrapper配置方式(作为回退方案).
- #update_build_gradle(project_path) ⇒ Object
- #update_gradle_version(project_path) ⇒ Object
-
#verify_gradle_wrapper_setup(project_path) ⇒ Object
检查gradle wrapper配置是否完整.
Methods included from BaseAndroidHelper
#build_jdk_path_from_unity_root, #check_and_replace_unity_jdk, #check_and_update_unity_jdk, #create_and_install_openjdk, #ensure_java_version_compliance, #extract_config_block_groovy, #extract_config_block_kts, #extract_keystore_fields_common, #extract_keystore_fields_groovy, #extract_keystore_fields_kts, #extract_signing_configs_groovy, #extract_signing_configs_kts, #extract_var_or_value, #find_android_subproject, #find_java11_installation, #find_java_command, #find_unity_editor_paths, #fix_store_file_path, #get_build_tools, #get_ext_values, #get_keystore_config, #get_keystore_config_groovy, #get_keystore_config_kts, #get_main_module, #install_adoptium_java_11, #install_java_11, #install_java_11_macos, #modify_il2cpp_config, #remove_desktop_google_service, #remove_groovy_comments, #remove_kts_comments, #replace_unity_jdk_with_java11, #resolve_var, #unity_android_project?, #verify_java_version
Instance Method Details
#check_gradle_files(project_path) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/pindo/module/android/gradle_helper.rb', line 15 def check_gradle_files(project_path) puts "\e[36m=== 检查Gradle Wrapper配置 ===\e[0m" # 优先使用基于gradle-wrapper.properties的自动配置 if File.exist?(File.join(project_path, "gradle/wrapper/gradle-wrapper.properties")) puts "检测到gradle-wrapper.properties文件,使用自动配置..." if setup_gradle_wrapper_from_properties(project_path) puts "\e[32m✓ 基于gradle-wrapper.properties的自动配置成功\e[0m" return true else puts "\e[33m⚠ 自动配置失败,回退到传统方式\e[0m" end end # 回退到传统的文件复制方式 puts "使用传统方式配置Gradle Wrapper..." setup_gradle_wrapper_traditional(project_path) end |
#setup_gradle_wrapper_from_properties(project_path) ⇒ Object
基于gradle-wrapper.properties自动配置gradle工具
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/pindo/module/android/gradle_helper.rb', line 125 def setup_gradle_wrapper_from_properties(project_path) wrapper_properties_path = File.join(project_path, "gradle/wrapper/gradle-wrapper.properties") unless File.exist?(wrapper_properties_path) puts "\e[33m⚠ 未找到gradle-wrapper.properties文件: #{wrapper_properties_path}\e[0m" return false end # 解析gradle-wrapper.properties文件 gradle_version = parse_gradle_version(wrapper_properties_path) if gradle_version.nil? puts "\e[31m✗ 无法解析gradle版本\e[0m" return false end puts "\e[36m=== 自动配置Gradle Wrapper ===\e[0m" puts "检测到Gradle版本: #{gradle_version}" # 确保gradle wrapper目录存在 wrapper_dir = File.join(project_path, "gradle/wrapper") FileUtils.mkdir_p(wrapper_dir) # 下载并配置gradle-wrapper.jar unless download_gradle_wrapper_jar(wrapper_dir, gradle_version) puts "\e[31m✗ 下载gradle-wrapper.jar失败\e[0m" return false end # 生成gradlew脚本 unless generate_gradlew_script(project_path) puts "\e[31m✗ 生成gradlew脚本失败\e[0m" return false end puts "\e[32m✓ Gradle Wrapper配置完成\e[0m" true end |
#setup_gradle_wrapper_traditional(project_path) ⇒ Object
传统的gradle wrapper配置方式(作为回退方案)
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/pindo/module/android/gradle_helper.rb', line 35 def setup_gradle_wrapper_traditional(project_path) # 检查是否存在 gradlew 文件 如果没有则执行复制操作 gradlew_path = File.join(project_path, "gradlew") if File.exist?(gradlew_path) puts "gradlew file already exists, skip copying." else # 复制gradle相关文件 gradlew_content = File.read(get_build_tools[:gradlew]) File.write(gradlew_path, gradlew_content) end # 设置gradlew可执行权限 system("chmod", "777", gradlew_path) wrapper_jar_path = File.join(project_path, "gradle/wrapper/gradle-wrapper.jar") if File.exist?(wrapper_jar_path) puts "gradle-wrapper.jar file already exists, skip copying." else FileUtils.mkdir_p(File.dirname(wrapper_jar_path)) gradle_wrapper_content = File.read(get_build_tools[:gradle_wrapper]) File.write(wrapper_jar_path, gradle_wrapper_content) end end |
#update_build_gradle(project_path) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/pindo/module/android/gradle_helper.rb', line 58 def update_build_gradle(project_path) # 更新build.gradle 或 build.gradle.kts build_gradle_path = File.join(project_path, "build.gradle") build_gradle_kts_path = File.join(project_path, "build.gradle.kts") # 优先使用 build.gradle.kts,如果不存在则使用 build.gradle if File.exist?(build_gradle_kts_path) build_gradle_path = build_gradle_kts_path elsif !File.exist?(build_gradle_path) return end content = File.read(build_gradle_path) content.gsub!("classpath 'com.android.tools.build:gradle:4.0.1'", "classpath 'com.android.tools.build:gradle:4.2.2'") File.write(build_gradle_path, content) end |
#update_gradle_version(project_path) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/pindo/module/android/gradle_helper.rb', line 76 def update_gradle_version(project_path) # 智能更新gradle wrapper版本 wrapper_path = File.join(project_path, "gradle/wrapper/gradle-wrapper.properties") unless File.exist?(wrapper_path) puts "\e[33m⚠ 未找到gradle-wrapper.properties文件,跳过版本更新\e[0m" return false end content = File.read(wrapper_path) original_content = content.dup # 解析当前版本 current_version = parse_gradle_version(wrapper_path) if current_version.nil? puts "\e[33m⚠ 无法解析当前Gradle版本\e[0m" return false end puts "当前Gradle版本: #{current_version}" # 根据当前版本智能选择目标版本 target_version = determine_target_gradle_version(current_version) if target_version == current_version puts "\e[32m✓ Gradle版本已是最新,无需更新\e[0m" return true end puts "更新Gradle版本: #{current_version} -> #{target_version}" # 更新版本 content.gsub!("gradle-#{current_version}-bin.zip", "gradle-#{target_version}-bin.zip") content.gsub!("gradleVersion=#{current_version}", "gradleVersion=#{target_version}") if content != original_content File.write(wrapper_path, content) puts "\e[32m✓ Gradle版本更新完成\e[0m" # 重新配置gradle wrapper setup_gradle_wrapper_from_properties(project_path) return true else puts "\e[33m⚠ Gradle版本更新失败,未找到匹配的版本字符串\e[0m" return false end end |
#verify_gradle_wrapper_setup(project_path) ⇒ Object
检查gradle wrapper配置是否完整
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/pindo/module/android/gradle_helper.rb', line 164 def verify_gradle_wrapper_setup(project_path) wrapper_dir = File.join(project_path, "gradle/wrapper") wrapper_jar_path = File.join(wrapper_dir, "gradle-wrapper.jar") gradlew_path = File.join(project_path, "gradlew") properties_path = File.join(wrapper_dir, "gradle-wrapper.properties") all_exist = File.exist?(wrapper_jar_path) && File.exist?(gradlew_path) && File.exist?(properties_path) if all_exist puts "\e[32m✓ Gradle Wrapper配置完整\e[0m" return true else puts "\e[33m⚠ Gradle Wrapper配置不完整:\e[0m" puts " gradle-wrapper.jar: #{File.exist?(wrapper_jar_path) ? '✓' : '✗'}" puts " gradlew: #{File.exist?(gradlew_path) ? '✓' : '✗'}" puts " gradle-wrapper.properties: #{File.exist?(properties_path) ? '✓' : '✗'}" return false end end |