pindo 5.5.8 → 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.
@@ -264,88 +264,53 @@ module Pindo
264
264
  end
265
265
  end
266
266
 
267
- # 生成gradle-wrapper.jar(使用gradle wrapper命令)
267
+ # 改进的生成gradle-wrapper.jar逻辑(带缓存和内置文件回退)
268
268
  def download_gradle_wrapper_jar(wrapper_dir, gradle_version)
269
269
  wrapper_jar_path = File.join(wrapper_dir, "gradle-wrapper.jar")
270
270
 
271
- # 如果已存在且版本匹配,跳过生成
272
- if File.exist?(wrapper_jar_path) && verify_gradle_wrapper_jar(wrapper_jar_path, gradle_version)
273
- puts "\e[32m✓ gradle-wrapper.jar已存在且版本匹配\e[0m"
271
+ # 1. 检查现有文件是否有效
272
+ if File.exist?(wrapper_jar_path) && verify_gradle_wrapper_jar_complete(wrapper_jar_path, gradle_version)
273
+ puts "\e[32m✓ gradle-wrapper.jar已存在且验证通过\e[0m"
274
274
  return true
275
275
  end
276
276
 
277
277
  puts "正在生成gradle-wrapper.jar (版本: #{gradle_version})..."
278
278
 
279
- # 获取项目根目录
280
- project_path = File.dirname(File.dirname(wrapper_dir))
281
-
282
- # 检查是否有gradlew脚本
283
- gradlew_path = File.join(project_path, "gradlew")
284
-
285
- if File.exist?(gradlew_path)
286
- puts "发现gradlew脚本,使用gradle wrapper命令生成..."
287
- return generate_wrapper_with_gradlew(project_path, gradle_version)
288
- else
289
- puts "未发现gradlew脚本,使用gradle命令生成..."
290
- return generate_wrapper_with_gradle(project_path, gradle_version)
291
- end
292
- end
293
-
294
- # 使用gradlew脚本生成wrapper
295
- def generate_wrapper_with_gradlew(project_path, gradle_version)
296
- puts "使用gradlew脚本生成wrapper..."
297
-
298
- # 切换到项目目录
299
- Dir.chdir(project_path) do
300
- # 使用gradlew wrapper命令生成wrapper
301
- cmd = "./gradlew wrapper --gradle-version #{gradle_version}"
302
- puts "执行命令: #{cmd}"
303
-
304
- result = system(cmd)
305
- if result
306
- puts "\e[32m✓ gradle wrapper生成成功\e[0m"
279
+ # 2. 尝试使用缓存
280
+ cached_jar = get_cached_gradle_wrapper_jar(gradle_version)
281
+ if cached_jar
282
+ FileUtils.cp(cached_jar, wrapper_jar_path)
283
+ # 验证缓存文件
284
+ if verify_gradle_wrapper_jar_complete(wrapper_jar_path, gradle_version)
285
+ puts "\e[32m✓ 从缓存复制 gradle-wrapper.jar 成功\e[0m"
307
286
  return true
308
287
  else
309
- puts "\e[31m✗ gradle wrapper生成失败\e[0m"
310
- return false
288
+ puts "\e[33m⚠ 缓存文件验证失败,继续下载\e[0m"
311
289
  end
312
290
  end
313
- rescue => e
314
- puts "\e[31m✗ gradle wrapper生成异常: #{e.message}\e[0m"
315
- false
316
- end
317
-
318
- # 使用gradle命令生成wrapper
319
- def generate_wrapper_with_gradle(project_path, gradle_version)
320
- puts "使用gradle命令生成wrapper..."
321
-
322
- # 检查系统是否有gradle命令
323
- unless system("which gradle > /dev/null 2>&1")
324
- puts "\e[33m⚠ 系统未安装gradle,使用简化的wrapper生成方式...\e[0m"
325
- return generate_wrapper_manually(project_path, gradle_version)
326
- end
327
291
 
328
- # 切换到项目目录
329
- Dir.chdir(project_path) do
330
- # 使用gradle wrapper命令生成wrapper
331
- cmd = "gradle wrapper --gradle-version #{gradle_version}"
332
- puts "执行命令: #{cmd}"
333
-
334
- result = system(cmd)
335
- if result
336
- puts "\e[32m✓ gradle wrapper生成成功\e[0m"
292
+ # 3. 尝试下载
293
+ if download_standard_wrapper_jar(wrapper_jar_path, gradle_version)
294
+ # 验证下载的文件
295
+ if verify_gradle_wrapper_jar_complete(wrapper_jar_path, gradle_version)
337
296
  return true
338
297
  else
339
- puts "\e[31m✗ gradle wrapper生成失败\e[0m"
340
- return false
298
+ puts "\e[33m⚠ 下载文件验证失败,使用内置文件\e[0m"
341
299
  end
342
300
  end
343
- rescue => e
344
- puts "\e[31m✗ gradle wrapper生成异常: #{e.message}\e[0m"
301
+
302
+ # 4. 最后回退:使用内置文件
303
+ puts "\e[33m⚠ 所有下载源失败,使用内置 gradle-wrapper.jar\e[0m"
304
+ if use_builtin_gradle_wrapper_jar(wrapper_jar_path, gradle_version)
305
+ return true
306
+ end
307
+
308
+ puts "\e[31m✗ 无法获取有效的 gradle-wrapper.jar\e[0m"
345
309
  false
346
310
  end
347
311
 
348
- # 手动生成wrapper(不使用临时目录)
312
+
313
+ # 改进的手动生成wrapper逻辑(带内置文件回退)
349
314
  def generate_wrapper_manually(project_path, gradle_version)
350
315
  puts "手动生成gradle wrapper..."
351
316
 
@@ -353,20 +318,24 @@ module Pindo
353
318
  wrapper_dir = File.join(project_path, "gradle/wrapper")
354
319
  FileUtils.mkdir_p(wrapper_dir)
355
320
 
356
- # 生成gradlew脚本
321
+ # 1. 生成gradlew脚本(带内置文件回退)
357
322
  gradlew_path = File.join(project_path, "gradlew")
358
323
  unless File.exist?(gradlew_path)
359
324
  puts "生成gradlew脚本..."
360
- generate_gradlew_script(project_path)
325
+ unless generate_gradlew_script(project_path)
326
+ puts "\e[31m✗ 生成gradlew脚本失败\e[0m"
327
+ return false
328
+ end
361
329
  end
362
330
 
363
- # 生成gradle-wrapper.jar(使用预定义的jar文件)
331
+ # 2. 生成gradle-wrapper.jar(带缓存和内置文件回退)
364
332
  wrapper_jar_path = File.join(wrapper_dir, "gradle-wrapper.jar")
365
333
  unless File.exist?(wrapper_jar_path)
366
334
  puts "生成gradle-wrapper.jar..."
367
- # 这里可以使用一个通用的gradle-wrapper.jar文件
368
- # 或者从网络下载一个标准的jar文件
369
- return download_standard_wrapper_jar(wrapper_jar_path, gradle_version)
335
+ unless download_gradle_wrapper_jar(wrapper_dir, gradle_version)
336
+ puts "\e[31m✗ 生成gradle-wrapper.jar失败\e[0m"
337
+ return false
338
+ end
370
339
  end
371
340
 
372
341
  puts "\e[32m✓ gradle wrapper手动生成成功\e[0m"
@@ -376,120 +345,248 @@ module Pindo
376
345
  false
377
346
  end
378
347
 
379
- # 下载标准的gradle-wrapper.jar
348
+ # 获取缓存目录路径
349
+ def get_gradle_wrapper_cache_dir
350
+ File.expand_path("~/.pindo/pindo_common_config/android_tools/gradle-wrapper-cache")
351
+ end
352
+
353
+ # 获取内置文件路径
354
+ def get_builtin_gradle_wrapper_jar_path
355
+ File.expand_path("~/.pindo/pindo_common_config/android_tools/gradle-wrapper.jar")
356
+ end
357
+
358
+ def get_builtin_gradlew_path
359
+ File.expand_path("~/.pindo/pindo_common_config/android_tools/gradlew")
360
+ end
361
+
362
+ # 检查并获取缓存的 gradle-wrapper.jar
363
+ def get_cached_gradle_wrapper_jar(gradle_version)
364
+ cache_dir = get_gradle_wrapper_cache_dir
365
+ FileUtils.mkdir_p(cache_dir)
366
+
367
+ cached_jar = File.join(cache_dir, "gradle-wrapper-#{gradle_version}.jar")
368
+
369
+ if File.exist?(cached_jar) && verify_gradle_wrapper_jar_complete(cached_jar, gradle_version)
370
+ puts "\e[32m✓ 使用缓存的 gradle-wrapper.jar (版本: #{gradle_version})\e[0m"
371
+ return cached_jar
372
+ end
373
+
374
+ nil
375
+ end
376
+
377
+ # 增强的 gradle-wrapper.jar 验证
378
+ def verify_gradle_wrapper_jar_complete(jar_path, expected_version)
379
+ return false unless File.exist?(jar_path)
380
+
381
+ # 检查文件大小(正常应该在 50KB-200KB 之间)
382
+ file_size = File.size(jar_path)
383
+ unless file_size.between?(50000, 200000)
384
+ puts "\e[33m⚠ gradle-wrapper.jar 大小异常: #{file_size} 字节\e[0m"
385
+ return false
386
+ end
387
+
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"
404
+ return false
405
+ end
406
+
407
+ puts "\e[32m✓ gradle-wrapper.jar 验证通过\e[0m"
408
+ true
409
+ end
410
+
411
+ # 检查 jar 文件是否包含指定类
412
+ def verify_jar_contains_class(jar_path, class_name)
413
+ class_file = class_name.gsub('.', '/') + '.class'
414
+ system("jar -tf #{jar_path} | grep -q '#{class_file}'")
415
+ end
416
+
417
+ # 使用内置的 gradle-wrapper.jar
418
+ def use_builtin_gradle_wrapper_jar(wrapper_jar_path, gradle_version)
419
+ builtin_jar = get_builtin_gradle_wrapper_jar_path
420
+
421
+ unless File.exist?(builtin_jar)
422
+ puts "\e[31m✗ 内置 gradle-wrapper.jar 不存在: #{builtin_jar}\e[0m"
423
+ return false
424
+ end
425
+
426
+ # 复制内置文件
427
+ FileUtils.cp(builtin_jar, wrapper_jar_path)
428
+ puts "\e[33m⚠ 使用内置的 gradle-wrapper.jar\e[0m"
429
+
430
+ # 验证复制后的文件
431
+ if verify_gradle_wrapper_jar_complete(wrapper_jar_path, gradle_version)
432
+ puts "\e[32m✓ 内置 gradle-wrapper.jar 验证通过\e[0m"
433
+ return true
434
+ else
435
+ puts "\e[31m✗ 内置 gradle-wrapper.jar 验证失败\e[0m"
436
+ return false
437
+ end
438
+ end
439
+
440
+ # 使用内置的 gradlew 脚本
441
+ def use_builtin_gradlew_script(project_path)
442
+ builtin_gradlew = get_builtin_gradlew_path
443
+ gradlew_path = File.join(project_path, "gradlew")
444
+
445
+ unless File.exist?(builtin_gradlew)
446
+ puts "\e[31m✗ 内置 gradlew 脚本不存在: #{builtin_gradlew}\e[0m"
447
+ return false
448
+ end
449
+
450
+ # 复制内置脚本
451
+ FileUtils.cp(builtin_gradlew, gradlew_path)
452
+ system("chmod", "+x", gradlew_path)
453
+ puts "\e[33m⚠ 使用内置的 gradlew 脚本\e[0m"
454
+ puts "\e[32m✓ 内置 gradlew 脚本复制完成\e[0m"
455
+ true
456
+ end
457
+
458
+ # 保存到缓存的 gradle-wrapper.jar
459
+ def save_to_cache(wrapper_jar_path, gradle_version)
460
+ cache_dir = get_gradle_wrapper_cache_dir
461
+ FileUtils.mkdir_p(cache_dir)
462
+
463
+ cached_jar = File.join(cache_dir, "gradle-wrapper-#{gradle_version}.jar")
464
+ FileUtils.cp(wrapper_jar_path, cached_jar)
465
+ puts "\e[32m✓ gradle-wrapper.jar 已保存到缓存: #{cached_jar}\e[0m"
466
+ end
467
+
468
+ # 改进的下载标准 gradle-wrapper.jar(使用正确的下载策略)
380
469
  def download_standard_wrapper_jar(wrapper_jar_path, gradle_version)
381
470
  puts "下载标准的gradle-wrapper.jar..."
382
471
 
383
- # 使用gradle官方提供的wrapper jar下载URL
384
- wrapper_jar_urls = [
385
- "https://github.com/gradle/gradle/raw/v#{gradle_version}/gradle/wrapper/gradle-wrapper.jar",
386
- "https://raw.githubusercontent.com/gradle/gradle/v#{gradle_version}/gradle/wrapper/gradle-wrapper.jar"
472
+ # 使用正确的下载策略:从Gradle分发包中提取wrapper jar
473
+ gradle_dist_urls = [
474
+ "https://services.gradle.org/distributions/gradle-#{gradle_version}-bin.zip"
387
475
  ]
388
476
 
389
- wrapper_jar_urls.each do |url|
390
- puts "尝试下载: #{url}"
391
- if download_with_curl(url, wrapper_jar_path)
392
- if File.exist?(wrapper_jar_path) && File.size(wrapper_jar_path) > 1000
393
- puts "\e[32m✓ gradle-wrapper.jar下载成功\e[0m"
394
- return true
395
- 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
396
484
  end
397
485
  end
398
486
 
399
- puts "\e[31m✗ 下载gradle-wrapper.jar失败\e[0m"
487
+
488
+ puts "\e[31m✗ 下载 gradle-wrapper.jar 失败\e[0m"
400
489
  false
401
490
  end
402
491
 
403
- # 下载gradle分发包并生成wrapper
404
- def download_and_generate_wrapper(project_path, gradle_version)
405
- puts "下载gradle分发包并生成wrapper..."
406
-
492
+ # 从Gradle分发包中下载并提取wrapper jar
493
+ def download_and_extract_wrapper_from_distribution(dist_url, wrapper_jar_path, gradle_version)
407
494
  begin
408
495
  # 创建临时目录
409
- temp_dir = Dir.mktmpdir("gradle_download_")
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文件
410
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
411
527
 
412
- # 下载gradle分发包
413
- download_urls = [
414
- "https://services.gradle.org/distributions/gradle-#{gradle_version}-bin.zip",
415
- "https://github.com/gradle/gradle-distributions/releases/download/v#{gradle_version}/gradle-#{gradle_version}-bin.zip"
416
- ]
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}'"
417
531
 
418
- download_success = false
419
- download_urls.each do |url|
420
- puts "尝试下载: #{url}"
421
- zip_path = File.join(temp_dir, "gradle-#{gradle_version}-bin.zip")
422
-
423
- if download_with_curl(url, zip_path)
424
- # 解压gradle分发包
425
- if system("cd #{temp_dir} && unzip -q gradle-#{gradle_version}-bin.zip")
426
- download_success = true
427
- puts "✓ gradle分发包下载并解压成功"
428
- break
429
- end
430
- 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
431
536
  end
432
537
 
433
- unless download_success
434
- puts "\e[31m✗ 下载gradle分发包失败\e[0m"
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)
435
544
  return false
436
545
  end
437
546
 
438
- # 使用下载的gradle生成wrapper
439
- gradle_bin = File.join(gradle_dir, "bin", "gradle")
440
- if File.exist?(gradle_bin)
441
- Dir.chdir(project_path) do
442
- cmd = "#{gradle_bin} wrapper --gradle-version #{gradle_version}"
443
- puts "执行命令: #{cmd}"
444
-
445
- result = system(cmd)
446
- if result
447
- puts "\e[32m✓ gradle wrapper生成成功\e[0m"
448
- # 重要:在清理临时目录之前,确保wrapper已经生成完成
449
- # 等待一下确保文件写入完成
450
- sleep(1)
451
- return true
452
- else
453
- puts "\e[31m✗ gradle wrapper生成失败\e[0m"
454
- return false
455
- end
456
- end
457
- else
458
- 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)
459
551
  return false
460
552
  end
461
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
+
462
563
  rescue => e
463
- puts "\e[31m✗ 下载并生成wrapper异常: #{e.message}\e[0m"
564
+ puts "\e[31m✗ 从Gradle分发包提取wrapper jar异常: #{e.message}\e[0m"
464
565
  false
465
566
  ensure
466
- # 延迟清理临时目录,确保wrapper生成完成
567
+ # 清理临时目录
467
568
  if temp_dir && File.directory?(temp_dir)
468
- puts "清理临时目录: #{temp_dir}"
469
569
  FileUtils.rm_rf(temp_dir)
470
570
  end
471
571
  end
472
572
  end
473
573
 
474
- # 使用curl下载文件(备用方案)
574
+
575
+ # 简化的curl下载方法(直接使用简化版本)
475
576
  def download_with_curl(url, file_path)
476
577
  puts "使用curl下载: #{url}"
477
578
 
478
- # 使用curl命令下载,支持重定向和SSL
479
- curl_cmd = [
480
- 'curl',
481
- '-L', # 跟随重定向
482
- '-s', # 静默模式
483
- '--connect-timeout', '30', # 连接超时
484
- '--max-time', '300', # 最大时间5分钟
485
- '--retry', '3', # 重试3次
486
- '--retry-delay', '2', # 重试延迟2秒
487
- '--user-agent', 'Pindo Gradle Wrapper Helper/1.0',
488
- '-o', file_path, # 输出文件
489
- url
490
- ]
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}"
491
588
 
492
- if system(*curl_cmd)
589
+ if system(simple_cmd)
493
590
  if File.exist?(file_path) && File.size(file_path) > 0
494
591
  puts "\e[32m✓ curl下载成功: #{File.size(file_path)} 字节\e[0m"
495
592
  return true
@@ -498,7 +595,7 @@ module Pindo
498
595
  return false
499
596
  end
500
597
  else
501
- puts "\e[31m✗ curl下载失败: 命令执行失败\e[0m"
598
+ puts "\e[31m✗ curl下载失败\e[0m"
502
599
  return false
503
600
  end
504
601
  rescue => e
@@ -506,62 +603,10 @@ module Pindo
506
603
  false
507
604
  end
508
605
 
509
- # 验证gradle-wrapper.jar文件
510
- def verify_gradle_wrapper_jar(jar_path, expected_version)
511
- # 检查文件是否存在且大小合理
512
- File.exist?(jar_path) && File.size(jar_path) > MIN_GRADLE_WRAPPER_JAR_SIZE
513
- end
514
606
 
515
607
 
516
- # 从gradle分发包中提取gradle-wrapper.jar
517
- def extract_gradle_wrapper_jar(zip_path, target_path)
518
- puts "正在从gradle分发包中提取gradle-wrapper.jar..."
519
- puts "ZIP文件: #{zip_path}"
520
- puts "ZIP文件大小: #{File.size(zip_path)} 字节"
521
-
522
- Zip::File.open(zip_path) do |zip_file|
523
- puts "ZIP文件包含 #{zip_file.count} 个文件"
524
-
525
- # 列出ZIP文件中的所有文件(用于调试)
526
- puts "ZIP文件内容:"
527
- zip_file.each_with_index do |entry, index|
528
- puts " #{index + 1}. #{entry.name}"
529
- break if index >= 10 # 只显示前10个文件
530
- end
531
- puts " ..." if zip_file.count > 10
532
-
533
- # 查找gradle-wrapper.jar
534
- wrapper_entry = zip_file.find { |entry| entry.name.include?('gradle-wrapper.jar') }
535
-
536
- if wrapper_entry
537
- puts "找到gradle-wrapper.jar: #{wrapper_entry.name}"
538
- wrapper_entry.extract(target_path)
539
- puts "\e[32m✓ gradle-wrapper.jar提取成功\e[0m"
540
- return true
541
- else
542
- puts "\e[31m✗ 在gradle分发包中未找到gradle-wrapper.jar\e[0m"
543
- puts "尝试查找其他可能的wrapper文件..."
544
-
545
- # 查找其他可能的wrapper文件
546
- wrapper_entries = zip_file.select { |entry| entry.name.include?('wrapper') }
547
- if wrapper_entries.any?
548
- puts "找到以下wrapper相关文件:"
549
- wrapper_entries.each do |entry|
550
- puts " - #{entry.name}"
551
- end
552
- else
553
- puts "未找到任何wrapper相关文件"
554
- end
555
-
556
- return false
557
- end
558
- end
559
- rescue => e
560
- puts "\e[31m✗ 解压gradle-wrapper.jar失败: #{e.message}\e[0m"
561
- false
562
- end
563
608
 
564
- # 生成gradlew脚本
609
+ # 改进的生成gradlew脚本逻辑(优先生成新脚本)
565
610
  def generate_gradlew_script(project_path)
566
611
  gradlew_path = File.join(project_path, "gradlew")
567
612
 
@@ -573,7 +618,7 @@ module Pindo
573
618
 
574
619
  puts "正在生成gradlew脚本..."
575
620
 
576
- # 生成gradlew脚本内容(通用脚本,不依赖版本)
621
+ # 1. 优先生成新的gradlew脚本
577
622
  gradlew_content = generate_gradlew_content()
578
623
 
579
624
  # 写入gradlew文件
@@ -582,8 +627,20 @@ module Pindo
582
627
  # 设置执行权限
583
628
  system("chmod", "+x", gradlew_path)
584
629
 
585
- puts "\e[32m✓ gradlew脚本生成完成\e[0m"
586
- true
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
587
644
  end
588
645
 
589
646
  # 生成gradlew脚本内容(通用脚本,适用于所有Gradle项目)
@@ -107,6 +107,18 @@ module Pindo
107
107
  end
108
108
 
109
109
  def get_selected_dev_bundleid()
110
+ # 检查环境变量
111
+ env_bundleid = ENV['PINDO_BUNDLE_ID']
112
+ if env_bundleid && !env_bundleid.empty?
113
+ puts "\n使用环境变量指定的Bundle ID: #{env_bundleid}"
114
+ puts
115
+ # 保存到缓存
116
+ require_relative '../base/pindocontext'
117
+ context = Pindo::PindoContext.instance
118
+ context.set_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID, env_bundleid)
119
+ return env_bundleid
120
+ end
121
+
110
122
  # 检查缓存
111
123
  require_relative '../base/pindocontext'
112
124
  context = Pindo::PindoContext.instance
@@ -138,6 +138,60 @@ module Pindo
138
138
  latest_tag = get_latest_version_tag(project_dir: current_git_root_path)
139
139
 
140
140
  unless is_tag_at_head?(git_root_dir: current_git_root_path, tag_name: latest_tag)
141
+ # 检查环境变量
142
+ env_tag_decision = ENV['PINDO_TAG_DECISION']
143
+ if env_tag_decision && !env_tag_decision.empty?
144
+ case env_tag_decision.downcase
145
+ when 'new', 'new_tag', '1'
146
+ puts "\n环境变量指定:新增版本号,打新Tag"
147
+ puts
148
+ tag_action_parms = []
149
+ is_need_add_tag = true
150
+ # 保存到缓存
151
+ context = PindoContext.instance
152
+ decision = {
153
+ tag_action_parms: tag_action_parms,
154
+ is_need_add_tag: is_need_add_tag,
155
+ action: :new_tag,
156
+ description: "新增版本号,打新Tag"
157
+ }
158
+ context.set_selection(PindoContext::SelectionKey::TAG_DECISION, decision)
159
+ return is_need_add_tag, tag_action_parms
160
+ when 'retag', 'recreate', '2'
161
+ puts "\n环境变量指定:将上次的Tag删除重新打Tag"
162
+ puts
163
+ tag_action_parms = ['--retag']
164
+ is_need_add_tag = true
165
+ # 保存到缓存
166
+ context = PindoContext.instance
167
+ decision = {
168
+ tag_action_parms: tag_action_parms,
169
+ is_need_add_tag: is_need_add_tag,
170
+ action: :recreate_tag,
171
+ description: "将上次的Tag删除重新打Tag"
172
+ }
173
+ context.set_selection(PindoContext::SelectionKey::TAG_DECISION, decision)
174
+ return is_need_add_tag, tag_action_parms
175
+ when 'skip', 'no', 'none', '3'
176
+ puts "\n环境变量指定:不需要Tag继续编译"
177
+ puts
178
+ tag_action_parms = nil
179
+ is_need_add_tag = false
180
+ # 保存到缓存
181
+ context = PindoContext.instance
182
+ decision = {
183
+ tag_action_parms: tag_action_parms,
184
+ is_need_add_tag: is_need_add_tag,
185
+ action: :continue_without_tag,
186
+ description: "不需要Tag继续编译且上传"
187
+ }
188
+ context.set_selection(PindoContext::SelectionKey::TAG_DECISION, decision)
189
+ return is_need_add_tag, tag_action_parms
190
+ when 'exit', 'quit', '4'
191
+ raise Informative, "环境变量指定:终止退出编译!"
192
+ end
193
+ end
194
+
141
195
  if auto_mode
142
196
  # 在自动化模式或没有交互式终端时,默认选择新增版本号打新Tag
143
197
  puts "检测到当前代码没有打Tag,在自动模式下将自动新增版本号并打新Tag"