pindo 5.13.6 → 5.13.9

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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/command/android/autobuild.rb +38 -7
  3. data/lib/pindo/command/appstore/adhocbuild.rb +52 -6
  4. data/lib/pindo/command/appstore/autobuild.rb +51 -5
  5. data/lib/pindo/command/appstore/autoresign.rb +2 -2
  6. data/lib/pindo/command/ios/autobuild.rb +62 -16
  7. data/lib/pindo/command/ios/fixproj.rb +92 -0
  8. data/lib/pindo/command/ios.rb +1 -0
  9. data/lib/pindo/command/jps/upload.rb +1 -1
  10. data/lib/pindo/command/unity/autobuild.rb +47 -10
  11. data/lib/pindo/command/web/autobuild.rb +44 -14
  12. data/lib/pindo/module/pgyer/pgyerhelper.rb +1 -1
  13. data/lib/pindo/module/task/model/git_tag_task.rb +1 -1
  14. data/lib/pindo/module/task/model/{jps_upload_task.rb → jps/jps_upload_task.rb} +2 -2
  15. data/lib/pindo/module/task/model/{ipa_local_resign_task.rb → resign/ipa_local_resign_task.rb} +2 -2
  16. data/lib/pindo/module/task/model/{jps_resign_task.rb → resign/jps_resign_task.rb} +2 -2
  17. data/lib/pindo/module/task/model/unity/unity_config_task.rb +107 -0
  18. data/lib/pindo/module/task/model/{unity_export_task.rb → unity/unity_export_task.rb} +71 -74
  19. data/lib/pindo/module/task/model/unity/unity_update_task.rb +94 -0
  20. data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +155 -0
  21. data/lib/pindo/module/task/model/unity_task.rb +113 -0
  22. data/lib/pindo/module/task/task_manager.rb +9 -1
  23. data/lib/pindo/module/unity/unity_command_helper.rb +188 -0
  24. data/lib/pindo/module/unity/unity_env_helper.rb +208 -0
  25. data/lib/pindo/module/unity/unity_helper.rb +189 -746
  26. data/lib/pindo/module/unity/unity_proc_helper.rb +390 -0
  27. data/lib/pindo/module/xcode/xcode_build_helper.rb +3 -3
  28. data/lib/pindo/version.rb +1 -1
  29. metadata +13 -5
@@ -7,9 +7,11 @@ require 'pindo/module/unity/unity_helper'
7
7
  require 'pindo/module/build/build_helper'
8
8
  require 'pindo/module/task/task_manager'
9
9
  require 'pindo/module/task/model/git_tag_task'
10
- require 'pindo/module/task/model/unity_export_task'
10
+ require 'pindo/module/task/model/unity/unity_update_task'
11
+ require 'pindo/module/task/model/unity/unity_yoo_asset_task'
12
+ require 'pindo/module/task/model/unity/unity_export_task'
11
13
  require 'pindo/module/task/model/build_task'
12
- require 'pindo/module/task/model/jps_upload_task'
14
+ require 'pindo/module/task/model/jps/jps_upload_task'
13
15
 
14
16
  module Pindo
15
17
  class Command
@@ -65,19 +67,23 @@ module Pindo
65
67
  # 发送通知
66
68
  ['--send', '上传成功后发送测试通知'],
67
69
  # 编译完成后再本地打开webgl包
68
- ['--run', '编译完成后再本地打开webgl包']
70
+ ['--run', '编译完成后再本地打开webgl包'],
71
+ ['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
72
+ ['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
69
73
  ].concat(super)
70
74
  end
71
75
 
72
76
  def initialize(argv)
73
77
 
74
78
  @args_deploy_flag = argv.flag?('deploy', false)
75
- @args_adhoc_flag = argv.flag?('adhoc', false)
76
- @args_upload_flag = argv.flag?('upload', false)
77
- @args_send_flag = argv.flag?('send', false)
78
- @args_proj_name = argv.option('proj')
79
+ @args_adhoc_flag = argv.flag?('adhoc', false)
80
+ @args_upload_flag = argv.flag?('upload', false)
81
+ @args_send_flag = argv.flag?('send', false)
82
+ @args_proj_name = argv.option('proj')
79
83
  @args_bundle_id = argv.option('bundleid')
80
84
  @args_run_flag = argv.flag?('run', false)
85
+ @args_skip_lib = argv.flag?('skiplib', false)
86
+ @args_skip_yoo = argv.flag?('skipyoo', false)
81
87
 
82
88
  if @args_send_flag
83
89
  @args_upload_flag = true
@@ -197,7 +203,31 @@ module Pindo
197
203
  tasks << git_tag_task
198
204
  end
199
205
 
200
- # 2. Unity 导出任务
206
+ # 记录上一个任务,用于依赖链
207
+ last_task = tasks.first
208
+
209
+ # 2. Unity 更新必备库任务(可选)
210
+ unless @args_skip_lib
211
+ unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
212
+ project_path: config[:project_path]
213
+ )
214
+ unity_update_task.dependencies << last_task.id if last_task
215
+ tasks << unity_update_task
216
+ last_task = unity_update_task
217
+ end
218
+
219
+ # 3. Unity YooAsset 资源构建任务(可选,依赖上一个任务)
220
+ unless @args_skip_yoo
221
+ unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
222
+ 'web',
223
+ project_path: config[:project_path]
224
+ )
225
+ unity_yoo_task.dependencies << last_task.id if last_task
226
+ tasks << unity_yoo_task
227
+ last_task = unity_yoo_task
228
+ end
229
+
230
+ # 4. Unity 导出任务(依赖上一个任务)
201
231
  # Web 平台导出路径
202
232
  web_export_path = File.join(config[:project_path], "GoodPlatform", "WebGL")
203
233
 
@@ -205,16 +235,16 @@ module Pindo
205
235
  unity_context[:project_name] = @args_proj_name if @args_proj_name
206
236
  unity_context[:index_count] = config[:index_count]
207
237
 
208
- unity_task = Pindo::TaskSystem::UnityExportTask.new(
238
+ unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
209
239
  'web',
210
240
  project_path: config[:project_path],
211
241
  export_path: web_export_path,
212
242
  context: unity_context
213
243
  )
214
- unity_task.dependencies << tasks.first.id if tasks.any?
215
- tasks << unity_task
244
+ unity_export_task.dependencies << last_task.id if last_task
245
+ tasks << unity_export_task
216
246
 
217
- # 3. 构建任务(Web 只需要检查输出)
247
+ # 5. 构建任务(Web 只需要检查输出)
218
248
  build_task = Pindo::TaskSystem::BuildTask.create_task(
219
249
  platform: :web,
220
250
  mode: :dev,
@@ -227,10 +257,10 @@ module Pindo
227
257
  workflow_info: config[:workflow_info]
228
258
  }
229
259
  )
230
- build_task.dependencies << unity_task.id
260
+ build_task.dependencies << unity_export_task.id
231
261
  tasks << build_task
232
262
 
233
- # 4. 上传任务(如果需要)
263
+ # 6. 上传任务(如果需要)
234
264
  if @args_upload_flag
235
265
  # WebGL 输出路径: GoodPlatform/WebGL/build
236
266
  webgl_build_path = File.join(config[:project_path], 'GoodPlatform', 'WebGL', 'build')
@@ -670,7 +670,7 @@ module Pindo
670
670
  args_ipa_file_dir = File.expand_path(File::dirname(ipa_file_upload))
671
671
  ipa_file_upload=File.join(args_ipa_file_dir, File.basename(ipa_file_upload))
672
672
  current_project_dir = Dir.pwd
673
- description = get_description_from_git(current_project_dir:current_project_dir)
673
+ # description = get_description_from_git(current_project_dir:current_project_dir)
674
674
  # get_description_from_git 现在会在失败时抛出异常,成功时返回有效的描述
675
675
  # 所以不需要再检查 nil 或空值
676
676
 
@@ -31,7 +31,7 @@ module Pindo
31
31
  def initialize(project_path, options = {})
32
32
  @project_path = project_path
33
33
 
34
- super("Git 标签检查", options)
34
+ super("Git仓库打标签", options)
35
35
  end
36
36
 
37
37
  def validate
@@ -1,5 +1,5 @@
1
- require_relative '../pindo_task'
2
- require_relative '../task_config'
1
+ require 'pindo/module/task/pindo_task'
2
+ require 'pindo/module/task/task_config'
3
3
  require 'pindo/module/pgyer/pgyerhelper'
4
4
 
5
5
  module Pindo
@@ -1,5 +1,5 @@
1
- require_relative '../pindo_task'
2
- require_relative '../task_config'
1
+ require 'pindo/module/task/pindo_task'
2
+ require 'pindo/module/task/task_config'
3
3
 
4
4
  module Pindo
5
5
  module TaskSystem
@@ -1,5 +1,5 @@
1
- require_relative '../pindo_task'
2
- require_relative '../task_config'
1
+ require 'pindo/module/task/pindo_task'
2
+ require 'pindo/module/task/task_config'
3
3
  require 'pindo/module/pgyer/pgyerhelper'
4
4
 
5
5
  module Pindo
@@ -0,0 +1,107 @@
1
+ require 'pindo/module/task/model/unity_task'
2
+ require 'pindo/base/funlog'
3
+
4
+ module Pindo
5
+ module TaskSystem
6
+ # Unity 配置编译模式任务
7
+ # 用于配置 Unity 项目的编译模式(dev/adhoc/release)
8
+ class UnityConfigTask < UnityTask
9
+ attr_reader :deploy_mode
10
+
11
+ def self.task_type
12
+ :unity_config
13
+ end
14
+
15
+ # @param deploy_mode [String] 部署模式 ('dev', 'adhoc', 'release')
16
+ # @param options [Hash] 额外选项
17
+ # - :project_path [String] Unity 项目路径(默认当前目录)
18
+ def initialize(deploy_mode = 'dev', options = {})
19
+ @deploy_mode = deploy_mode
20
+ @unity_exe_path = nil # 将在 do_work 中自动查找
21
+
22
+ # 传递 project_path 给基类
23
+ project_path = options[:project_path] || Dir.pwd
24
+ super("Unity 配置编译模式 (#{deploy_mode})", project_path: project_path, options: options)
25
+ end
26
+
27
+ def validate
28
+ super
29
+
30
+ # 验证 Unity 工程是否存在
31
+ unless unity_helper.unity_project?(@unity_root_path)
32
+ raise Informative, "当前目录不是 Unity 工程:#{@unity_root_path}"
33
+ end
34
+
35
+ # 验证 deploy_mode 参数
36
+ valid_modes = ['dev', 'adhoc', 'release']
37
+ unless valid_modes.include?(@deploy_mode)
38
+ raise Informative, "无效的编译模式: #{@deploy_mode},必须是 #{valid_modes.join(', ')}"
39
+ end
40
+
41
+ true
42
+ end
43
+
44
+ protected
45
+
46
+ def do_work
47
+ # 获取 Unity 版本
48
+ project_unity_version = get_unity_version
49
+
50
+ # 查找 Unity 执行路径
51
+ unless @unity_exe_path
52
+ @unity_exe_path = unity_helper.find_unity_path(
53
+ project_unity_version: project_unity_version,
54
+ force_change_version: false
55
+ )
56
+ end
57
+
58
+ if @unity_exe_path.nil? || @unity_exe_path.empty?
59
+ raise Informative, "无法找到 Unity 执行路径"
60
+ end
61
+
62
+ # 显示 Unity 信息
63
+ puts "项目路径: #{@unity_root_path}"
64
+ puts "Unity 执行路径: #{@unity_exe_path}"
65
+ puts "Unity 版本: #{project_unity_version}"
66
+ puts "编译模式: #{@deploy_mode}\n"
67
+
68
+ # 执行编译模式配置
69
+ result = config_build_mode
70
+
71
+ result
72
+ end
73
+
74
+ # 重写清理方法,提供更精确的参数
75
+ def cleanup_unity_processes
76
+ Funlog.warning("清理 Unity 进程...")
77
+ begin
78
+ Pindo::Unity::UnityProcHelper.cleanup_unity_processes_after_build(
79
+ unity_exe_full_path: @unity_exe_path,
80
+ project_path: @unity_root_path
81
+ )
82
+ rescue => e
83
+ Funlog.warning("清理 Unity 进程失败: #{e.message}")
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ # 配置编译模式
90
+ def config_build_mode
91
+ # 调用 UnityHelper 的 config_build_mode 方法
92
+ result = unity_helper.config_build_mode(
93
+ unity_exe_full_path: @unity_exe_path,
94
+ project_path: @unity_root_path,
95
+ deploy_mode: @deploy_mode
96
+ )
97
+
98
+ # 返回成功结果
99
+ {
100
+ success: true,
101
+ deploy_mode: @deploy_mode,
102
+ unity_result: result
103
+ }
104
+ end
105
+ end
106
+ end
107
+ end
@@ -1,34 +1,27 @@
1
- require_relative '../pindo_task'
1
+ require 'pindo/module/task/model/unity_task'
2
2
  require 'pindo/base/funlog'
3
3
 
4
4
  module Pindo
5
5
  module TaskSystem
6
- class UnityExportTask < PindoTask
7
- attr_reader :platform, :unity_project_path, :export_path
6
+ # Unity 导出任务
7
+ # 用于将 Unity 项目导出为指定平台(iOS/Android/WebGL)
8
+ class UnityExportTask < UnityTask
9
+ attr_reader :platform, :export_path, :deploy_mode, :is_library_mode
8
10
 
9
11
  def self.task_type
10
12
  :unity_export
11
13
  end
12
14
 
13
- # 重试配置
14
- def self.default_retry_mode
15
- RetryMode::DELAYED
16
- end
17
-
18
- def self.default_retry_count
19
- 2 # 可以重试 2 次
20
- end
21
-
22
- def self.default_retry_delay
23
- 10 # 延迟 10 秒
24
- end
25
-
15
+ # @param platform [String] 目标平台 ('ios', 'android', 'web')
16
+ # @param options [Hash] 额外选项
17
+ # - :project_path [String] Unity 项目路径(默认当前目录)
18
+ # - :export_path [String] 导出路径(nil 表示自动检测)
19
+ # - :deploy_mode [String] 部署模式 ('dev', 'adhoc', 'release'),默认 'dev'
20
+ # - :context [Hash] 上下文信息(如 index_count)
26
21
  def initialize(platform, options = {})
27
22
  @platform = platform
28
- @unity_project_path = options[:project_path] || Dir.pwd
29
23
  @unity_exe_path = nil # 将在 do_work 中自动查找
30
- @unity_helper = nil # 将在 do_work 中自动初始化
31
- @is_library_mode = false # 不再支持库模式
24
+ @is_library_mode = false
32
25
  @index_count = options[:context] ? options[:context][:index_count] : nil
33
26
  @export_path = options[:export_path] # 可由参数传入,nil 表示自动检测
34
27
  @deploy_mode = options[:deploy_mode] || 'dev' # 部署模式:dev/adhoc/release,默认 dev
@@ -44,18 +37,17 @@ module Pindo
44
37
  "Unity 导出 #{platform.upcase}"
45
38
  end
46
39
 
47
- super(name, options)
40
+ # 传递 project_path 给基类
41
+ project_path = options[:project_path] || Dir.pwd
42
+ super(name, project_path: project_path, options: options)
48
43
  end
49
44
 
50
45
  def validate
51
- # 验证 Unity 工程是否存在
52
- unless @unity_helper
53
- @unity_helper = Pindo::Client::UnityHelper.share_instance
54
- end
46
+ super
55
47
 
56
- unless @unity_helper.unity_project?(@unity_project_path)
57
- @error = "当前目录不是 Unity 工程:#{@unity_project_path}"
58
- return false
48
+ # 验证 Unity 工程是否存在
49
+ unless unity_helper.unity_project?(@unity_root_path)
50
+ raise Informative, "当前目录不是 Unity 工程:#{@unity_root_path}"
59
51
  end
60
52
 
61
53
  true
@@ -64,27 +56,26 @@ module Pindo
64
56
  protected
65
57
 
66
58
  def do_work
67
- # 确保 Unity helper 已初始化
68
- @unity_helper ||= Pindo::Client::UnityHelper.share_instance
69
-
70
59
  # 获取 Unity 版本
71
- project_unity_version = @unity_helper.get_unity_version(@unity_project_path)
60
+ project_unity_version = get_unity_version
72
61
 
73
62
  # 查找 Unity 执行路径
74
63
  unless @unity_exe_path
75
- @unity_exe_path = @unity_helper.find_unity_path(
64
+ @unity_exe_path = unity_helper.find_unity_path(
76
65
  project_unity_version: project_unity_version,
77
66
  force_change_version: false
78
67
  )
79
68
  end
80
69
 
81
70
  if @unity_exe_path.nil? || @unity_exe_path.empty?
82
- raise "无法找到 Unity 执行路径"
71
+ raise Informative, "无法找到 Unity 执行路径"
83
72
  end
84
73
 
85
74
  # 显示 Unity 信息
86
- Funlog.info("Unity 版本: #{project_unity_version}")
87
- Funlog.info("Unity 路径: #{@unity_exe_path}")
75
+ puts "项目路径: #{@unity_root_path}"
76
+ puts "Unity 执行路径: #{@unity_exe_path}"
77
+ puts "Unity 版本: #{project_unity_version}"
78
+ puts "部署模式: #{@deploy_mode}\n"
88
79
 
89
80
  # 执行 Unity 导出
90
81
  case @platform
@@ -95,20 +86,34 @@ module Pindo
95
86
  when 'web', 'html'
96
87
  export_web
97
88
  else
98
- raise "Unsupported platform: #{@platform}"
89
+ raise Informative, "不支持的平台: #{@platform}"
90
+ end
91
+ end
92
+
93
+ # 重写清理方法,提供更精确的参数
94
+ def cleanup_unity_processes
95
+ Funlog.warning("清理 Unity 进程...")
96
+ begin
97
+ Pindo::Unity::UnityProcHelper.cleanup_unity_processes_after_build(
98
+ unity_exe_full_path: @unity_exe_path,
99
+ project_path: @unity_root_path
100
+ )
101
+ rescue => e
102
+ Funlog.warning("清理 Unity 进程失败: #{e.message}")
99
103
  end
100
104
  end
101
105
 
102
106
  private
103
107
 
108
+ # 导出 iOS
104
109
  def export_ios
105
110
  platform = 'iOS'
106
111
 
107
112
  # 设置导出路径(如果未指定)
108
113
  if @export_path.nil?
109
114
  # 优先使用 BaseiOS,如果不存在则使用 iOS
110
- base_ios_path = File.join(@unity_project_path, "GoodPlatform", "BaseiOS")
111
- ios_path = File.join(@unity_project_path, "GoodPlatform", "iOS")
115
+ base_ios_path = File.join(@unity_root_path, "GoodPlatform", "BaseiOS")
116
+ ios_path = File.join(@unity_root_path, "GoodPlatform", "iOS")
112
117
 
113
118
  @export_path = if File.exist?(base_ios_path)
114
119
  base_ios_path
@@ -120,6 +125,10 @@ module Pindo
120
125
  # 根据导出路径判断是否为库模式
121
126
  @is_library_mode = @export_path.include?("BaseiOS")
122
127
 
128
+ puts "导出路径: #{@export_path}"
129
+ puts "导出平台: iOS"
130
+ puts "库模式: #{@is_library_mode ? '是' : '否'}\n"
131
+
123
132
  result = execute_unity_build(platform)
124
133
 
125
134
  {
@@ -130,14 +139,15 @@ module Pindo
130
139
  }
131
140
  end
132
141
 
142
+ # 导出 Android
133
143
  def export_android
134
144
  platform = 'Android'
135
145
 
136
146
  # 设置导出路径(如果未指定)
137
147
  if @export_path.nil?
138
148
  # 优先使用 BaseAndroid,如果不存在则使用 Android
139
- base_android_path = File.join(@unity_project_path, "GoodPlatform", "BaseAndroid")
140
- android_path = File.join(@unity_project_path, "GoodPlatform", "Android")
149
+ base_android_path = File.join(@unity_root_path, "GoodPlatform", "BaseAndroid")
150
+ android_path = File.join(@unity_root_path, "GoodPlatform", "Android")
141
151
 
142
152
  @export_path = if File.exist?(base_android_path)
143
153
  base_android_path
@@ -149,6 +159,10 @@ module Pindo
149
159
  # 根据导出路径判断是否为库模式
150
160
  @is_library_mode = @export_path.include?("BaseAndroid")
151
161
 
162
+ puts "导出路径: #{@export_path}"
163
+ puts "导出平台: Android"
164
+ puts "库模式: #{@is_library_mode ? '是' : '否'}\n"
165
+
152
166
  result = execute_unity_build(platform)
153
167
 
154
168
  {
@@ -159,13 +173,18 @@ module Pindo
159
173
  }
160
174
  end
161
175
 
176
+ # 导出 WebGL
162
177
  def export_web
163
178
  platform = 'WebGL'
164
- result = execute_unity_build(platform)
165
179
 
166
180
  # 设置导出路径(如果未指定)
167
181
  # Web 平台只有一个目录
168
- @export_path ||= File.join(@unity_project_path, "GoodPlatform", "WebGL")
182
+ @export_path ||= File.join(@unity_root_path, "GoodPlatform", "WebGL")
183
+
184
+ puts "导出路径: #{@export_path}"
185
+ puts "导出平台: WebGL\n"
186
+
187
+ result = execute_unity_build(platform)
169
188
 
170
189
  {
171
190
  success: true,
@@ -175,41 +194,19 @@ module Pindo
175
194
  }
176
195
  end
177
196
 
197
+ # 执行 Unity 导出
198
+ # Unity 进程管理(检查和清理)已封装在 UnityHelper.export_project 中
178
199
  def execute_unity_build(platform)
179
- # 检查 Unity 进程
180
- @unity_helper.check_unity_processes(
200
+ # 执行导出
201
+ unity_helper.export_project(
181
202
  unity_exe_full_path: @unity_exe_path,
182
- project_path: @unity_project_path
203
+ project_path: @unity_root_path,
204
+ platform: platform,
205
+ isLibrary: @is_library_mode,
206
+ indexNo: @index_count,
207
+ deployMode: @deploy_mode
183
208
  )
184
-
185
- # 执行构建
186
- begin
187
- result = @unity_helper.build_project(
188
- unity_exe_full_path: @unity_exe_path,
189
- project_path: @unity_project_path,
190
- platform: platform,
191
- isLibrary: @is_library_mode,
192
- indexNo: @index_count,
193
- deployMode: @deploy_mode
194
- )
195
-
196
- # 清理 Unity 进程
197
- @unity_helper.cleanup_unity_processes_after_build(
198
- unity_exe_full_path: @unity_exe_path,
199
- project_path: @unity_project_path
200
- )
201
-
202
- result
203
- rescue => e
204
- # 确保清理进程
205
- @unity_helper.cleanup_unity_processes_after_build(
206
- unity_exe_full_path: @unity_exe_path,
207
- project_path: @unity_project_path
208
- ) rescue nil
209
-
210
- raise e
211
- end
212
209
  end
213
210
  end
214
211
  end
215
- end
212
+ end
@@ -0,0 +1,94 @@
1
+ require 'pindo/module/task/model/unity_task'
2
+ require 'pindo/base/funlog'
3
+
4
+ module Pindo
5
+ module TaskSystem
6
+ # Unity 更新必备库任务
7
+ # 用于强制更新 Unity 项目的必备库(NugetForUnity)
8
+ class UnityUpdateTask < UnityTask
9
+ def self.task_type
10
+ :unity_update
11
+ end
12
+
13
+ # @param options [Hash] 额外选项
14
+ # - :project_path [String] Unity 项目路径(默认当前目录)
15
+ def initialize(options = {})
16
+ @unity_exe_path = nil # 将在 do_work 中自动查找
17
+
18
+ # 传递 project_path 给基类
19
+ project_path = options[:project_path] || Dir.pwd
20
+ super("Unity工具库更新", project_path: project_path, options: options)
21
+ end
22
+
23
+ def validate
24
+ super
25
+
26
+ # 验证 Unity 工程是否存在
27
+ unless unity_helper.unity_project?(@unity_root_path)
28
+ raise Informative, "当前目录不是 Unity 工程:#{@unity_root_path}"
29
+ end
30
+
31
+ true
32
+ end
33
+
34
+ protected
35
+
36
+ def do_work
37
+ # 获取 Unity 版本
38
+ project_unity_version = get_unity_version
39
+
40
+ # 查找 Unity 执行路径
41
+ unless @unity_exe_path
42
+ @unity_exe_path = unity_helper.find_unity_path(
43
+ project_unity_version: project_unity_version,
44
+ force_change_version: false
45
+ )
46
+ end
47
+
48
+ if @unity_exe_path.nil? || @unity_exe_path.empty?
49
+ raise Informative, "无法找到 Unity 执行路径"
50
+ end
51
+
52
+ # 显示 Unity 信息
53
+ puts "项目路径: #{@unity_root_path}"
54
+ puts "Unity 执行路径: #{@unity_exe_path}"
55
+ puts "Unity 版本: #{project_unity_version}\n"
56
+
57
+ # 执行必备库更新
58
+ result = force_update_libraries
59
+
60
+ result
61
+ end
62
+
63
+ # 重写清理方法,提供更精确的参数
64
+ def cleanup_unity_processes
65
+ Funlog.warning("清理 Unity 进程...")
66
+ begin
67
+ Pindo::Unity::UnityProcHelper.cleanup_unity_processes_after_build(
68
+ unity_exe_full_path: @unity_exe_path,
69
+ project_path: @unity_root_path
70
+ )
71
+ rescue => e
72
+ Funlog.warning("清理 Unity 进程失败: #{e.message}")
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ # 强制更新必备库
79
+ def force_update_libraries
80
+ # 调用 UnityHelper 的 force_update_libraries 方法
81
+ result = unity_helper.force_update_libraries(
82
+ unity_exe_full_path: @unity_exe_path,
83
+ project_path: @unity_root_path
84
+ )
85
+
86
+ # 返回成功结果
87
+ {
88
+ success: true,
89
+ unity_result: result
90
+ }
91
+ end
92
+ end
93
+ end
94
+ end