pindo 5.6.0 → 5.6.2
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.
- checksums.yaml +4 -4
- data/lib/pindo/module/android/gradle_helper.rb +131 -211
- data/lib/pindo/module/build/unityhelper.rb +81 -1
- data/lib/pindo/module/pgyer/pgyerhelper.rb +0 -1
- data/lib/pindo/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74540551eee20b918542b7de441e214fcfcbcaa4d747348efdd9bcd312d36d67
|
4
|
+
data.tar.gz: 6f4d6e175b6ff344b9bb26fe85f3a349348a3487ca0999fb86b847d8e37446de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31a3e0cfef6eb95d8deaa16f95a15da7c91fb33f10acc642e57e9e4e26a0f315114fec8572ca35e0c1ebb83bdc163101e10155555ef23a30171a0f3fbd18f96b
|
7
|
+
data.tar.gz: 31fd9e169330f6a8713d9d7472c96d26a74bb32afb3e6c9ad3d6d36dd3a84f76f939ee4e50f478650916cc9a101170e27bcb8d861d69296f2802bc6613da6221
|
@@ -280,13 +280,23 @@ module Pindo
|
|
280
280
|
cached_jar = get_cached_gradle_wrapper_jar(gradle_version)
|
281
281
|
if cached_jar
|
282
282
|
FileUtils.cp(cached_jar, wrapper_jar_path)
|
283
|
-
|
284
|
-
|
283
|
+
# 验证缓存文件
|
284
|
+
if verify_gradle_wrapper_jar_complete(wrapper_jar_path, gradle_version)
|
285
|
+
puts "\e[32m✓ 从缓存复制 gradle-wrapper.jar 成功\e[0m"
|
286
|
+
return true
|
287
|
+
else
|
288
|
+
puts "\e[33m⚠ 缓存文件验证失败,继续下载\e[0m"
|
289
|
+
end
|
285
290
|
end
|
286
291
|
|
287
292
|
# 3. 尝试下载
|
288
293
|
if download_standard_wrapper_jar(wrapper_jar_path, gradle_version)
|
289
|
-
|
294
|
+
# 验证下载的文件
|
295
|
+
if verify_gradle_wrapper_jar_complete(wrapper_jar_path, gradle_version)
|
296
|
+
return true
|
297
|
+
else
|
298
|
+
puts "\e[33m⚠ 下载文件验证失败,使用内置文件\e[0m"
|
299
|
+
end
|
290
300
|
end
|
291
301
|
|
292
302
|
# 4. 最后回退:使用内置文件
|
@@ -299,59 +309,6 @@ module Pindo
|
|
299
309
|
false
|
300
310
|
end
|
301
311
|
|
302
|
-
# 使用gradlew脚本生成wrapper
|
303
|
-
def generate_wrapper_with_gradlew(project_path, gradle_version)
|
304
|
-
puts "使用gradlew脚本生成wrapper..."
|
305
|
-
|
306
|
-
# 切换到项目目录
|
307
|
-
Dir.chdir(project_path) do
|
308
|
-
# 使用gradlew wrapper命令生成wrapper
|
309
|
-
cmd = "./gradlew wrapper --gradle-version #{gradle_version}"
|
310
|
-
puts "执行命令: #{cmd}"
|
311
|
-
|
312
|
-
result = system(cmd)
|
313
|
-
if result
|
314
|
-
puts "\e[32m✓ gradle wrapper生成成功\e[0m"
|
315
|
-
return true
|
316
|
-
else
|
317
|
-
puts "\e[31m✗ gradle wrapper生成失败\e[0m"
|
318
|
-
return false
|
319
|
-
end
|
320
|
-
end
|
321
|
-
rescue => e
|
322
|
-
puts "\e[31m✗ gradle wrapper生成异常: #{e.message}\e[0m"
|
323
|
-
false
|
324
|
-
end
|
325
|
-
|
326
|
-
# 使用gradle命令生成wrapper
|
327
|
-
def generate_wrapper_with_gradle(project_path, gradle_version)
|
328
|
-
puts "使用gradle命令生成wrapper..."
|
329
|
-
|
330
|
-
# 检查系统是否有gradle命令
|
331
|
-
unless system("which gradle > /dev/null 2>&1")
|
332
|
-
puts "\e[33m⚠ 系统未安装gradle,使用简化的wrapper生成方式...\e[0m"
|
333
|
-
return generate_wrapper_manually(project_path, gradle_version)
|
334
|
-
end
|
335
|
-
|
336
|
-
# 切换到项目目录
|
337
|
-
Dir.chdir(project_path) do
|
338
|
-
# 使用gradle wrapper命令生成wrapper
|
339
|
-
cmd = "gradle wrapper --gradle-version #{gradle_version}"
|
340
|
-
puts "执行命令: #{cmd}"
|
341
|
-
|
342
|
-
result = system(cmd)
|
343
|
-
if result
|
344
|
-
puts "\e[32m✓ gradle wrapper生成成功\e[0m"
|
345
|
-
return true
|
346
|
-
else
|
347
|
-
puts "\e[31m✗ gradle wrapper生成失败\e[0m"
|
348
|
-
return false
|
349
|
-
end
|
350
|
-
end
|
351
|
-
rescue => e
|
352
|
-
puts "\e[31m✗ gradle wrapper生成异常: #{e.message}\e[0m"
|
353
|
-
false
|
354
|
-
end
|
355
312
|
|
356
313
|
# 改进的手动生成wrapper逻辑(带内置文件回退)
|
357
314
|
def generate_wrapper_manually(project_path, gradle_version)
|
@@ -428,9 +385,22 @@ module Pindo
|
|
428
385
|
return false
|
429
386
|
end
|
430
387
|
|
431
|
-
# 检查 jar
|
432
|
-
|
433
|
-
|
388
|
+
# 检查 jar 文件是否包含必要的类
|
389
|
+
required_classes = [
|
390
|
+
"org.gradle.wrapper.GradleWrapperMain",
|
391
|
+
"org.gradle.cli.CommandLineParser",
|
392
|
+
"org.gradle.wrapper.WrapperExecutor"
|
393
|
+
]
|
394
|
+
|
395
|
+
missing_classes = []
|
396
|
+
required_classes.each do |class_name|
|
397
|
+
unless verify_jar_contains_class(jar_path, class_name)
|
398
|
+
missing_classes << class_name
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
if missing_classes.any?
|
403
|
+
puts "\e[33m⚠ gradle-wrapper.jar 缺少必要类: #{missing_classes.join(', ')}\e[0m"
|
434
404
|
return false
|
435
405
|
end
|
436
406
|
|
@@ -495,130 +465,128 @@ module Pindo
|
|
495
465
|
puts "\e[32m✓ gradle-wrapper.jar 已保存到缓存: #{cached_jar}\e[0m"
|
496
466
|
end
|
497
467
|
|
498
|
-
# 改进的下载标准 gradle-wrapper.jar
|
468
|
+
# 改进的下载标准 gradle-wrapper.jar(使用正确的下载策略)
|
499
469
|
def download_standard_wrapper_jar(wrapper_jar_path, gradle_version)
|
500
470
|
puts "下载标准的gradle-wrapper.jar..."
|
501
471
|
|
502
|
-
#
|
503
|
-
|
504
|
-
|
505
|
-
"https://services.gradle.org/distributions/gradle-#{gradle_version}-wrapper.jar",
|
506
|
-
# Maven Central(备用)
|
507
|
-
"https://repo1.maven.org/maven2/org/gradle/gradle-wrapper/#{gradle_version}/gradle-wrapper-#{gradle_version}.jar",
|
508
|
-
# GitHub releases(最后备用)
|
509
|
-
"https://github.com/gradle/gradle/releases/download/v#{gradle_version}/gradle-#{gradle_version}-wrapper.jar"
|
472
|
+
# 使用正确的下载策略:从Gradle分发包中提取wrapper jar
|
473
|
+
gradle_dist_urls = [
|
474
|
+
"https://services.gradle.org/distributions/gradle-#{gradle_version}-bin.zip"
|
510
475
|
]
|
511
476
|
|
512
|
-
|
513
|
-
puts "
|
514
|
-
if
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
save_to_cache(wrapper_jar_path, gradle_version)
|
520
|
-
return true
|
521
|
-
else
|
522
|
-
puts "\e[33m⚠ 下载的文件验证失败,尝试下一个源\e[0m"
|
523
|
-
File.delete(wrapper_jar_path) if File.exist?(wrapper_jar_path)
|
524
|
-
end
|
477
|
+
gradle_dist_urls.each do |url|
|
478
|
+
puts "尝试从Gradle分发包下载: #{url}"
|
479
|
+
if download_and_extract_wrapper_from_distribution(url, wrapper_jar_path, gradle_version)
|
480
|
+
puts "\e[32m✓ 从Gradle分发包成功提取gradle-wrapper.jar\e[0m"
|
481
|
+
# 保存到缓存
|
482
|
+
save_to_cache(wrapper_jar_path, gradle_version)
|
483
|
+
return true
|
525
484
|
end
|
526
485
|
end
|
527
486
|
|
528
|
-
|
487
|
+
|
488
|
+
puts "\e[31m✗ 下载 gradle-wrapper.jar 失败\e[0m"
|
529
489
|
false
|
530
490
|
end
|
531
491
|
|
532
|
-
#
|
533
|
-
def
|
534
|
-
puts "下载gradle分发包并生成wrapper..."
|
535
|
-
|
492
|
+
# 从Gradle分发包中下载并提取wrapper jar
|
493
|
+
def download_and_extract_wrapper_from_distribution(dist_url, wrapper_jar_path, gradle_version)
|
536
494
|
begin
|
537
495
|
# 创建临时目录
|
538
|
-
temp_dir = Dir.mktmpdir("
|
496
|
+
temp_dir = Dir.mktmpdir("gradle_dist_")
|
497
|
+
zip_path = File.join(temp_dir, "gradle-#{gradle_version}-bin.zip")
|
498
|
+
|
499
|
+
# 下载Gradle分发包
|
500
|
+
puts "下载Gradle分发包: #{dist_url}"
|
501
|
+
unless download_with_curl(dist_url, zip_path)
|
502
|
+
puts "\e[33m⚠ 下载Gradle分发包失败\e[0m"
|
503
|
+
return false
|
504
|
+
end
|
505
|
+
|
506
|
+
# 检查下载的文件大小
|
507
|
+
unless File.exist?(zip_path) && File.size(zip_path) > 1000000 # 至少1MB
|
508
|
+
puts "\e[33m⚠ 下载的Gradle分发包文件异常\e[0m"
|
509
|
+
return false
|
510
|
+
end
|
511
|
+
|
512
|
+
# 解压Gradle分发包
|
513
|
+
puts "解压Gradle分发包..."
|
514
|
+
unless system("cd #{temp_dir} && unzip -q gradle-#{gradle_version}-bin.zip")
|
515
|
+
puts "\e[33m⚠ 解压Gradle分发包失败\e[0m"
|
516
|
+
return false
|
517
|
+
end
|
518
|
+
|
519
|
+
# 查找gradle-wrapper jar文件
|
539
520
|
gradle_dir = File.join(temp_dir, "gradle-#{gradle_version}")
|
521
|
+
wrapper_jar_source = File.join(gradle_dir, "lib", "gradle-wrapper-#{gradle_version}.jar")
|
522
|
+
|
523
|
+
unless File.exist?(wrapper_jar_source)
|
524
|
+
puts "\e[33m⚠ 在Gradle分发包中未找到gradle-wrapper jar文件\e[0m"
|
525
|
+
return false
|
526
|
+
end
|
540
527
|
|
541
|
-
#
|
542
|
-
|
543
|
-
|
544
|
-
"https://github.com/gradle/gradle-distributions/releases/download/v#{gradle_version}/gradle-#{gradle_version}-bin.zip"
|
545
|
-
]
|
528
|
+
# 解压gradle-wrapper jar文件,提取真正的gradle-wrapper.jar
|
529
|
+
extract_temp_dir = Dir.mktmpdir("gradle_wrapper_extract_")
|
530
|
+
extract_cmd = "cd #{extract_temp_dir} && unzip -q '#{wrapper_jar_source}'"
|
546
531
|
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
if download_with_curl(url, zip_path)
|
553
|
-
# 解压gradle分发包
|
554
|
-
if system("cd #{temp_dir} && unzip -q gradle-#{gradle_version}-bin.zip")
|
555
|
-
download_success = true
|
556
|
-
puts "✓ gradle分发包下载并解压成功"
|
557
|
-
break
|
558
|
-
end
|
559
|
-
end
|
532
|
+
unless system(extract_cmd)
|
533
|
+
puts "\e[33m⚠ 解压gradle-wrapper jar文件失败\e[0m"
|
534
|
+
FileUtils.rm_rf(extract_temp_dir)
|
535
|
+
return false
|
560
536
|
end
|
561
537
|
|
562
|
-
|
563
|
-
|
538
|
+
# 查找解压后的gradle-wrapper.jar文件
|
539
|
+
extracted_wrapper_jar = File.join(extract_temp_dir, "gradle-wrapper.jar")
|
540
|
+
|
541
|
+
unless File.exist?(extracted_wrapper_jar)
|
542
|
+
puts "\e[33m⚠ 在解压后的文件中未找到gradle-wrapper.jar\e[0m"
|
543
|
+
FileUtils.rm_rf(extract_temp_dir)
|
564
544
|
return false
|
565
545
|
end
|
566
546
|
|
567
|
-
#
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
cmd = "#{gradle_bin} wrapper --gradle-version #{gradle_version}"
|
572
|
-
puts "执行命令: #{cmd}"
|
573
|
-
|
574
|
-
result = system(cmd)
|
575
|
-
if result
|
576
|
-
puts "\e[32m✓ gradle wrapper生成成功\e[0m"
|
577
|
-
# 重要:在清理临时目录之前,确保wrapper已经生成完成
|
578
|
-
# 等待一下确保文件写入完成
|
579
|
-
sleep(1)
|
580
|
-
return true
|
581
|
-
else
|
582
|
-
puts "\e[31m✗ gradle wrapper生成失败\e[0m"
|
583
|
-
return false
|
584
|
-
end
|
585
|
-
end
|
586
|
-
else
|
587
|
-
puts "\e[31m✗ 未找到gradle可执行文件\e[0m"
|
547
|
+
# 验证解压后的wrapper jar文件
|
548
|
+
unless verify_gradle_wrapper_jar_complete(extracted_wrapper_jar, gradle_version)
|
549
|
+
puts "\e[33m⚠ 解压后的wrapper jar文件验证失败\e[0m"
|
550
|
+
FileUtils.rm_rf(extract_temp_dir)
|
588
551
|
return false
|
589
552
|
end
|
590
553
|
|
554
|
+
# 复制解压后的wrapper jar文件到目标位置
|
555
|
+
FileUtils.cp(extracted_wrapper_jar, wrapper_jar_path)
|
556
|
+
puts "\e[32m✓ 成功从Gradle分发包提取gradle-wrapper.jar\e[0m"
|
557
|
+
|
558
|
+
# 清理临时目录
|
559
|
+
FileUtils.rm_rf(extract_temp_dir)
|
560
|
+
|
561
|
+
return true
|
562
|
+
|
591
563
|
rescue => e
|
592
|
-
puts "\e[31m✗
|
564
|
+
puts "\e[31m✗ 从Gradle分发包提取wrapper jar异常: #{e.message}\e[0m"
|
593
565
|
false
|
594
566
|
ensure
|
595
|
-
#
|
567
|
+
# 清理临时目录
|
596
568
|
if temp_dir && File.directory?(temp_dir)
|
597
|
-
puts "清理临时目录: #{temp_dir}"
|
598
569
|
FileUtils.rm_rf(temp_dir)
|
599
570
|
end
|
600
571
|
end
|
601
572
|
end
|
602
573
|
|
603
|
-
|
574
|
+
|
575
|
+
# 简化的curl下载方法(直接使用简化版本)
|
604
576
|
def download_with_curl(url, file_path)
|
605
577
|
puts "使用curl下载: #{url}"
|
606
578
|
|
607
|
-
#
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
'--user-agent', 'Pindo Gradle Wrapper Helper/1.0',
|
617
|
-
'-o', file_path, # 输出文件
|
618
|
-
url
|
619
|
-
]
|
579
|
+
# 检查curl是否可用
|
580
|
+
unless system("which curl > /dev/null 2>&1")
|
581
|
+
puts "\e[31m✗ curl命令不可用,请安装curl\e[0m"
|
582
|
+
return false
|
583
|
+
end
|
584
|
+
|
585
|
+
# 使用简化的curl命令
|
586
|
+
simple_cmd = "curl -L -o '#{file_path}' '#{url}'"
|
587
|
+
puts "执行curl命令: #{simple_cmd}"
|
620
588
|
|
621
|
-
if system(
|
589
|
+
if system(simple_cmd)
|
622
590
|
if File.exist?(file_path) && File.size(file_path) > 0
|
623
591
|
puts "\e[32m✓ curl下载成功: #{File.size(file_path)} 字节\e[0m"
|
624
592
|
return true
|
@@ -627,7 +595,7 @@ module Pindo
|
|
627
595
|
return false
|
628
596
|
end
|
629
597
|
else
|
630
|
-
puts "\e[31m✗ curl
|
598
|
+
puts "\e[31m✗ curl下载失败\e[0m"
|
631
599
|
return false
|
632
600
|
end
|
633
601
|
rescue => e
|
@@ -635,62 +603,10 @@ module Pindo
|
|
635
603
|
false
|
636
604
|
end
|
637
605
|
|
638
|
-
# 验证gradle-wrapper.jar文件
|
639
|
-
def verify_gradle_wrapper_jar(jar_path, expected_version)
|
640
|
-
# 检查文件是否存在且大小合理
|
641
|
-
File.exist?(jar_path) && File.size(jar_path) > MIN_GRADLE_WRAPPER_JAR_SIZE
|
642
|
-
end
|
643
606
|
|
644
607
|
|
645
|
-
# 从gradle分发包中提取gradle-wrapper.jar
|
646
|
-
def extract_gradle_wrapper_jar(zip_path, target_path)
|
647
|
-
puts "正在从gradle分发包中提取gradle-wrapper.jar..."
|
648
|
-
puts "ZIP文件: #{zip_path}"
|
649
|
-
puts "ZIP文件大小: #{File.size(zip_path)} 字节"
|
650
|
-
|
651
|
-
Zip::File.open(zip_path) do |zip_file|
|
652
|
-
puts "ZIP文件包含 #{zip_file.count} 个文件"
|
653
|
-
|
654
|
-
# 列出ZIP文件中的所有文件(用于调试)
|
655
|
-
puts "ZIP文件内容:"
|
656
|
-
zip_file.each_with_index do |entry, index|
|
657
|
-
puts " #{index + 1}. #{entry.name}"
|
658
|
-
break if index >= 10 # 只显示前10个文件
|
659
|
-
end
|
660
|
-
puts " ..." if zip_file.count > 10
|
661
|
-
|
662
|
-
# 查找gradle-wrapper.jar
|
663
|
-
wrapper_entry = zip_file.find { |entry| entry.name.include?('gradle-wrapper.jar') }
|
664
|
-
|
665
|
-
if wrapper_entry
|
666
|
-
puts "找到gradle-wrapper.jar: #{wrapper_entry.name}"
|
667
|
-
wrapper_entry.extract(target_path)
|
668
|
-
puts "\e[32m✓ gradle-wrapper.jar提取成功\e[0m"
|
669
|
-
return true
|
670
|
-
else
|
671
|
-
puts "\e[31m✗ 在gradle分发包中未找到gradle-wrapper.jar\e[0m"
|
672
|
-
puts "尝试查找其他可能的wrapper文件..."
|
673
|
-
|
674
|
-
# 查找其他可能的wrapper文件
|
675
|
-
wrapper_entries = zip_file.select { |entry| entry.name.include?('wrapper') }
|
676
|
-
if wrapper_entries.any?
|
677
|
-
puts "找到以下wrapper相关文件:"
|
678
|
-
wrapper_entries.each do |entry|
|
679
|
-
puts " - #{entry.name}"
|
680
|
-
end
|
681
|
-
else
|
682
|
-
puts "未找到任何wrapper相关文件"
|
683
|
-
end
|
684
|
-
|
685
|
-
return false
|
686
|
-
end
|
687
|
-
end
|
688
|
-
rescue => e
|
689
|
-
puts "\e[31m✗ 解压gradle-wrapper.jar失败: #{e.message}\e[0m"
|
690
|
-
false
|
691
|
-
end
|
692
608
|
|
693
|
-
# 改进的生成gradlew
|
609
|
+
# 改进的生成gradlew脚本逻辑(优先生成新脚本)
|
694
610
|
def generate_gradlew_script(project_path)
|
695
611
|
gradlew_path = File.join(project_path, "gradlew")
|
696
612
|
|
@@ -702,15 +618,7 @@ module Pindo
|
|
702
618
|
|
703
619
|
puts "正在生成gradlew脚本..."
|
704
620
|
|
705
|
-
# 1.
|
706
|
-
if use_builtin_gradlew_script(project_path)
|
707
|
-
return true
|
708
|
-
end
|
709
|
-
|
710
|
-
# 2. 回退到生成新脚本
|
711
|
-
puts "\e[33m⚠ 内置脚本不可用,生成新的 gradlew 脚本\e[0m"
|
712
|
-
|
713
|
-
# 生成gradlew脚本内容(通用脚本,不依赖版本)
|
621
|
+
# 1. 优先生成新的gradlew脚本
|
714
622
|
gradlew_content = generate_gradlew_content()
|
715
623
|
|
716
624
|
# 写入gradlew文件
|
@@ -719,8 +627,20 @@ module Pindo
|
|
719
627
|
# 设置执行权限
|
720
628
|
system("chmod", "+x", gradlew_path)
|
721
629
|
|
722
|
-
|
723
|
-
|
630
|
+
# 验证生成的脚本
|
631
|
+
if File.exist?(gradlew_path) && File.executable?(gradlew_path)
|
632
|
+
puts "\e[32m✓ gradlew脚本生成完成\e[0m"
|
633
|
+
return true
|
634
|
+
end
|
635
|
+
|
636
|
+
# 2. 如果生成失败,回退到内置脚本
|
637
|
+
puts "\e[33m⚠ 生成脚本失败,使用内置 gradlew 脚本\e[0m"
|
638
|
+
if use_builtin_gradlew_script(project_path)
|
639
|
+
return true
|
640
|
+
end
|
641
|
+
|
642
|
+
puts "\e[31m✗ 无法生成有效的 gradlew 脚本\e[0m"
|
643
|
+
false
|
724
644
|
end
|
725
645
|
|
726
646
|
# 生成gradlew脚本内容(通用脚本,适用于所有Gradle项目)
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'open3'
|
2
2
|
require 'json'
|
3
3
|
require 'singleton'
|
4
|
+
require 'pindo/base/funlog'
|
5
|
+
require 'pindo/config/pindoconfig'
|
4
6
|
|
5
7
|
# 定义Informative异常类
|
6
8
|
class Informative < StandardError; end
|
@@ -380,17 +382,95 @@ module Pindo
|
|
380
382
|
end
|
381
383
|
end
|
382
384
|
|
385
|
+
# 比较版本号 (语义化版本比较)
|
386
|
+
# 返回: true 如果 v1 < v2, false 否则
|
387
|
+
def version_less_than?(v1, v2)
|
388
|
+
return false if v1.nil? || v2.nil?
|
389
|
+
|
390
|
+
Gem::Version.new(v1) < Gem::Version.new(v2)
|
391
|
+
rescue ArgumentError
|
392
|
+
# 版本格式无效时的降级处理
|
393
|
+
v1.to_s < v2.to_s
|
394
|
+
end
|
395
|
+
|
396
|
+
# 检查 GoodUnityBuild 版本是否满足要求
|
397
|
+
def check_goodunitybuild_version(unity_exe_full_path, project_path)
|
398
|
+
library_version = get_library_version(unity_exe_full_path: unity_exe_full_path, project_path: project_path)
|
399
|
+
|
400
|
+
return unless library_version
|
401
|
+
|
402
|
+
required_version = Pindoconfig.instance.pindo_user_config_json["goodunitybuild_version"]
|
403
|
+
|
404
|
+
puts "当前使用的 GoodUnityBuild 版本: #{library_version}"
|
405
|
+
puts "要求的 GoodUnityBuild 最底版本: #{required_version}"
|
406
|
+
|
407
|
+
return unless required_version
|
408
|
+
|
409
|
+
if version_less_than?(library_version, required_version)
|
410
|
+
raise Informative, <<~MSG
|
411
|
+
GoodUnityBuild 版本过低!
|
412
|
+
当前版本: #{library_version}
|
413
|
+
要求版本: #{required_version}
|
414
|
+
请更新 GoodUnityBuild 库到 #{required_version} 或更高版本
|
415
|
+
MSG
|
416
|
+
end
|
417
|
+
rescue Informative
|
418
|
+
raise
|
419
|
+
rescue => e
|
420
|
+
puts "GoodUnityBuild 库版本检查失败: #{e.message}"
|
421
|
+
end
|
422
|
+
|
423
|
+
# 获取 GoodUnityBuild 库版本
|
424
|
+
def get_library_version(unity_exe_full_path:, project_path:)
|
425
|
+
cmd_args = [
|
426
|
+
unity_exe_full_path,
|
427
|
+
"-batchmode",
|
428
|
+
"-quit",
|
429
|
+
"-projectPath",
|
430
|
+
project_path.to_s,
|
431
|
+
"-executeMethod",
|
432
|
+
"GoodUnityBuild.BuildManager.PrintLibraryVersion"
|
433
|
+
]
|
434
|
+
|
435
|
+
stdout_str, _, _ = Open3.capture3(*cmd_args)
|
436
|
+
|
437
|
+
# 尝试多种模式匹配版本号
|
438
|
+
patterns = [
|
439
|
+
/GoodUnityBuild Version:\s*(\d+\.\d+\.\d+)/i,
|
440
|
+
/\[GoodUnityBuild\]\s+Version\s+(\d+\.\d+\.\d+)/i
|
441
|
+
]
|
442
|
+
|
443
|
+
patterns.each do |pattern|
|
444
|
+
if match = stdout_str.match(pattern)
|
445
|
+
return match[1]
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
# 从文件读取作为备用方案
|
450
|
+
version_file = File.join(project_path, "Logs", "GoodUnityBuild_version.txt")
|
451
|
+
if File.exist?(version_file)
|
452
|
+
content = File.read(version_file).strip
|
453
|
+
return content[/(\d+\.\d+\.\d+)/, 1]
|
454
|
+
end
|
455
|
+
|
456
|
+
nil
|
457
|
+
rescue => e
|
458
|
+
nil
|
459
|
+
end
|
383
460
|
|
384
461
|
def build_project(unity_exe_full_path:nil, project_path:nil, platform: nil, isLibrary: false)
|
385
462
|
|
386
463
|
# 检查是否有Unity进程在运行,传入Unity路径和项目路径以精确匹配
|
387
464
|
check_unity_processes(unity_exe_full_path: unity_exe_full_path, project_path: project_path)
|
388
465
|
|
466
|
+
# 检查 GoodUnityBuild 库版本
|
467
|
+
check_goodunitybuild_version(unity_exe_full_path, project_path)
|
468
|
+
|
389
469
|
additional_args = {}
|
390
470
|
additional_args[:platform] = platform if platform
|
391
471
|
additional_args[:buildtype] = 'library' if isLibrary
|
392
472
|
|
393
|
-
#
|
473
|
+
# 使用GoodUnityBuild.BuildManager.BatchBuild进行构建
|
394
474
|
result = execute_unity_command(unity_exe_full_path, project_path, additional_args)
|
395
475
|
|
396
476
|
if result[:success]
|
data/lib/pindo/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pindo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.6.
|
4
|
+
version: 5.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wade
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-10-05 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: claide
|
@@ -115,20 +115,20 @@ dependencies:
|
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.
|
118
|
+
version: '1.2'
|
119
119
|
- - ">="
|
120
120
|
- !ruby/object:Gem::Version
|
121
|
-
version: 1.
|
121
|
+
version: 1.2.0
|
122
122
|
type: :runtime
|
123
123
|
prerelease: false
|
124
124
|
version_requirements: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
126
|
- - "~>"
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version: 1.
|
128
|
+
version: '1.2'
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.
|
131
|
+
version: 1.2.0
|
132
132
|
- !ruby/object:Gem::Dependency
|
133
133
|
name: rqrcode
|
134
134
|
requirement: !ruby/object:Gem::Requirement
|