pindo 5.2.4 → 5.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/aeshelper.rb +23 -2
  3. data/lib/pindo/base/pindocontext.rb +259 -0
  4. data/lib/pindo/client/pgyer_feishu_oauth_cli.rb +343 -80
  5. data/lib/pindo/client/pgyerclient.rb +30 -20
  6. data/lib/pindo/command/android/autobuild.rb +52 -22
  7. data/lib/pindo/command/android/build.rb +27 -16
  8. data/lib/pindo/command/android/debug.rb +25 -15
  9. data/lib/pindo/command/dev/debug.rb +2 -51
  10. data/lib/pindo/command/dev/feishu.rb +19 -2
  11. data/lib/pindo/command/ios/adhoc.rb +2 -1
  12. data/lib/pindo/command/ios/autobuild.rb +35 -8
  13. data/lib/pindo/command/ios/debug.rb +2 -132
  14. data/lib/pindo/command/lib/lint.rb +24 -1
  15. data/lib/pindo/command/setup.rb +24 -4
  16. data/lib/pindo/command/unity/apk.rb +15 -0
  17. data/lib/pindo/command/unity/ipa.rb +16 -0
  18. data/lib/pindo/command.rb +13 -2
  19. data/lib/pindo/module/android/android_build_config_helper.rb +425 -0
  20. data/lib/pindo/module/android/apk_helper.rb +23 -25
  21. data/lib/pindo/module/android/base_helper.rb +572 -0
  22. data/lib/pindo/module/android/build_helper.rb +8 -318
  23. data/lib/pindo/module/android/gp_compliance_helper.rb +668 -0
  24. data/lib/pindo/module/android/gradle_helper.rb +746 -3
  25. data/lib/pindo/module/appselect.rb +18 -5
  26. data/lib/pindo/module/build/buildhelper.rb +120 -29
  27. data/lib/pindo/module/build/unityhelper.rb +675 -18
  28. data/lib/pindo/module/build/versionhelper.rb +146 -0
  29. data/lib/pindo/module/cert/certhelper.rb +33 -2
  30. data/lib/pindo/module/cert/xcodecerthelper.rb +3 -1
  31. data/lib/pindo/module/pgyer/pgyerhelper.rb +114 -31
  32. data/lib/pindo/module/xcode/xcodebuildconfig.rb +232 -0
  33. data/lib/pindo/module/xcode/xcodebuildhelper.rb +0 -1
  34. data/lib/pindo/version.rb +356 -86
  35. data/lib/pindo.rb +72 -3
  36. metadata +5 -1
@@ -32,6 +32,578 @@ module Pindo
32
32
  tools
33
33
  end
34
34
 
35
+ # 查找正确的 Java 命令 (Java 11+)
36
+ def find_java_command
37
+ # 检查 JAVA_HOME 环境变量
38
+ if ENV['JAVA_HOME'] && File.exist?(File.join(ENV['JAVA_HOME'], 'bin', 'java'))
39
+ java_path = File.join(ENV['JAVA_HOME'], 'bin', 'java')
40
+ # 验证 Java 版本
41
+ if verify_java_version(java_path)
42
+ return java_path
43
+ end
44
+ end
45
+
46
+ # 尝试常见的 Java 路径
47
+ common_java_paths = [
48
+ '/usr/libexec/java_home', # macOS
49
+ '/usr/bin/java',
50
+ '/usr/local/bin/java',
51
+ '/opt/homebrew/bin/java', # macOS Homebrew
52
+ '/usr/local/opt/openjdk/bin/java' # macOS Homebrew OpenJDK
53
+ ]
54
+
55
+ common_java_paths.each do |java_path|
56
+ if File.exist?(java_path)
57
+ # 对于 macOS 的 java_home,需要特殊处理
58
+ if java_path.include?('java_home')
59
+ java_home_output = `#{java_path} 2>/dev/null`.strip
60
+ if !java_home_output.empty?
61
+ actual_java_path = File.join(java_home_output, 'bin', 'java')
62
+ if File.exist?(actual_java_path) && verify_java_version(actual_java_path)
63
+ return actual_java_path
64
+ end
65
+ end
66
+ elsif verify_java_version(java_path)
67
+ return java_path
68
+ end
69
+ end
70
+ end
71
+
72
+ # 如果都找不到,返回默认的 java 命令
73
+ 'java'
74
+ end
75
+
76
+ # 验证 Java 版本是否满足要求 (Java 11+)
77
+ def verify_java_version(java_path)
78
+ begin
79
+ version_output = `"#{java_path}" -version 2>&1`
80
+ if version_output =~ /version "(\d+)/
81
+ major_version = $1.to_i
82
+ return major_version >= 11
83
+ end
84
+ rescue
85
+ # 如果执行失败,返回 false
86
+ end
87
+ false
88
+ end
89
+
90
+ # 检查并确保 Java 版本符合要求 (Java 11+)
91
+ def ensure_java_version_compliance
92
+ puts "\e[36m=== Java 版本检测 ===\e[0m"
93
+
94
+ # 检查 Unity Editor 中的 JDK 版本(仅检测,不自动替换)
95
+ # if check_and_update_unity_jdk
96
+ # puts "\e[32m✓ Unity Editor JDK 已更新为 Java 11+\e[0m"
97
+ # end
98
+
99
+ # 仅检测Unity Editor JDK版本,不进行替换
100
+ unity_root_paths = find_unity_editor_paths
101
+ if unity_root_paths.any?
102
+ puts "\e[36m=== Unity Editor JDK 版本检测 ===\e[0m"
103
+ unity_root_paths.each do |unity_root|
104
+ # 构建JDK路径
105
+ jdk_path = build_jdk_path_from_unity_root(unity_root)
106
+ puts "\e[33m[DEBUG] 检查Unity路径: #{unity_root} -> JDK路径: #{jdk_path}\e[0m" if ENV['PINDO_DEBUG']
107
+
108
+ if File.exist?(jdk_path)
109
+ java_cmd = File.join(jdk_path, "bin", "java")
110
+ if File.exist?(java_cmd)
111
+ version_output = `"#{java_cmd}" -version 2>&1`
112
+ if version_output =~ /version "(\d+)/
113
+ major_version = $1.to_i
114
+ if major_version >= 11
115
+ puts "\e[32m✓ Unity Editor JDK 版本 #{major_version} 符合要求: #{jdk_path}\e[0m"
116
+ else
117
+ puts "\e[33m⚠ Unity Editor JDK 版本 #{major_version} 不符合要求 (需要 Java 11+): #{jdk_path}\e[0m"
118
+ end
119
+ else
120
+ puts "\e[33m⚠ 无法解析Unity Editor JDK版本: #{jdk_path}\e[0m"
121
+ end
122
+ else
123
+ puts "\e[33m⚠ Unity Editor JDK中未找到java命令: #{jdk_path}\e[0m"
124
+ end
125
+ else
126
+ puts "\e[33m⚠ Unity Editor JDK路径不存在: #{jdk_path}\e[0m"
127
+ end
128
+ end
129
+ else
130
+ puts "\e[33m⚠ 未找到Unity Editor安装路径\e[0m"
131
+ end
132
+
133
+ # 查找当前可用的 Java 命令
134
+ current_java = find_java_command
135
+ puts "当前 Java 命令: #{current_java}"
136
+
137
+ # 验证当前 Java 版本
138
+ if verify_java_version(current_java)
139
+ version_output = `"#{current_java}" -version 2>&1`
140
+ if version_output =~ /version "(\d+)/
141
+ major_version = $1.to_i
142
+ puts "\e[32m✓ Java 版本 #{major_version} 符合要求 (需要 Java 11+)\e[0m"
143
+ return true
144
+ end
145
+ end
146
+
147
+ puts "\e[31m✗ 当前 Java 版本不符合要求,需要 Java 11+\e[0m"
148
+ puts "\e[33m请手动安装 Java 11 或更高版本:\e[0m"
149
+ puts " • macOS: brew install openjdk@11"
150
+ puts " • 或下载: https://adoptium.net/"
151
+ puts " • 或使用 SDKMAN: sdk install java 11.0.21-tem"
152
+
153
+ # 注释掉自动安装 Java 11 的逻辑
154
+ # puts "\e[33m正在尝试自动安装和配置 Java 11...\e[0m"
155
+ # if install_java_11
156
+ # puts "\e[32m✓ Java 11 安装成功\e[0m"
157
+ # return true
158
+ # else
159
+ # puts "\e[31m✗ Java 11 自动安装失败\e[0m"
160
+ # puts "\e[33m请手动安装 Java 11 或更高版本:\e[0m"
161
+ # puts " • macOS: brew install openjdk@11"
162
+ # puts " • 或下载: https://adoptium.net/"
163
+ # puts " • 或使用 SDKMAN: sdk install java 11.0.21-tem"
164
+ # return false
165
+ # end
166
+
167
+ return false
168
+ end
169
+
170
+ # 自动安装 Java 11
171
+ def install_java_11
172
+ begin
173
+ # 检查是否在 macOS 上
174
+ if RbConfig::CONFIG['host_os'] =~ /darwin/
175
+ return install_java_11_macos
176
+ else
177
+ puts "\e[33m当前系统不是 macOS,请手动安装 Java 11\e[0m"
178
+ return false
179
+ end
180
+ rescue => e
181
+ puts "\e[31m安装 Java 11 时出错: #{e.message}\e[0m"
182
+ return false
183
+ end
184
+ end
185
+
186
+ # 在 macOS 上安装 Java 11
187
+ def install_java_11_macos
188
+ puts "\e[36m在 macOS 上安装 Java 11...\e[0m"
189
+
190
+ # 方法1: 使用 Homebrew 安装
191
+ if system("which brew > /dev/null 2>&1")
192
+ puts "使用 Homebrew 安装 OpenJDK 11..."
193
+ if system("brew install openjdk@11")
194
+ # 设置 JAVA_HOME
195
+ java_home_path = `brew --prefix openjdk@11`.strip
196
+ if !java_home_path.empty? && File.directory?(java_home_path)
197
+ java_bin_path = File.join(java_home_path, "bin", "java")
198
+ if File.exist?(java_bin_path)
199
+ # 设置环境变量
200
+ ENV['JAVA_HOME'] = java_home_path
201
+ puts "\e[32m✓ 已设置 JAVA_HOME: #{java_home_path}\e[0m"
202
+ return true
203
+ end
204
+ end
205
+ else
206
+ puts "\e[33mHomebrew 安装 OpenJDK 11 失败\e[0m"
207
+ end
208
+ else
209
+ puts "\e[33m未找到 Homebrew,跳过 Homebrew 安装方式\e[0m"
210
+ end
211
+
212
+ # 方法2: 使用 SDKMAN 安装
213
+ if system("which sdk > /dev/null 2>&1")
214
+ puts "使用 SDKMAN 安装 Java 11..."
215
+ if system("sdk install java 11.0.21-tem")
216
+ # 设置环境变量
217
+ sdkman_home = ENV['SDKMAN_DIR'] || File.expand_path("~/.sdkman")
218
+ java_home_path = File.join(sdkman_home, "candidates", "java", "11.0.21-tem")
219
+ if File.directory?(java_home_path)
220
+ ENV['JAVA_HOME'] = java_home_path
221
+ puts "\e[32m✓ 已设置 JAVA_HOME: #{java_home_path}\e[0m"
222
+ return true
223
+ end
224
+ else
225
+ puts "\e[33mSDKMAN 安装 Java 11 失败\e[0m"
226
+ end
227
+ else
228
+ puts "\e[33m未找到 SDKMAN,跳过 SDKMAN 安装方式\e[0m"
229
+ end
230
+
231
+ # 方法3: 下载并安装 Adoptium OpenJDK
232
+ puts "尝试下载并安装 Adoptium OpenJDK 11..."
233
+ return install_adoptium_java_11
234
+ end
235
+
236
+ # 下载并安装 Adoptium OpenJDK 11
237
+ def install_adoptium_java_11
238
+ begin
239
+ # 创建临时目录
240
+ temp_dir = Dir.mktmpdir("java_install_")
241
+
242
+ # 下载 URL (macOS x64)
243
+ download_url = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.21%2B9/OpenJDK11U-jdk_x64_mac_hotspot_11.0.21_9.tar.gz"
244
+ tar_file = File.join(temp_dir, "openjdk11.tar.gz")
245
+
246
+ puts "下载 OpenJDK 11..."
247
+ if system("curl -L -o \"#{tar_file}\" \"#{download_url}\"")
248
+ puts "解压 OpenJDK 11..."
249
+ if system("tar -xzf \"#{tar_file}\" -C \"#{temp_dir}\"")
250
+ # 查找解压后的目录
251
+ jdk_dir = Dir.glob(File.join(temp_dir, "jdk-11*")).first
252
+ if jdk_dir && File.directory?(jdk_dir)
253
+ # 尝试安装到用户目录而不是系统目录
254
+ user_install_dir = File.expand_path("~/.pindo/java11")
255
+ if system("mkdir -p \"#{File.dirname(user_install_dir)}\" && mv \"#{jdk_dir}\" \"#{user_install_dir}\"")
256
+ # 设置环境变量
257
+ ENV['JAVA_HOME'] = user_install_dir
258
+ puts "\e[32m✓ 已安装并设置 JAVA_HOME: #{user_install_dir}\e[0m"
259
+ return true
260
+ else
261
+ puts "\e[33m无法安装到用户目录,尝试系统目录...\e[0m"
262
+ # 回退到系统目录
263
+ install_dir = "/usr/local/openjdk11"
264
+ if system("sudo mkdir -p /usr/local && sudo mv \"#{jdk_dir}\" \"#{install_dir}\"")
265
+ # 设置环境变量
266
+ ENV['JAVA_HOME'] = install_dir
267
+ puts "\e[32m✓ 已安装并设置 JAVA_HOME: #{install_dir}\e[0m"
268
+ return true
269
+ else
270
+ puts "\e[31m无法安装到系统目录,需要管理员权限\e[0m"
271
+ end
272
+ end
273
+ else
274
+ puts "\e[31m解压后未找到 JDK 目录\e[0m"
275
+ end
276
+ else
277
+ puts "\e[31m解压 OpenJDK 11 失败\e[0m"
278
+ end
279
+ else
280
+ puts "\e[31m下载 OpenJDK 11 失败\e[0m"
281
+ end
282
+
283
+ return false
284
+ rescue => e
285
+ puts "\e[31m下载安装 OpenJDK 11 失败: #{e.message}\e[0m"
286
+ return false
287
+ ensure
288
+ # 清理临时目录
289
+ FileUtils.rm_rf(temp_dir) if temp_dir && File.directory?(temp_dir)
290
+ end
291
+ end
292
+
293
+ # 检查并更新 Unity Editor 中的 JDK 版本
294
+ def check_and_update_unity_jdk
295
+ return false unless RbConfig::CONFIG['host_os'] =~ /darwin/
296
+
297
+ puts "\e[36m=== Unity Editor JDK 版本检测 ===\e[0m"
298
+
299
+ # 查找 Unity Editor 安装路径
300
+ unity_paths = find_unity_editor_paths
301
+ if unity_paths.empty?
302
+ puts "\e[33m未找到 Unity Editor 安装路径\e[0m"
303
+ return false
304
+ end
305
+
306
+ updated_any = false
307
+ unity_paths.each do |unity_path|
308
+ # 根据不同的 Unity 路径结构构建 JDK 路径
309
+ jdk_path = build_jdk_path_from_unity_root(unity_path)
310
+
311
+ if File.directory?(jdk_path)
312
+ puts "检查 Unity Editor JDK: #{jdk_path}"
313
+ if check_and_replace_unity_jdk(jdk_path)
314
+ updated_any = true
315
+ end
316
+ else
317
+ # OpenJDK 目录不存在,尝试创建并安装 Java 11
318
+ puts "OpenJDK 目录不存在: #{jdk_path}"
319
+ puts "正在创建 OpenJDK 目录并安装 Java 11..."
320
+
321
+ if create_and_install_openjdk(jdk_path)
322
+ puts "\e[32m✓ OpenJDK 目录创建并安装 Java 11 成功\e[0m"
323
+ updated_any = true
324
+ else
325
+ puts "\e[31m✗ OpenJDK 目录创建并安装 Java 11 失败\e[0m"
326
+ end
327
+ end
328
+ end
329
+
330
+ updated_any
331
+ end
332
+
333
+ # 创建 OpenJDK 目录并安装 Java 11
334
+ def create_and_install_openjdk(jdk_path)
335
+ begin
336
+ # 创建 OpenJDK 目录(使用 sudo 权限)
337
+ puts "\e[33m需要管理员权限来创建 OpenJDK 目录,请输入密码...\e[0m"
338
+ if system("sudo mkdir -p \"#{jdk_path}\"")
339
+ puts "创建 OpenJDK 目录: #{jdk_path}"
340
+ else
341
+ puts "\e[31m✗ 创建 OpenJDK 目录失败\e[0m"
342
+ return false
343
+ end
344
+
345
+ # 查找或安装 Java 11
346
+ java11_path = find_java11_installation
347
+ unless java11_path && File.directory?(java11_path)
348
+ puts "\e[33m未找到系统中的 Java 11 安装,正在自动下载...\e[0m"
349
+
350
+ # 自动下载并安装 Java 11
351
+ if install_java_11
352
+ java11_path = find_java11_installation
353
+ unless java11_path && File.directory?(java11_path)
354
+ puts "\e[31m✗ Java 11 自动安装失败\e[0m"
355
+ return false
356
+ end
357
+ puts "\e[32m✓ Java 11 自动安装成功\e[0m"
358
+ else
359
+ puts "\e[31m✗ Java 11 自动安装失败\e[0m"
360
+ return false
361
+ end
362
+ end
363
+
364
+ puts "找到 Java 11 安装路径: #{java11_path}"
365
+
366
+ # 复制 Java 11 到 OpenJDK 目录(使用 sudo 权限)
367
+ puts "正在复制 Java 11 到 OpenJDK 目录..."
368
+ if system("sudo cp -R \"#{java11_path}\"/* \"#{jdk_path}\"/")
369
+ puts "\e[32m✓ Java 11 复制成功\e[0m"
370
+
371
+ # 验证安装
372
+ java_bin = File.join(jdk_path, "bin", "java")
373
+ if File.exist?(java_bin)
374
+ version_output = `"#{java_bin}" -version 2>&1`
375
+ if version_output =~ /version "(\d+)/
376
+ version = $1.to_i
377
+ if version >= 11
378
+ puts "\e[32m✓ Unity Editor JDK 安装成功,版本: #{version}\e[0m"
379
+ return true
380
+ else
381
+ puts "\e[31m✗ 安装的 JDK 版本 #{version} 不符合要求\e[0m"
382
+ return false
383
+ end
384
+ end
385
+ end
386
+
387
+ return true
388
+ else
389
+ puts "\e[31m✗ Java 11 复制失败\e[0m"
390
+ return false
391
+ end
392
+
393
+ rescue => e
394
+ puts "\e[31m创建并安装 OpenJDK 时出错: #{e.message}\e[0m"
395
+ return false
396
+ end
397
+ end
398
+
399
+ # 查找 Unity Editor 安装路径
400
+ def find_unity_editor_paths
401
+ unity_paths = []
402
+
403
+ # 1. 检查全局 Unity PlaybackEngines 路径(最常见)
404
+ global_playback_engines = "/Applications/Unity/PlaybackEngines"
405
+ if File.directory?(global_playback_engines)
406
+ unity_paths << "/Applications/Unity"
407
+ end
408
+
409
+ # 2. 检查 Unity Hub 中的多个版本(支持 2021.3.* 版本范围)
410
+ unity_hub_patterns = [
411
+ "/Applications/Unity/Hub/Editor/2021.3.*/PlaybackEngines"
412
+ ]
413
+
414
+ unity_hub_patterns.each do |pattern|
415
+ Dir.glob(pattern).each do |playback_engines_path|
416
+ # Unity Hub 版本:/Applications/Unity/Hub/Editor/2022.3.15f1/PlaybackEngines
417
+ unity_root = playback_engines_path.gsub("/PlaybackEngines", "")
418
+ unity_paths << unity_root
419
+ end
420
+ end
421
+
422
+ # 3. 检查其他常见的 Unity 安装路径
423
+ other_pattern = "/Applications/Unity/*/PlaybackEngines"
424
+ Dir.glob(other_pattern).each do |playback_engines_path|
425
+ # 其他 Unity 版本:/Applications/Unity/2022.3.15f1/PlaybackEngines
426
+ unity_root = playback_engines_path.gsub("/PlaybackEngines", "")
427
+ unity_paths << unity_root
428
+ end
429
+
430
+ unity_paths.uniq
431
+ end
432
+
433
+ # 根据 Unity 根路径构建 JDK 路径
434
+ def build_jdk_path_from_unity_root(unity_path)
435
+ # 1. 全局 Unity 路径
436
+ if unity_path == "/Applications/Unity"
437
+ return "/Applications/Unity/PlaybackEngines/AndroidPlayer/OpenJDK"
438
+ end
439
+
440
+ # 2. Unity Hub 路径(包含版本号)
441
+ if unity_path.include?("/Unity/Hub/Editor/")
442
+ # 检查是否有 PlaybackEngines 目录
443
+ playback_engines_path = File.join(unity_path, "PlaybackEngines")
444
+ if File.directory?(playback_engines_path)
445
+ return File.join(playback_engines_path, "AndroidPlayer", "OpenJDK")
446
+ end
447
+ end
448
+
449
+ # 3. 其他 Unity 版本路径
450
+ if unity_path.include?("/Unity/") && !unity_path.include?("/Hub/")
451
+ # 检查是否有 PlaybackEngines 目录
452
+ playback_engines_path = File.join(unity_path, "PlaybackEngines")
453
+ if File.directory?(playback_engines_path)
454
+ return File.join(playback_engines_path, "AndroidPlayer", "OpenJDK")
455
+ end
456
+ end
457
+
458
+ # 4. 默认尝试
459
+ File.join(unity_path, "PlaybackEngines", "AndroidPlayer", "OpenJDK")
460
+ end
461
+
462
+ # 检查并替换 Unity Editor 中的 JDK
463
+ def check_and_replace_unity_jdk(jdk_path)
464
+ begin
465
+ # 检查当前 JDK 版本
466
+ java_bin = File.join(jdk_path, "bin", "java")
467
+ if File.exist?(java_bin)
468
+ version_output = `"#{java_bin}" -version 2>&1`
469
+ if version_output =~ /version "(\d+)/
470
+ current_version = $1.to_i
471
+ puts "Unity Editor JDK 当前版本: #{current_version}"
472
+
473
+ if current_version >= 11
474
+ puts "\e[32m✓ Unity Editor JDK 版本 #{current_version} 符合要求\e[0m"
475
+ return false
476
+ else
477
+ puts "\e[31m✗ Unity Editor JDK 版本 #{current_version} 不符合要求,需要 Java 11+\e[0m"
478
+ return replace_unity_jdk_with_java11(jdk_path)
479
+ end
480
+ end
481
+ else
482
+ puts "\e[31m✗ Unity Editor JDK 中未找到 java 可执行文件\e[0m"
483
+ return replace_unity_jdk_with_java11(jdk_path)
484
+ end
485
+
486
+ return false
487
+ rescue => e
488
+ puts "\e[31m检查 Unity Editor JDK 时出错: #{e.message}\e[0m"
489
+ return false
490
+ end
491
+ end
492
+
493
+ # 替换 Unity Editor 中的 JDK 为 Java 11
494
+ def replace_unity_jdk_with_java11(jdk_path)
495
+ begin
496
+ puts "\e[33m正在替换 Unity Editor JDK 为 Java 11...\e[0m"
497
+
498
+ # 查找系统中的 Java 11
499
+ java11_path = find_java11_installation
500
+ unless java11_path && File.directory?(java11_path)
501
+ puts "\e[33m未找到系统中的 Java 11 安装,正在自动下载...\e[0m"
502
+
503
+ # 自动下载并安装 Java 11
504
+ if install_java_11
505
+ java11_path = find_java11_installation
506
+ unless java11_path && File.directory?(java11_path)
507
+ puts "\e[31m✗ Java 11 自动安装失败\e[0m"
508
+ return false
509
+ end
510
+ puts "\e[32m✓ Java 11 自动安装成功\e[0m"
511
+ else
512
+ puts "\e[31m✗ Java 11 自动安装失败\e[0m"
513
+ return false
514
+ end
515
+ end
516
+
517
+ puts "找到 Java 11 安装路径: #{java11_path}"
518
+
519
+ # 备份原始 JDK(使用 sudo 权限)
520
+ backup_path = "#{jdk_path}_backup_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
521
+ puts "备份原始 JDK 到: #{backup_path}"
522
+ puts "\e[33m需要管理员权限来备份和替换 Unity Editor JDK,请输入密码...\e[0m"
523
+
524
+ if system("sudo cp -R \"#{jdk_path}\" \"#{backup_path}\"")
525
+ puts "\e[32m✓ 原始 JDK 备份成功\e[0m"
526
+ else
527
+ puts "\e[31m✗ 原始 JDK 备份失败\e[0m"
528
+ return false
529
+ end
530
+
531
+ # 删除原始 JDK 内容(使用 sudo 权限)
532
+ puts "删除原始 JDK 内容..."
533
+ if system("sudo rm -rf \"#{jdk_path}/*\"")
534
+ puts "\e[32m✓ 原始 JDK 内容删除成功\e[0m"
535
+ else
536
+ puts "\e[31m✗ 原始 JDK 内容删除失败\e[0m"
537
+ return false
538
+ end
539
+
540
+ # 复制 Java 11 到 Unity JDK 目录(使用 sudo 权限)
541
+ puts "复制 Java 11 到 Unity JDK 目录..."
542
+ if system("sudo cp -R \"#{java11_path}\"/* \"#{jdk_path}/\"")
543
+ puts "\e[32m✓ Java 11 复制成功\e[0m"
544
+
545
+ # 验证替换结果
546
+ new_java_bin = File.join(jdk_path, "bin", "java")
547
+ if File.exist?(new_java_bin)
548
+ version_output = `"#{new_java_bin}" -version 2>&1`
549
+ if version_output =~ /version "(\d+)/
550
+ new_version = $1.to_i
551
+ if new_version >= 11
552
+ puts "\e[32m✓ Unity Editor JDK 已成功替换为 Java #{new_version}\e[0m"
553
+ return true
554
+ else
555
+ puts "\e[31m✗ 替换后的 JDK 版本仍然不符合要求: #{new_version}\e[0m"
556
+ end
557
+ end
558
+ end
559
+ else
560
+ puts "\e[31m✗ Java 11 复制失败\e[0m"
561
+ return false
562
+ end
563
+
564
+ return false
565
+ rescue => e
566
+ puts "\e[31m替换 Unity Editor JDK 时出错: #{e.message}\e[0m"
567
+ return false
568
+ end
569
+ end
570
+
571
+ # 查找系统中的 Java 11 安装
572
+ def find_java11_installation
573
+ # 检查常见的 Java 11 安装路径
574
+ java11_paths = [
575
+ # Homebrew 安装路径
576
+ "/opt/homebrew/opt/openjdk@11",
577
+ "/usr/local/opt/openjdk@11",
578
+ # SDKMAN 安装路径
579
+ File.expand_path("~/.sdkman/candidates/java/11.0.21-tem"),
580
+ File.expand_path("~/.sdkman/candidates/java/11.0.20-tem"),
581
+ # 系统安装路径
582
+ "/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home",
583
+ "/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home",
584
+ # Pindo 安装的 Java 11
585
+ File.expand_path("~/.pindo/java11")
586
+ ]
587
+
588
+ java11_paths.each do |path|
589
+ if File.directory?(path)
590
+ java_bin = File.join(path, "bin", "java")
591
+ if File.exist?(java_bin)
592
+ # 验证版本
593
+ version_output = `"#{java_bin}" -version 2>&1`
594
+ if version_output =~ /version "(\d+)/
595
+ version = $1.to_i
596
+ if version >= 11
597
+ return path
598
+ end
599
+ end
600
+ end
601
+ end
602
+ end
603
+
604
+ nil
605
+ end
606
+
35
607
  def modify_il2cpp_config(project_path)
36
608
  # 设置Il2CppOutputProject可执行权限
37
609
  system("chmod", "-R", "777",