Class: Pindo::AndroidBuildConfigHelper
- Inherits:
-
Object
- Object
- Pindo::AndroidBuildConfigHelper
- Includes:
- BaseAndroidHelper
- Defined in:
- lib/pindo/module/android/android_build_config_helper.rb
Class Method Summary collapse
-
.add_test_scheme(project_dir: nil, scheme_name: nil) ⇒ Boolean
添加测试scheme到Android工程.
-
.update_android_project_version(project_dir: nil, version_name: nil, version_code: nil) ⇒ Boolean
更新Android工程版本号.
-
.valid_build_number?(build_number) ⇒ Boolean
验证Build号是否在有效范围内.
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
Class Method Details
.add_test_scheme(project_dir: nil, scheme_name: nil) ⇒ Boolean
添加测试scheme到Android工程
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/pindo/module/android/android_build_config_helper.rb', line 141 def self.add_test_scheme(project_dir: nil, scheme_name: nil) # 参数验证 if scheme_name.nil? Funlog.instance.("需要提供scheme名称") return false end if project_dir.nil? || !File.directory?(project_dir) Funlog.instance.("项目路径无效: #{project_dir}") return false end scheme_name = scheme_name.to_s.gsub(/[^a-zA-Z0-9]/, '').downcase puts "正在为Android项目添加自定义scheme: #{scheme_name}" # 创建helper实例以使用基类方法 helper = self.new # 查找所有可能的模块 main_module = helper.get_main_module(project_dir) search_modules = ["app", "unityLibrary"] search_modules << main_module if main_module search_modules = search_modules.compact.uniq puts "搜索的模块: #{search_modules.join(', ')}" # 查找所有可能的AndroidManifest.xml文件 manifest_candidates = find_manifests(project_dir, search_modules) if manifest_candidates.empty? Funlog.instance.("未找到任何AndroidManifest.xml文件") return false end puts "找到#{manifest_candidates.size}个AndroidManifest.xml文件" # 寻找最佳的AndroidManifest.xml和Activity manifest_path, main_activity, android_prefix = find_best_activity(manifest_candidates) if manifest_path.nil? || main_activity.nil? Funlog.instance.("无法找到合适的Activity") return false end puts "已选择 #{manifest_path} 文件中的 #{main_activity['android:name'] || '主Activity'}" # 检查scheme是否已存在 scheme_exists, existing_scheme = check_scheme_exists(main_activity, android_prefix, scheme_name) # 如果scheme已存在,检查是否需要更新格式 if scheme_exists activity_name = main_activity["#{android_prefix}:name"] || "主Activity" if existing_scheme != scheme_name # 格式不同,需要更新 if update_existing_scheme(manifest_path, main_activity, android_prefix, existing_scheme, scheme_name) Funlog.instance.("已将scheme从'#{existing_scheme}'更新为'#{scheme_name}'") else Funlog.instance.("scheme已存在: #{existing_scheme}") end else puts " ✓ scheme已存在: #{scheme_name}" end return true end # 尝试使用DOM添加 success = add_scheme_with_dom(manifest_path, main_activity, android_prefix, scheme_name) unless success # DOM方法失败,尝试文本替换 success = add_scheme_with_text_replace(manifest_path, scheme_name) end if success puts " ✓ 成功添加scheme: #{scheme_name}" else Funlog.instance.("无法添加scheme: #{scheme_name}") end return success end |
.update_android_project_version(project_dir: nil, version_name: nil, version_code: nil) ⇒ Boolean
更新Android工程版本号
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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 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 123 124 125 |
# File 'lib/pindo/module/android/android_build_config_helper.rb', line 15 def self.update_android_project_version(project_dir: nil, version_name: nil, version_code: nil) raise ArgumentError, "项目目录不能为空" if project_dir.nil? raise ArgumentError, "版本名不能为空" if version_name.nil? raise ArgumentError, "版本号不能为空" if version_code.nil? # 验证version_code的有效性 unless valid_build_number?(version_code) Funlog.instance.("Android versionCode必须在1到#{2**31-1}之间,当前值:#{version_code}") return false end Funlog.instance.("正在更新Android工程版本信息...") begin # 创建helper实例以使用基类方法 helper = self.new # 获取主模块路径 main_module = helper.get_main_module(project_dir) if main_module.nil? # 如果无法获取主模块,尝试常见的模块名 ["app", "application", "main"].each do |module_name| module_path = File.join(project_dir, module_name) if File.exist?(File.join(module_path, "build.gradle")) || File.exist?(File.join(module_path, "build.gradle.kts")) main_module = module_path break end end end if main_module.nil? Funlog.instance.("未找到Android主模块") return false end # 查找build.gradle或build.gradle.kts文件 gradle_file = nil if File.exist?(File.join(main_module, "build.gradle")) gradle_file = File.join(main_module, "build.gradle") elsif File.exist?(File.join(main_module, "build.gradle.kts")) gradle_file = File.join(main_module, "build.gradle.kts") end if gradle_file.nil? Funlog.instance.("未找到build.gradle文件") return false end # 读取并更新gradle文件 content = File.read(gradle_file) original_content = content.dup # 更新versionCode if content =~ /versionCode\s+\d+/ content.gsub!(/versionCode\s+\d+/, "versionCode #{version_code}") elsif content =~ /versionCode\s*=\s*\d+/ content.gsub!(/versionCode\s*=\s*\d+/, "versionCode = #{version_code}") end # 更新versionName if content =~ /versionName\s+["'][^"']*["']/ content.gsub!(/versionName\s+["'][^"']*["']/, "versionName \"#{version_name}\"") elsif content =~ /versionName\s*=\s*["'][^"']*["']/ content.gsub!(/versionName\s*=\s*["'][^"']*["']/, "versionName = \"#{version_name}\"") end # 如果内容有变化,写回文件 if content != original_content File.write(gradle_file, content) Funlog.instance.("Android版本更新完成!") puts " ✓ versionName已更新: #{version_name}" puts " ✓ versionCode已更新: #{version_code}" puts " ✓ 更新的文件: #{gradle_file}" return true else # 如果没有找到版本字段,尝试在defaultConfig块中添加 if content =~ /defaultConfig\s*\{([^}]*)\}/m default_config = $1 if !default_config.include?("versionCode") || !default_config.include?("versionName") Funlog.instance.("gradle文件中未找到版本字段,尝试添加...") # 在defaultConfig块中添加版本信息 new_default_config = default_config unless default_config.include?("versionCode") new_default_config += "\n versionCode #{version_code}" end unless default_config.include?("versionName") new_default_config += "\n versionName \"#{version_name}\"" end content.gsub!(/defaultConfig\s*\{[^}]*\}/m, "defaultConfig {#{new_default_config}\n }") File.write(gradle_file, content) Funlog.instance.("Android版本更新完成!") puts " ✓ versionName已添加: #{version_name}" puts " ✓ versionCode已添加: #{version_code}" return true end end Funlog.instance.("无法在gradle文件中找到或添加版本信息") return false end rescue StandardError => e Funlog.instance.("更新Android版本失败: #{e.}") return false end end |
.valid_build_number?(build_number) ⇒ Boolean
验证Build号是否在有效范围内
130 131 132 133 134 135 |
# File 'lib/pindo/module/android/android_build_config_helper.rb', line 130 def self.valid_build_number?(build_number) return false if build_number.nil? # Android versionCode的有效范围是1到2^31-1 build_number >= 1 && build_number <= 2**31 - 1 end |