pindo 5.13.1 → 5.13.3
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/base/git_handler.rb +692 -0
- data/lib/pindo/command/android/autobuild.rb +2 -2
- data/lib/pindo/command/appstore/adhocbuild.rb +256 -311
- data/lib/pindo/command/appstore/autobuild.rb +203 -0
- data/lib/pindo/command/appstore/autoresign.rb +35 -17
- data/lib/pindo/command/appstore/bundleid.rb +120 -0
- data/lib/pindo/command/appstore/cert.rb +212 -0
- data/lib/pindo/command/appstore/configproj.rb +81 -0
- data/lib/pindo/command/{deploy → appstore}/getitcinfo.rb +76 -91
- data/lib/pindo/command/appstore/iap.rb +788 -24
- data/lib/pindo/command/appstore/initconfig.rb +105 -0
- data/lib/pindo/command/appstore/itcapp.rb +95 -13
- data/lib/pindo/command/{deploy → appstore}/itcinfo.rb +90 -118
- data/lib/pindo/command/appstore/pem.rb +136 -0
- data/lib/pindo/command/appstore/pullconfig.rb +99 -0
- data/lib/pindo/command/appstore/quswark.rb +87 -0
- data/lib/pindo/command/appstore/quswauth.rb +67 -0
- data/lib/pindo/command/appstore/tag.rb +77 -0
- data/lib/pindo/command/appstore.rb +13 -1
- data/lib/pindo/command/env/quarkenv.rb +11 -13
- data/lib/pindo/command/env/swarkenv.rb +11 -16
- data/lib/pindo/command/ios/applovin.rb +24 -182
- data/lib/pindo/command/ios/autobuild.rb +64 -43
- data/lib/pindo/command/ios/autoresign.rb +34 -19
- data/lib/pindo/command/ios/build.rb +9 -6
- data/lib/pindo/command/ios/cert.rb +27 -20
- data/lib/pindo/command/ios/podupdate.rb +6 -37
- data/lib/pindo/command/jps/upload.rb +3 -3
- data/lib/pindo/command/unity/autobuild.rb +2 -2
- data/lib/pindo/command/utils/clearcert.rb +2 -17
- data/lib/pindo/command/{deploy → utils}/fabric.rb +13 -13
- data/lib/pindo/command/utils/renewcert.rb +62 -38
- data/lib/pindo/command/utils/renewproj.rb +0 -3
- data/lib/pindo/command/{deploy → utils}/updateconfig.rb +6 -7
- data/lib/pindo/command/utils.rb +2 -0
- data/lib/pindo/command/web/autobuild.rb +2 -2
- data/lib/pindo/command.rb +30 -3
- data/lib/pindo/config/build_info_manager.rb +176 -0
- data/lib/pindo/config/ios_config_parser.rb +404 -0
- data/lib/pindo/module/android/android_config_helper.rb +9 -5
- data/lib/pindo/module/appstore/bundleid_helper.rb +349 -0
- data/lib/pindo/module/appstore/itcapp_helper.rb +228 -0
- data/lib/pindo/module/build/build_helper.rb +12 -0
- data/lib/pindo/module/build/swark_helper.rb +116 -77
- data/lib/pindo/module/cert/cert_helper.rb +74 -0
- data/lib/pindo/module/cert/pem_helper.rb +72 -0
- data/lib/pindo/module/cert/{xcodecerthelper.rb → xcode_cert_helper.rb} +211 -6
- data/lib/pindo/module/pgyer/pgyerhelper.rb +13 -5
- data/lib/pindo/module/task/model/appstore/appstore_task.rb +18 -0
- data/lib/pindo/module/task/model/appstore/appstore_upload_ipa_task.rb +151 -0
- data/lib/pindo/module/task/model/appstore/appstore_upload_metadata_task.rb +250 -0
- data/lib/pindo/module/task/model/appstore/appstore_upload_screenshot_task.rb +276 -0
- data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +210 -0
- data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb} +2 -2
- data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +210 -0
- data/lib/pindo/module/task/model/build/android_build_task.rb +13 -0
- data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +342 -0
- data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +341 -0
- data/lib/pindo/module/task/model/build/{ios_dev_build_task.rb → ios_build_dev_task.rb} +40 -59
- data/lib/pindo/module/task/model/build/ios_build_task.rb +23 -0
- data/lib/pindo/module/task/model/build/{web_dev_build_task.rb → web_build_dev_task.rb} +1 -1
- data/lib/pindo/module/task/model/build_task.rb +15 -12
- data/lib/pindo/module/task/model/jps_resign_task.rb +185 -0
- data/lib/pindo/module/task/model/{upload_task.rb → jps_upload_task.rb} +3 -3
- data/lib/pindo/module/task/model/unity_export_task.rb +3 -1
- data/lib/pindo/module/unity/unity_helper.rb +2 -1
- data/lib/pindo/module/xcode/applovin_xcode_helper.rb +271 -0
- data/lib/pindo/module/xcode/cocoapods_helper.rb +153 -0
- data/lib/pindo/module/xcode/ipa_resign_helper.rb +210 -0
- data/lib/pindo/module/xcode/{xcodeappconfig.rb → xcode_app_config.rb} +79 -0
- data/lib/pindo/module/xcode/xcode_build_config.rb +152 -17
- data/lib/pindo/module/xcode/xcode_build_helper.rb +151 -1
- data/lib/pindo/module/xcode/xcode_swark_helper.rb +341 -0
- data/lib/pindo/options/core/global_options_state.rb +268 -0
- data/lib/pindo/options/core/option_configuration.rb +206 -0
- data/lib/pindo/options/core/option_initializer.rb +51 -0
- data/lib/pindo/options/core/option_item.rb +144 -0
- data/lib/pindo/options/core/option_value_parser.rb +54 -0
- data/lib/pindo/options/groups/build_options.rb +60 -0
- data/lib/pindo/options/groups/jps_options.rb +70 -0
- data/lib/pindo/options/groups/option_group.rb +73 -0
- data/lib/pindo/options/helpers/bundleid_selector.rb +103 -0
- data/lib/pindo/options/options.rb +14 -0
- data/lib/pindo/version.rb +1 -1
- metadata +51 -40
- data/lib/pindo/command/appstore/import.rb +0 -259
- data/lib/pindo/command/deploy/build.rb +0 -250
- data/lib/pindo/command/deploy/bundleid.rb +0 -259
- data/lib/pindo/command/deploy/cert.rb +0 -202
- data/lib/pindo/command/deploy/check.rb +0 -93
- data/lib/pindo/command/deploy/configproj.rb +0 -120
- data/lib/pindo/command/deploy/confusecode.rb +0 -262
- data/lib/pindo/command/deploy/confuseproj.rb +0 -122
- data/lib/pindo/command/deploy/iap.rb +0 -826
- data/lib/pindo/command/deploy/initconfig.rb +0 -138
- data/lib/pindo/command/deploy/itcapp.rb +0 -146
- data/lib/pindo/command/deploy/pem.rb +0 -55
- data/lib/pindo/command/deploy/pullconfig.rb +0 -56
- data/lib/pindo/command/deploy/pushconfig.rb +0 -93
- data/lib/pindo/command/deploy/quswark.rb +0 -156
- data/lib/pindo/command/deploy/quswauth.rb +0 -76
- data/lib/pindo/command/deploy/reportbug.rb +0 -145
- data/lib/pindo/command/deploy/resign.rb +0 -300
- data/lib/pindo/command/deploy/tag.rb +0 -108
- data/lib/pindo/command/deploy/uploadipa.rb +0 -73
- data/lib/pindo/command/deploy.rb +0 -42
- data/lib/pindo/command/dev/autobuild.rb +0 -117
- data/lib/pindo/command/dev/build.rb +0 -94
- data/lib/pindo/command/dev/debug.rb +0 -112
- data/lib/pindo/module/task/model/build/android_release_build_task.rb +0 -29
- data/lib/pindo/module/task/model/build/ios_adhoc_build_task.rb +0 -53
- data/lib/pindo/module/task/model/build/ios_release_build_task.rb +0 -53
- data/lib/pindo/options/appconfigoptions.rb +0 -24
- data/lib/pindo/options/deployoptions.rb +0 -372
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
require_relative 'android_build_task'
|
|
2
|
+
require 'pindo/module/build/build_helper'
|
|
3
|
+
require 'pindo/module/build/version_helper'
|
|
4
|
+
require 'pindo/module/build/git_repo_helper'
|
|
5
|
+
require 'pindo/module/android/android_config_helper'
|
|
6
|
+
require 'pindo/module/android/android_build_helper'
|
|
7
|
+
require 'pindo/module/pgyer/pgyerhelper'
|
|
8
|
+
require 'pindo/base/githelper'
|
|
9
|
+
|
|
10
|
+
module Pindo
|
|
11
|
+
module TaskSystem
|
|
12
|
+
# Android AdHoc 模式构建任务
|
|
13
|
+
# 使用 Release 模式编译 Android 工程(AdHoc 版本)
|
|
14
|
+
class AndroidBuildAdhocTask < AndroidBuildTask
|
|
15
|
+
include Pindo::Githelper
|
|
16
|
+
|
|
17
|
+
def initialize(options = {})
|
|
18
|
+
@bundle_name = options[:bundle_name]
|
|
19
|
+
@proj_name = options[:proj_name]
|
|
20
|
+
@upload_flag = options[:upload] || false
|
|
21
|
+
@send_flag = options[:send] || false
|
|
22
|
+
|
|
23
|
+
# 接收外部传入的 JPS 配置
|
|
24
|
+
@app_info_obj = options[:app_info_obj]
|
|
25
|
+
@workflow_info = options[:workflow_info]
|
|
26
|
+
|
|
27
|
+
super(:android, :adhoc, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
def build_task_name
|
|
33
|
+
"构建 APK (AdHoc)"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def prepare_build
|
|
37
|
+
# 校验必需的参数
|
|
38
|
+
Dir.chdir(@project_path)
|
|
39
|
+
validate_workflow_info
|
|
40
|
+
check_git_tag if @upload_flag
|
|
41
|
+
update_project_config
|
|
42
|
+
update_version_info
|
|
43
|
+
handle_bundle_name_config if @bundle_name
|
|
44
|
+
add_application_id_scheme
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def execute_build
|
|
48
|
+
build_android_project
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def find_output
|
|
52
|
+
# 搜索 APK 和 AAB 文件
|
|
53
|
+
search_paths = []
|
|
54
|
+
search_paths.concat(TaskConfig::BUILD_OUTPUT_PATTERNS[:apk].map { |p| File.join(@project_path, p) })
|
|
55
|
+
search_paths.concat(TaskConfig::BUILD_OUTPUT_PATTERNS[:aab].map { |p| File.join(@project_path, p) })
|
|
56
|
+
|
|
57
|
+
package_files = []
|
|
58
|
+
search_paths.each do |pattern|
|
|
59
|
+
package_files.concat(Dir.glob(pattern))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# 过滤测试包和未签名包
|
|
63
|
+
package_files.reject! do |f|
|
|
64
|
+
basename = File.basename(f).downcase
|
|
65
|
+
TaskConfig::EXCLUDED_PATTERNS.any? { |pattern| basename.include?(pattern) }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
if package_files.any?
|
|
69
|
+
# 优先返回 AAB,其次 APK
|
|
70
|
+
aab_files = package_files.select { |f| f.end_with?(".aab") }
|
|
71
|
+
apk_files = package_files.select { |f| f.end_with?(".apk") }
|
|
72
|
+
|
|
73
|
+
latest_package = if aab_files.any?
|
|
74
|
+
aab_files.max_by { |f| File.mtime(f) }
|
|
75
|
+
elsif apk_files.any?
|
|
76
|
+
apk_files.max_by { |f| File.mtime(f) }
|
|
77
|
+
else
|
|
78
|
+
package_files.max_by { |f| File.mtime(f) }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
puts " 找到 Android 包文件: #{latest_package}"
|
|
82
|
+
latest_package
|
|
83
|
+
else
|
|
84
|
+
puts " 警告: 未找到 APK/AAB 文件"
|
|
85
|
+
nil
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
# 校验工作流信息
|
|
92
|
+
def validate_workflow_info
|
|
93
|
+
unless @workflow_info && @workflow_info[:package_name]
|
|
94
|
+
raise Informative, "未提供工作流信息,请在创建任务时传入 workflow_info 参数"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Git 标签检查
|
|
99
|
+
def check_git_tag
|
|
100
|
+
git_repo_helper = Pindo::GitRepoHelper.share_instance
|
|
101
|
+
is_need_add_tag, tag_action_params = git_repo_helper.check_is_need_add_tag?(@project_path)
|
|
102
|
+
if is_need_add_tag
|
|
103
|
+
git_repo_helper.create_and_push_tag(
|
|
104
|
+
project_dir: @project_path,
|
|
105
|
+
mode: 'minor',
|
|
106
|
+
force_retag: tag_action_params&.include?('--retag') || false,
|
|
107
|
+
custom_tag: nil,
|
|
108
|
+
release_branch: 'master'
|
|
109
|
+
)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# 更新工程配置
|
|
114
|
+
def update_project_config
|
|
115
|
+
workflow_packname = @workflow_info[:package_name]
|
|
116
|
+
|
|
117
|
+
puts "\n使用工作流配置更新 Android 项目:"
|
|
118
|
+
puts " Workflow Package Name: #{workflow_packname}"
|
|
119
|
+
|
|
120
|
+
# 更新 App Name、Application ID 和 URL Schemes
|
|
121
|
+
Pindo::AndroidConfigHelper.update_project_with_workflow(
|
|
122
|
+
project_dir: @project_path,
|
|
123
|
+
workflow_packname: workflow_packname
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# 下载并替换 Icon
|
|
127
|
+
if @app_info_obj && @app_info_obj["projectIcon"] && !@app_info_obj["projectIcon"].empty?
|
|
128
|
+
icon_replace_success = Pindo::AndroidConfigHelper.download_and_replace_icon_from_url(
|
|
129
|
+
project_dir: @project_path,
|
|
130
|
+
icon_url: @app_info_obj["projectIcon"]
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
unless icon_replace_success
|
|
134
|
+
raise Informative, "Icon 下载或替换失败,请检查 Icon URL 是否有效: #{@app_info_obj["projectIcon"]}"
|
|
135
|
+
end
|
|
136
|
+
else
|
|
137
|
+
Funlog.warning("未配置 Icon URL,跳过 Icon 替换")
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# 更新版本号
|
|
142
|
+
def update_version_info
|
|
143
|
+
version_helper = Pindo::VersionHelper.share_instance
|
|
144
|
+
version_info = version_helper.get_version_info(project_dir: @project_path)
|
|
145
|
+
|
|
146
|
+
if version_info[:is_git_repo]
|
|
147
|
+
Pindo::AndroidConfigHelper.update_android_project_version(
|
|
148
|
+
project_dir: @project_path,
|
|
149
|
+
version_name: version_info[:version],
|
|
150
|
+
version_code: version_info[:build_number]
|
|
151
|
+
)
|
|
152
|
+
else
|
|
153
|
+
Funlog.warning("非Git仓库,保持工程原有版本号")
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# 处理 Bundle Name 特殊配置
|
|
158
|
+
def handle_bundle_name_config
|
|
159
|
+
return unless @bundle_name && !@bundle_name.empty?
|
|
160
|
+
|
|
161
|
+
puts "\n正在处理指定的 Bundle Name: #{@bundle_name}..."
|
|
162
|
+
|
|
163
|
+
# 检查是否为通配符
|
|
164
|
+
is_wildcard = @bundle_name.include?('*') ||
|
|
165
|
+
@bundle_name.end_with?('.') ||
|
|
166
|
+
['com.test', 'com.example', 'com.demo'].include?(@bundle_name)
|
|
167
|
+
|
|
168
|
+
if is_wildcard
|
|
169
|
+
puts " ⚠️ 检测到通配符或通用 Bundle Name: #{@bundle_name}"
|
|
170
|
+
puts " ⚠️ 跳过 google-services.json 和 Application ID 更新"
|
|
171
|
+
else
|
|
172
|
+
# 拉取配置仓库
|
|
173
|
+
config_repo_dir = clong_buildconfig_repo(repo_name: @bundle_name)
|
|
174
|
+
|
|
175
|
+
if config_repo_dir && File.exist?(config_repo_dir)
|
|
176
|
+
# 拷贝 google-services.json
|
|
177
|
+
Pindo::AndroidConfigHelper.copy_google_services_from_config_repo(
|
|
178
|
+
config_repo_dir: config_repo_dir,
|
|
179
|
+
project_dir: @project_path
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
# 更新 Application ID
|
|
183
|
+
Pindo::AndroidConfigHelper.update_application_id(
|
|
184
|
+
project_dir: @project_path,
|
|
185
|
+
application_id: @bundle_name
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
puts " ✓ Bundle Name 配置处理完成"
|
|
189
|
+
else
|
|
190
|
+
raise Informative, "无法获取配置仓库"
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# 添加基于 Application ID 的 Scheme
|
|
196
|
+
def add_application_id_scheme
|
|
197
|
+
Pindo::AndroidConfigHelper.add_application_id_based_scheme(
|
|
198
|
+
project_dir: @project_path
|
|
199
|
+
)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# 构建 Android 工程
|
|
203
|
+
def build_android_project
|
|
204
|
+
android_build_helper = Pindo::AndroidBuildHelper.share_instance
|
|
205
|
+
# 第二个参数 false 表示 release 模式
|
|
206
|
+
android_build_helper.auto_build_apk(@project_path, false)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative 'android_build_task'
|
|
2
2
|
require 'pindo/module/build/build_helper'
|
|
3
3
|
require 'pindo/module/build/version_helper'
|
|
4
4
|
require 'pindo/module/build/git_repo_helper'
|
|
@@ -11,7 +11,7 @@ module Pindo
|
|
|
11
11
|
module TaskSystem
|
|
12
12
|
# Android Dev 模式构建任务
|
|
13
13
|
# 使用 Debug 模式编译 Android 工程
|
|
14
|
-
class
|
|
14
|
+
class AndroidBuildDevTask < AndroidBuildTask
|
|
15
15
|
include Pindo::Githelper
|
|
16
16
|
def initialize(options = {})
|
|
17
17
|
@bundle_name = options[:bundle_name]
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
require_relative 'android_build_task'
|
|
2
|
+
require 'pindo/module/build/build_helper'
|
|
3
|
+
require 'pindo/module/build/version_helper'
|
|
4
|
+
require 'pindo/module/build/git_repo_helper'
|
|
5
|
+
require 'pindo/module/android/android_config_helper'
|
|
6
|
+
require 'pindo/module/android/android_build_helper'
|
|
7
|
+
require 'pindo/module/pgyer/pgyerhelper'
|
|
8
|
+
require 'pindo/base/githelper'
|
|
9
|
+
|
|
10
|
+
module Pindo
|
|
11
|
+
module TaskSystem
|
|
12
|
+
# Android Google Play 模式构建任务
|
|
13
|
+
# 使用 Release 模式编译 Android 工程用于 Google Play 发布
|
|
14
|
+
class AndroidBuildGPlayTask < AndroidBuildTask
|
|
15
|
+
include Pindo::Githelper
|
|
16
|
+
|
|
17
|
+
def initialize(options = {})
|
|
18
|
+
@bundle_name = options[:bundle_name]
|
|
19
|
+
@proj_name = options[:proj_name]
|
|
20
|
+
@upload_flag = options[:upload] || false
|
|
21
|
+
@send_flag = options[:send] || false
|
|
22
|
+
|
|
23
|
+
# 接收外部传入的 JPS 配置
|
|
24
|
+
@app_info_obj = options[:app_info_obj]
|
|
25
|
+
@workflow_info = options[:workflow_info]
|
|
26
|
+
|
|
27
|
+
super(:android, :release, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
def build_task_name
|
|
33
|
+
"构建 APK (Release)"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def prepare_build
|
|
37
|
+
# 校验必需的参数
|
|
38
|
+
Dir.chdir(@project_path)
|
|
39
|
+
validate_workflow_info
|
|
40
|
+
check_git_tag if @upload_flag
|
|
41
|
+
update_project_config
|
|
42
|
+
update_version_info
|
|
43
|
+
handle_bundle_name_config if @bundle_name
|
|
44
|
+
add_application_id_scheme
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def execute_build
|
|
48
|
+
build_android_project
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def find_output
|
|
52
|
+
# 搜索 APK 和 AAB 文件
|
|
53
|
+
search_paths = []
|
|
54
|
+
search_paths.concat(TaskConfig::BUILD_OUTPUT_PATTERNS[:apk].map { |p| File.join(@project_path, p) })
|
|
55
|
+
search_paths.concat(TaskConfig::BUILD_OUTPUT_PATTERNS[:aab].map { |p| File.join(@project_path, p) })
|
|
56
|
+
|
|
57
|
+
package_files = []
|
|
58
|
+
search_paths.each do |pattern|
|
|
59
|
+
package_files.concat(Dir.glob(pattern))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# 过滤测试包和未签名包
|
|
63
|
+
package_files.reject! do |f|
|
|
64
|
+
basename = File.basename(f).downcase
|
|
65
|
+
TaskConfig::EXCLUDED_PATTERNS.any? { |pattern| basename.include?(pattern) }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
if package_files.any?
|
|
69
|
+
# 优先返回 AAB,其次 APK
|
|
70
|
+
aab_files = package_files.select { |f| f.end_with?(".aab") }
|
|
71
|
+
apk_files = package_files.select { |f| f.end_with?(".apk") }
|
|
72
|
+
|
|
73
|
+
latest_package = if aab_files.any?
|
|
74
|
+
aab_files.max_by { |f| File.mtime(f) }
|
|
75
|
+
elsif apk_files.any?
|
|
76
|
+
apk_files.max_by { |f| File.mtime(f) }
|
|
77
|
+
else
|
|
78
|
+
package_files.max_by { |f| File.mtime(f) }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
puts " 找到 Android 包文件: #{latest_package}"
|
|
82
|
+
latest_package
|
|
83
|
+
else
|
|
84
|
+
puts " 警告: 未找到 APK/AAB 文件"
|
|
85
|
+
nil
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
# 校验工作流信息
|
|
92
|
+
def validate_workflow_info
|
|
93
|
+
unless @workflow_info && @workflow_info[:package_name]
|
|
94
|
+
raise Informative, "未提供工作流信息,请在创建任务时传入 workflow_info 参数"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Git 标签检查
|
|
99
|
+
def check_git_tag
|
|
100
|
+
git_repo_helper = Pindo::GitRepoHelper.share_instance
|
|
101
|
+
is_need_add_tag, tag_action_params = git_repo_helper.check_is_need_add_tag?(@project_path)
|
|
102
|
+
if is_need_add_tag
|
|
103
|
+
git_repo_helper.create_and_push_tag(
|
|
104
|
+
project_dir: @project_path,
|
|
105
|
+
mode: 'minor',
|
|
106
|
+
force_retag: tag_action_params&.include?('--retag') || false,
|
|
107
|
+
custom_tag: nil,
|
|
108
|
+
release_branch: 'master'
|
|
109
|
+
)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# 更新工程配置
|
|
114
|
+
def update_project_config
|
|
115
|
+
workflow_packname = @workflow_info[:package_name]
|
|
116
|
+
|
|
117
|
+
puts "\n使用工作流配置更新 Android 项目:"
|
|
118
|
+
puts " Workflow Package Name: #{workflow_packname}"
|
|
119
|
+
|
|
120
|
+
# 更新 App Name、Application ID 和 URL Schemes
|
|
121
|
+
Pindo::AndroidConfigHelper.update_project_with_workflow(
|
|
122
|
+
project_dir: @project_path,
|
|
123
|
+
workflow_packname: workflow_packname
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# 下载并替换 Icon
|
|
127
|
+
if @app_info_obj && @app_info_obj["projectIcon"] && !@app_info_obj["projectIcon"].empty?
|
|
128
|
+
icon_replace_success = Pindo::AndroidConfigHelper.download_and_replace_icon_from_url(
|
|
129
|
+
project_dir: @project_path,
|
|
130
|
+
icon_url: @app_info_obj["projectIcon"]
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
unless icon_replace_success
|
|
134
|
+
raise Informative, "Icon 下载或替换失败,请检查 Icon URL 是否有效: #{@app_info_obj["projectIcon"]}"
|
|
135
|
+
end
|
|
136
|
+
else
|
|
137
|
+
Funlog.warning("未配置 Icon URL,跳过 Icon 替换")
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# 更新版本号
|
|
142
|
+
def update_version_info
|
|
143
|
+
version_helper = Pindo::VersionHelper.share_instance
|
|
144
|
+
version_info = version_helper.get_version_info(project_dir: @project_path)
|
|
145
|
+
|
|
146
|
+
if version_info[:is_git_repo]
|
|
147
|
+
Pindo::AndroidConfigHelper.update_android_project_version(
|
|
148
|
+
project_dir: @project_path,
|
|
149
|
+
version_name: version_info[:version],
|
|
150
|
+
version_code: version_info[:build_number]
|
|
151
|
+
)
|
|
152
|
+
else
|
|
153
|
+
Funlog.warning("非Git仓库,保持工程原有版本号")
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# 处理 Bundle Name 特殊配置
|
|
158
|
+
def handle_bundle_name_config
|
|
159
|
+
return unless @bundle_name && !@bundle_name.empty?
|
|
160
|
+
|
|
161
|
+
puts "\n正在处理指定的 Bundle Name: #{@bundle_name}..."
|
|
162
|
+
|
|
163
|
+
# 检查是否为通配符
|
|
164
|
+
is_wildcard = @bundle_name.include?('*') ||
|
|
165
|
+
@bundle_name.end_with?('.') ||
|
|
166
|
+
['com.test', 'com.example', 'com.demo'].include?(@bundle_name)
|
|
167
|
+
|
|
168
|
+
if is_wildcard
|
|
169
|
+
puts " ⚠️ 检测到通配符或通用 Bundle Name: #{@bundle_name}"
|
|
170
|
+
puts " ⚠️ 跳过 google-services.json 和 Application ID 更新"
|
|
171
|
+
else
|
|
172
|
+
# 拉取配置仓库
|
|
173
|
+
config_repo_dir = clong_buildconfig_repo(repo_name: @bundle_name)
|
|
174
|
+
|
|
175
|
+
if config_repo_dir && File.exist?(config_repo_dir)
|
|
176
|
+
# 拷贝 google-services.json
|
|
177
|
+
Pindo::AndroidConfigHelper.copy_google_services_from_config_repo(
|
|
178
|
+
config_repo_dir: config_repo_dir,
|
|
179
|
+
project_dir: @project_path
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
# 更新 Application ID
|
|
183
|
+
Pindo::AndroidConfigHelper.update_application_id(
|
|
184
|
+
project_dir: @project_path,
|
|
185
|
+
application_id: @bundle_name
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
puts " ✓ Bundle Name 配置处理完成"
|
|
189
|
+
else
|
|
190
|
+
raise Informative, "无法获取配置仓库"
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# 添加基于 Application ID 的 Scheme
|
|
196
|
+
def add_application_id_scheme
|
|
197
|
+
Pindo::AndroidConfigHelper.add_application_id_based_scheme(
|
|
198
|
+
project_dir: @project_path
|
|
199
|
+
)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# 构建 Android 工程
|
|
203
|
+
def build_android_project
|
|
204
|
+
android_build_helper = Pindo::AndroidBuildHelper.share_instance
|
|
205
|
+
# 第二个参数 false 表示 release 模式
|
|
206
|
+
android_build_helper.auto_build_apk(@project_path, false)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_relative '../build_task'
|
|
2
|
+
|
|
3
|
+
module Pindo
|
|
4
|
+
module TaskSystem
|
|
5
|
+
# Android 构建任务基类
|
|
6
|
+
# 所有 Android 平台构建任务的抽象基类
|
|
7
|
+
# 子类包括:AndroidBuildDevTask、AndroidBuildAdhocTask、AndroidBuildGPlayTask
|
|
8
|
+
class AndroidBuildTask < BuildTask
|
|
9
|
+
# 空基类,仅用于类型标识
|
|
10
|
+
# 所有具体实现由子类完成
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|