pindo 5.7.1 → 5.8.0
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/funlog.rb +41 -0
- data/lib/pindo/command/android/autobuild.rb +22 -51
- data/lib/pindo/command/android/build.rb +4 -16
- data/lib/pindo/command/android/debug.rb +4 -16
- data/lib/pindo/command/ios/adhoc.rb +4 -27
- data/lib/pindo/command/ios/autobuild.rb +27 -51
- data/lib/pindo/command/ios/build.rb +4 -23
- data/lib/pindo/module/android/android_build_config_helper.rb +142 -21
- data/lib/pindo/module/android/androidreshelper.rb +176 -0
- data/lib/pindo/module/android/apk_helper.rb +19 -4
- data/lib/pindo/module/android/gradle_helper.rb +2 -108
- data/lib/pindo/module/build/buildhelper.rb +2 -2
- data/lib/pindo/module/pgyer/pgyerhelper.rb +1 -1
- data/lib/pindo/module/unity/nugethelper.rb +71 -1
- data/lib/pindo/module/xcode/xcodebuildconfig.rb +101 -83
- data/lib/pindo/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 981c02bf9dc73206866a586598642619054b8a82929a8ed54607ab2edf15604e
|
|
4
|
+
data.tar.gz: fedcbff7e32b5db93492161228b293ec5d7f3558767fb5fb474c788959e527a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 991ecbda504689b9f31c01a8a8a65991ca6193126c14525afc2fee081f039c39f5814076ea4047946e4846421d10964f0d4f3899774196e13f27f2a33fef5f57
|
|
7
|
+
data.tar.gz: 578a35ce8f1840e366d3f2b7c4646c5d6c92a6729993acff3b6770f4603e5c22351e67640e4ae2fe17cea3f7dc291b3ec80bc72db99cb48919a1f478cd0dd724
|
data/lib/pindo/base/funlog.rb
CHANGED
|
@@ -49,6 +49,20 @@ module Pindo
|
|
|
49
49
|
@spinner_log =nil
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
+
# 输出静态成功信息(不使用spinner,对应 fancyinfo_success)
|
|
53
|
+
# @param args [Array] 要输出的消息
|
|
54
|
+
def info(*args)
|
|
55
|
+
message = args.join(" ")
|
|
56
|
+
puts " ✓ #{message}"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# 输出静态警告信息(不使用spinner,对应 fancyinfo_error)
|
|
60
|
+
# @param args [Array] 要输出的消息
|
|
61
|
+
def warning(*args)
|
|
62
|
+
message = args.join(" ")
|
|
63
|
+
puts "\e[33m ⚠ #{message}\e[0m"
|
|
64
|
+
end
|
|
65
|
+
|
|
52
66
|
#-------------------------------------------------------------------------#
|
|
53
67
|
#-------------------------------------------------------------------------#
|
|
54
68
|
# @!group Singleton
|
|
@@ -72,6 +86,33 @@ module Pindo
|
|
|
72
86
|
#
|
|
73
87
|
class << self
|
|
74
88
|
attr_writer :instance
|
|
89
|
+
|
|
90
|
+
# 类方法委托,简化调用方式
|
|
91
|
+
# 使用 Funlog.info("消息") 代替 Funlog.instance.info("消息")
|
|
92
|
+
|
|
93
|
+
def fancyinfo_start(*args)
|
|
94
|
+
instance.fancyinfo_start(*args)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def fancyinfo_update(*args)
|
|
98
|
+
instance.fancyinfo_update(*args)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def fancyinfo_success(*args)
|
|
102
|
+
instance.fancyinfo_success(*args)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def fancyinfo_error(*args)
|
|
106
|
+
instance.fancyinfo_error(*args)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def info(*args)
|
|
110
|
+
instance.info(*args)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def warning(*args)
|
|
114
|
+
instance.warning(*args)
|
|
115
|
+
end
|
|
75
116
|
end
|
|
76
117
|
|
|
77
118
|
# Provides support for accessing the configuration instance in other
|
|
@@ -111,27 +111,15 @@ module Pindo
|
|
|
111
111
|
package_type: 'apk'
|
|
112
112
|
)
|
|
113
113
|
|
|
114
|
-
# ===== 使用 workflow
|
|
114
|
+
# ===== 使用 workflow 配置更新 Android 项目 =====
|
|
115
115
|
if workflow_info && workflow_info[:package_name]
|
|
116
116
|
package_name = workflow_info[:package_name]
|
|
117
117
|
|
|
118
|
-
puts "\n使用工作流配置更新 Android
|
|
118
|
+
puts "\n使用工作流配置更新 Android 项目:"
|
|
119
119
|
puts " Package Name: #{package_name}"
|
|
120
120
|
|
|
121
|
-
#
|
|
122
|
-
Pindo::AndroidBuildConfigHelper.
|
|
123
|
-
project_dir: pindo_project_dir,
|
|
124
|
-
package_name: package_name
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
# 修改 Application ID
|
|
128
|
-
Pindo::AndroidBuildConfigHelper.update_applicationid_with_packagename(
|
|
129
|
-
project_dir: pindo_project_dir,
|
|
130
|
-
package_name: package_name
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
# 添加基于 package_name 的 Scheme
|
|
134
|
-
Pindo::AndroidBuildConfigHelper.add_scheme_packagename(
|
|
121
|
+
# 一次性更新 App Name、Application ID 和 URL Schemes
|
|
122
|
+
Pindo::AndroidBuildConfigHelper.update_project_with_packagename(
|
|
135
123
|
project_dir: pindo_project_dir,
|
|
136
124
|
package_name: package_name
|
|
137
125
|
)
|
|
@@ -139,31 +127,17 @@ module Pindo
|
|
|
139
127
|
raise Informative, "未获取到工作流信息"
|
|
140
128
|
end
|
|
141
129
|
|
|
142
|
-
|
|
143
|
-
if
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
scheme_name = @args_proj_name if @args_proj_name
|
|
151
|
-
if !app_info_obj.nil? && !app_info_obj["scheme"].nil? && !app_info_obj["scheme"].empty?
|
|
152
|
-
scheme_name = app_info_obj["scheme"]
|
|
153
|
-
end
|
|
154
|
-
if scheme_name.nil? || scheme_name.empty? && is_git_directory?(local_repo_dir:pindo_project_dir)
|
|
155
|
-
current_git_root_path = git_root_directory(local_repo_dir: pindo_project_dir)
|
|
156
|
-
if current_git_root_path && !current_git_root_path.empty?
|
|
157
|
-
git_repo_name = File.basename(current_git_root_path)
|
|
158
|
-
if !git_repo_name.nil? && !git_repo_name.empty?
|
|
159
|
-
scheme_name = git_repo_name
|
|
160
|
-
end
|
|
161
|
-
end
|
|
130
|
+
# ===== 从 JPS 下载并替换项目 Icon =====
|
|
131
|
+
if app_info_obj && app_info_obj["projectIcon"] && !app_info_obj["projectIcon"].empty?
|
|
132
|
+
Pindo::AndroidBuildConfigHelper.download_and_replace_icon_from_url(
|
|
133
|
+
project_dir: pindo_project_dir,
|
|
134
|
+
icon_url: app_info_obj["projectIcon"]
|
|
135
|
+
)
|
|
136
|
+
else
|
|
137
|
+
Funlog.warning("未配置 Icon URL,跳过 Icon 替换")
|
|
162
138
|
end
|
|
163
139
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
# 更新版本号和Build号(仅在Git仓库中)
|
|
140
|
+
# ===== 更新版本号和Build号(仅在Git仓库中)=====
|
|
167
141
|
version_helper = Pindo::VersionHelper.share_instance
|
|
168
142
|
version_info = version_helper.get_version_info(project_dir: pindo_project_dir)
|
|
169
143
|
|
|
@@ -175,22 +149,19 @@ module Pindo
|
|
|
175
149
|
version_code: version_info[:build_number]
|
|
176
150
|
)
|
|
177
151
|
else
|
|
178
|
-
|
|
152
|
+
Funlog.warning("非Git仓库,保持工程原有版本号")
|
|
179
153
|
end
|
|
180
154
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
puts "获取到 Bundle ID: #{bundle_id}"
|
|
188
|
-
Pindo::AndroidBuildConfigHelper.add_test_scheme(project_dir: pindo_project_dir, scheme_name: bundle_id)
|
|
189
|
-
else
|
|
190
|
-
puts "警告: 未能获取到 Bundle ID,跳过添加 Bundle ID scheme"
|
|
155
|
+
build_helper = Pindo::BuildHelper.share_instance
|
|
156
|
+
if @args_upload_flag
|
|
157
|
+
is_need_add_tag,tag_action_parms = build_helper.check_is_need_add_tag?(pindo_project_dir)
|
|
158
|
+
if is_need_add_tag
|
|
159
|
+
Pindo::Command::Dev::Tag::run(tag_action_parms)
|
|
160
|
+
end
|
|
191
161
|
end
|
|
192
|
-
|
|
162
|
+
|
|
193
163
|
begin
|
|
164
|
+
android_build_helper = Pindo::AndroidBuildHelper.share_instance
|
|
194
165
|
apk_path = android_build_helper.auto_build_apk(pindo_project_dir, !@args_release_flag)
|
|
195
166
|
ipa_file_upload = Dir.glob(apk_path).max_by {|f| File.mtime(f)}
|
|
196
167
|
|
|
@@ -97,27 +97,15 @@ module Pindo
|
|
|
97
97
|
package_type: 'apk'
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
-
# ===== 使用 workflow
|
|
100
|
+
# ===== 使用 workflow 配置更新 Android 项目 =====
|
|
101
101
|
if workflow_info && workflow_info[:package_name]
|
|
102
102
|
package_name = workflow_info[:package_name]
|
|
103
103
|
|
|
104
|
-
puts "\n使用工作流配置更新 Android
|
|
104
|
+
puts "\n使用工作流配置更新 Android 项目:"
|
|
105
105
|
puts " Package Name: #{package_name}"
|
|
106
106
|
|
|
107
|
-
#
|
|
108
|
-
Pindo::AndroidBuildConfigHelper.
|
|
109
|
-
project_dir: pindo_project_dir,
|
|
110
|
-
package_name: package_name
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
# 修改 Application ID
|
|
114
|
-
Pindo::AndroidBuildConfigHelper.update_applicationid_with_packagename(
|
|
115
|
-
project_dir: pindo_project_dir,
|
|
116
|
-
package_name: package_name
|
|
117
|
-
)
|
|
118
|
-
|
|
119
|
-
# 添加基于 package_name 的 Scheme
|
|
120
|
-
Pindo::AndroidBuildConfigHelper.add_scheme_packagename(
|
|
107
|
+
# 一次性更新 App Name、Application ID 和 URL Schemes
|
|
108
|
+
Pindo::AndroidBuildConfigHelper.update_project_with_packagename(
|
|
121
109
|
project_dir: pindo_project_dir,
|
|
122
110
|
package_name: package_name
|
|
123
111
|
)
|
|
@@ -89,27 +89,15 @@ module Pindo
|
|
|
89
89
|
package_type: 'apk'
|
|
90
90
|
)
|
|
91
91
|
|
|
92
|
-
# ===== 使用 workflow
|
|
92
|
+
# ===== 使用 workflow 配置更新 Android 项目 =====
|
|
93
93
|
if workflow_info && workflow_info[:package_name]
|
|
94
94
|
package_name = workflow_info[:package_name]
|
|
95
95
|
|
|
96
|
-
puts "\n使用工作流配置更新 Android
|
|
96
|
+
puts "\n使用工作流配置更新 Android 项目:"
|
|
97
97
|
puts " Package Name: #{package_name}"
|
|
98
98
|
|
|
99
|
-
#
|
|
100
|
-
Pindo::AndroidBuildConfigHelper.
|
|
101
|
-
project_dir: pindo_project_dir,
|
|
102
|
-
package_name: package_name
|
|
103
|
-
)
|
|
104
|
-
|
|
105
|
-
# 修改 Application ID
|
|
106
|
-
Pindo::AndroidBuildConfigHelper.update_applicationid_with_packagename(
|
|
107
|
-
project_dir: pindo_project_dir,
|
|
108
|
-
package_name: package_name
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
# 添加基于 package_name 的 Scheme
|
|
112
|
-
Pindo::AndroidBuildConfigHelper.add_scheme_packagename(
|
|
99
|
+
# 一次性更新 App Name、Application ID 和 URL Schemes
|
|
100
|
+
Pindo::AndroidBuildConfigHelper.update_project_with_packagename(
|
|
113
101
|
project_dir: pindo_project_dir,
|
|
114
102
|
package_name: package_name
|
|
115
103
|
)
|
|
@@ -90,21 +90,15 @@ module Pindo
|
|
|
90
90
|
package_type: 'ipa'
|
|
91
91
|
)
|
|
92
92
|
|
|
93
|
-
# ===== 使用 workflow
|
|
93
|
+
# ===== 使用 workflow 配置更新项目 =====
|
|
94
94
|
if workflow_info && workflow_info[:package_name]
|
|
95
95
|
package_name = workflow_info[:package_name]
|
|
96
96
|
|
|
97
|
-
puts "\n使用工作流配置更新
|
|
97
|
+
puts "\n使用工作流配置更新 iOS 项目:"
|
|
98
98
|
puts " Package Name: #{package_name}"
|
|
99
99
|
|
|
100
|
-
#
|
|
101
|
-
Pindo::XcodeBuildConfig.
|
|
102
|
-
project_dir: project_dir,
|
|
103
|
-
package_name: package_name
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
# 修改 Bundle ID
|
|
107
|
-
Pindo::XcodeBuildConfig.update_bundleid_with_packagename(
|
|
100
|
+
# 一次性更新 Display Name、Bundle ID 和 URL Schemes
|
|
101
|
+
Pindo::XcodeBuildConfig.update_project_with_packagename(
|
|
108
102
|
project_dir: project_dir,
|
|
109
103
|
package_name: package_name
|
|
110
104
|
)
|
|
@@ -130,23 +124,6 @@ module Pindo
|
|
|
130
124
|
# 处理entitlements配置
|
|
131
125
|
Pindo::XcodeBuildConfig.update_entitlements_config(project_dir: project_dir, config_file: config_json_file)
|
|
132
126
|
|
|
133
|
-
# 添加URL Scheme(基于 package_name)
|
|
134
|
-
if @args_upload_flag && workflow_info && workflow_info[:package_name]
|
|
135
|
-
Pindo::XcodeBuildConfig.add_url_scheme_packagename(
|
|
136
|
-
project_dir: project_dir,
|
|
137
|
-
package_name: workflow_info[:package_name]
|
|
138
|
-
)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# 添加URL Schemes(基于 scheme_name 和 Bundle ID)
|
|
142
|
-
if @args_upload_flag
|
|
143
|
-
scheme_name = @args_proj_name
|
|
144
|
-
Pindo::XcodeBuildConfig.add_url_schemes(
|
|
145
|
-
project_dir: project_dir,
|
|
146
|
-
scheme_name: scheme_name
|
|
147
|
-
)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
127
|
if File.exist?(File.join(project_dir, "Podfile"))
|
|
151
128
|
|
|
152
129
|
args_temp = []
|
|
@@ -157,26 +157,45 @@ module Pindo
|
|
|
157
157
|
package_type: 'ipa'
|
|
158
158
|
)
|
|
159
159
|
|
|
160
|
-
# ===== 使用 workflow
|
|
160
|
+
# ===== 使用 workflow 配置更新项目 =====
|
|
161
161
|
if workflow_info && workflow_info[:package_name]
|
|
162
162
|
package_name = workflow_info[:package_name]
|
|
163
163
|
|
|
164
|
-
puts "\n使用工作流配置更新
|
|
164
|
+
puts "\n使用工作流配置更新 iOS 项目:"
|
|
165
165
|
puts " Package Name: #{package_name}"
|
|
166
166
|
|
|
167
|
-
#
|
|
168
|
-
Pindo::XcodeBuildConfig.
|
|
167
|
+
# 一次性更新 Display Name、Bundle ID 和 URL Schemes
|
|
168
|
+
Pindo::XcodeBuildConfig.update_project_with_packagename(
|
|
169
169
|
project_dir: pindo_project_dir,
|
|
170
170
|
package_name: package_name
|
|
171
171
|
)
|
|
172
|
+
else
|
|
173
|
+
raise Informative, "未获取到工作流信息"
|
|
174
|
+
end
|
|
172
175
|
|
|
173
|
-
|
|
174
|
-
|
|
176
|
+
# ===== 从 JPS 下载并替换项目 Icon =====
|
|
177
|
+
if app_info_obj && app_info_obj["projectIcon"] && !app_info_obj["projectIcon"].empty?
|
|
178
|
+
Pindo::XcodeBuildConfig.download_and_replace_icon_from_url(
|
|
175
179
|
project_dir: pindo_project_dir,
|
|
176
|
-
|
|
180
|
+
icon_url: app_info_obj["projectIcon"]
|
|
177
181
|
)
|
|
178
182
|
else
|
|
179
|
-
|
|
183
|
+
Funlog.warning("未配置 Icon URL,跳过 Icon 替换")
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# ===== 更新版本号和Build号(仅在Git仓库中)=====
|
|
187
|
+
version_helper = Pindo::VersionHelper.share_instance
|
|
188
|
+
version_info = version_helper.get_version_info(project_dir: pindo_project_dir)
|
|
189
|
+
|
|
190
|
+
if version_info[:is_git_repo]
|
|
191
|
+
# 更新iOS工程版本
|
|
192
|
+
Pindo::XcodeBuildConfig.update_ios_project_version(
|
|
193
|
+
project_dir: pindo_project_dir,
|
|
194
|
+
version: version_info[:version],
|
|
195
|
+
build_number: version_info[:build_number]
|
|
196
|
+
)
|
|
197
|
+
else
|
|
198
|
+
Funlog.warning("非Git仓库,保持工程原有版本号")
|
|
180
199
|
end
|
|
181
200
|
|
|
182
201
|
args_temp = []
|
|
@@ -186,37 +205,9 @@ module Pindo
|
|
|
186
205
|
Dir.chdir(pindo_project_dir)
|
|
187
206
|
config_json_file = File.join(pindo_project_dir,"config.json")
|
|
188
207
|
|
|
189
|
-
scheme_name = @args_proj_name if @args_proj_name
|
|
190
|
-
if !app_info_obj.nil? && !app_info_obj["scheme"].nil? && !app_info_obj["scheme"].empty?
|
|
191
|
-
scheme_name = app_info_obj["scheme"]
|
|
192
|
-
end
|
|
193
|
-
if scheme_name.nil? || scheme_name.empty? && is_git_directory?(local_repo_dir:pindo_project_dir)
|
|
194
|
-
current_git_root_path = git_root_directory(local_repo_dir: pindo_project_dir)
|
|
195
|
-
if current_git_root_path && !current_git_root_path.empty?
|
|
196
|
-
git_repo_name = File.basename(current_git_root_path)
|
|
197
|
-
if !git_repo_name.nil? && !git_repo_name.empty?
|
|
198
|
-
scheme_name = git_repo_name
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
208
|
# 处理entitlements配置
|
|
204
209
|
Pindo::XcodeBuildConfig.update_entitlements_config(project_dir: pindo_project_dir, config_file: config_json_file)
|
|
205
210
|
|
|
206
|
-
# 添加URL Scheme(基于 package_name)
|
|
207
|
-
if workflow_info && workflow_info[:package_name]
|
|
208
|
-
Pindo::XcodeBuildConfig.add_url_scheme_packagename(
|
|
209
|
-
project_dir: pindo_project_dir,
|
|
210
|
-
package_name: workflow_info[:package_name]
|
|
211
|
-
)
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
# 添加URL Schemes(基于 scheme_name 和 Bundle ID)
|
|
215
|
-
Pindo::XcodeBuildConfig.add_url_schemes(
|
|
216
|
-
project_dir: pindo_project_dir,
|
|
217
|
-
scheme_name: scheme_name
|
|
218
|
-
)
|
|
219
|
-
|
|
220
211
|
if File.exist?(File.join(pindo_project_dir, "Podfile"))
|
|
221
212
|
|
|
222
213
|
args_temp = []
|
|
@@ -270,21 +261,6 @@ module Pindo
|
|
|
270
261
|
|
|
271
262
|
Pindo::Command::Deploy::Cert::run(args_temp)
|
|
272
263
|
|
|
273
|
-
# 更新版本号和Build号(仅在Git仓库中)
|
|
274
|
-
version_helper = Pindo::VersionHelper.share_instance
|
|
275
|
-
version_info = version_helper.get_version_info(project_dir: pindo_project_dir)
|
|
276
|
-
|
|
277
|
-
if version_info[:is_git_repo]
|
|
278
|
-
# 更新iOS工程版本
|
|
279
|
-
Pindo::XcodeBuildConfig.update_ios_project_version(
|
|
280
|
-
project_dir: pindo_project_dir,
|
|
281
|
-
version: version_info[:version],
|
|
282
|
-
build_number: version_info[:build_number]
|
|
283
|
-
)
|
|
284
|
-
else
|
|
285
|
-
puts "非Git仓库,保持工程原有版本号"
|
|
286
|
-
end
|
|
287
|
-
|
|
288
264
|
Dir.chdir(pindo_project_dir)
|
|
289
265
|
Pindo::Command::Deploy::Build::run(args_temp)
|
|
290
266
|
|
|
@@ -121,37 +121,18 @@ module Pindo
|
|
|
121
121
|
package_type: 'ipa'
|
|
122
122
|
)
|
|
123
123
|
|
|
124
|
-
# ===== 使用 workflow
|
|
124
|
+
# ===== 使用 workflow 配置更新项目 =====
|
|
125
125
|
if workflow_info && workflow_info[:package_name]
|
|
126
126
|
package_name = workflow_info[:package_name]
|
|
127
127
|
|
|
128
|
-
puts "\n使用工作流配置更新
|
|
128
|
+
puts "\n使用工作流配置更新 iOS 项目:"
|
|
129
129
|
puts " Package Name: #{package_name}"
|
|
130
130
|
|
|
131
|
-
#
|
|
132
|
-
Pindo::XcodeBuildConfig.
|
|
131
|
+
# 一次性更新 Display Name、Bundle ID 和 URL Schemes
|
|
132
|
+
Pindo::XcodeBuildConfig.update_project_with_packagename(
|
|
133
133
|
project_dir: pindo_project_dir,
|
|
134
134
|
package_name: package_name
|
|
135
135
|
)
|
|
136
|
-
|
|
137
|
-
# 修改 Bundle ID
|
|
138
|
-
Pindo::XcodeBuildConfig.update_bundleid_with_packagename(
|
|
139
|
-
project_dir: pindo_project_dir,
|
|
140
|
-
package_name: package_name
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
# 添加URL Scheme(基于 package_name)
|
|
144
|
-
Pindo::XcodeBuildConfig.add_url_scheme_packagename(
|
|
145
|
-
project_dir: pindo_project_dir,
|
|
146
|
-
package_name: package_name
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
# 添加URL Schemes(基于 scheme_name 和 Bundle ID)
|
|
150
|
-
scheme_name = @args_proj_name
|
|
151
|
-
Pindo::XcodeBuildConfig.add_url_schemes(
|
|
152
|
-
project_dir: pindo_project_dir,
|
|
153
|
-
scheme_name: scheme_name
|
|
154
|
-
)
|
|
155
136
|
else
|
|
156
137
|
raise Informative, "未获取到工作流信息"
|
|
157
138
|
end
|
|
@@ -1,12 +1,64 @@
|
|
|
1
1
|
require 'fileutils'
|
|
2
|
+
require 'open-uri'
|
|
2
3
|
require_relative '../../base/funlog'
|
|
3
4
|
require_relative 'base_helper'
|
|
5
|
+
require_relative '../../base/executable'
|
|
6
|
+
require_relative 'androidreshelper'
|
|
4
7
|
|
|
5
8
|
module Pindo
|
|
6
9
|
|
|
7
10
|
class AndroidBuildConfigHelper
|
|
8
11
|
include BaseAndroidHelper
|
|
9
12
|
|
|
13
|
+
# 使用package_name一次性更新App Name、Application ID和URL Schemes
|
|
14
|
+
# 优化版本:提高性能,减少代码重复
|
|
15
|
+
# @param project_dir [String] Android项目目录路径
|
|
16
|
+
# @param package_name [String] 工作流的package_name(如:"Test Demo")
|
|
17
|
+
# @return [Boolean] 是否成功更新
|
|
18
|
+
def self.update_project_with_packagename(project_dir: nil, package_name: nil)
|
|
19
|
+
raise ArgumentError, "项目目录不能为空" if project_dir.nil?
|
|
20
|
+
raise ArgumentError, "Package Name不能为空" if package_name.nil?
|
|
21
|
+
|
|
22
|
+
# 生成各种值
|
|
23
|
+
app_name = package_name.gsub(/[^a-zA-Z0-9\s]/, '').gsub(/\s+/, '')
|
|
24
|
+
app_id_suffix = package_name.gsub(/[^a-zA-Z0-9]/, '').downcase
|
|
25
|
+
application_id = "com.heroneverdie101.#{app_id_suffix}"
|
|
26
|
+
package_scheme = package_name.gsub(/[^a-zA-Z0-9]/, '').downcase
|
|
27
|
+
bundle_scheme = application_id.gsub(/[^a-zA-Z0-9]/, '').downcase
|
|
28
|
+
|
|
29
|
+
# 1. 更新 App Name
|
|
30
|
+
success_app_name = update_app_name_with_packagename(
|
|
31
|
+
project_dir: project_dir,
|
|
32
|
+
package_name: package_name
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# 2. 更新 Application ID
|
|
36
|
+
success_app_id = update_applicationid_with_packagename(
|
|
37
|
+
project_dir: project_dir,
|
|
38
|
+
package_name: package_name
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# 3. 添加基于 package_name 的 Scheme
|
|
42
|
+
success_package_scheme = add_test_scheme(
|
|
43
|
+
project_dir: project_dir,
|
|
44
|
+
scheme_name: package_scheme
|
|
45
|
+
)
|
|
46
|
+
if success_package_scheme
|
|
47
|
+
puts " ✓ 已添加Scheme: #{package_scheme} (基于 Package Name)"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# 4. 添加基于 Application ID 的 Scheme
|
|
51
|
+
success_bundle_scheme = add_test_scheme(
|
|
52
|
+
project_dir: project_dir,
|
|
53
|
+
scheme_name: bundle_scheme
|
|
54
|
+
)
|
|
55
|
+
if success_bundle_scheme
|
|
56
|
+
puts " ✓ 已添加Scheme: #{bundle_scheme} (基于 Application ID)"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
return success_app_name && success_app_id && success_package_scheme && success_bundle_scheme
|
|
60
|
+
end
|
|
61
|
+
|
|
10
62
|
# 更新Android工程版本号
|
|
11
63
|
# @param project_dir [String] Android项目目录路径
|
|
12
64
|
# @param version_name [String] 版本名
|
|
@@ -253,27 +305,6 @@ module Pindo
|
|
|
253
305
|
end
|
|
254
306
|
end
|
|
255
307
|
|
|
256
|
-
# 使用package_name添加Android Scheme
|
|
257
|
-
# @param project_dir [String] Android项目目录路径
|
|
258
|
-
# @param package_name [String] 工作流的package_name(如:"Test Demo")
|
|
259
|
-
# @return [Boolean] 是否成功添加
|
|
260
|
-
def self.add_scheme_packagename(project_dir: nil, package_name: nil)
|
|
261
|
-
raise ArgumentError, "项目目录不能为空" if project_dir.nil?
|
|
262
|
-
raise ArgumentError, "Package Name不能为空" if package_name.nil?
|
|
263
|
-
|
|
264
|
-
# 从 package_name 生成 scheme(去除特殊字符,转小写)
|
|
265
|
-
scheme_name = package_name.to_s.gsub(/[^a-zA-Z0-9]/, '').downcase
|
|
266
|
-
|
|
267
|
-
# 调用现有的 add_test_scheme 方法
|
|
268
|
-
result = add_test_scheme(project_dir: project_dir, scheme_name: scheme_name)
|
|
269
|
-
|
|
270
|
-
if result
|
|
271
|
-
puts " ✓ 已添加Scheme: #{scheme_name} (来自: #{package_name})"
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
return result
|
|
275
|
-
end
|
|
276
|
-
|
|
277
308
|
# 添加测试scheme到Android工程
|
|
278
309
|
# @param project_dir [String] Android项目目录路径
|
|
279
310
|
# @param scheme_name [String] 要添加的scheme名称
|
|
@@ -562,6 +593,96 @@ module Pindo
|
|
|
562
593
|
end
|
|
563
594
|
end
|
|
564
595
|
|
|
596
|
+
# ===== Android Icon 处理方法(使用 AndroidResHelper)=====
|
|
597
|
+
|
|
598
|
+
# 创建Android各种密度的icon(委托给 AndroidResHelper)
|
|
599
|
+
# @param icon_path [String] 原始icon路径(建议1024x1024或512x512)
|
|
600
|
+
# @param output_dir [String] 输出目录
|
|
601
|
+
# @return [Hash] 各密度icon路径
|
|
602
|
+
def self.create_android_icons(icon_path: nil, output_dir: nil)
|
|
603
|
+
AndroidResHelper.create_icons(icon_name: icon_path, new_icon_dir: output_dir)
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
# 安装Android icon到项目中(委托给 AndroidResHelper)
|
|
607
|
+
# @param project_dir [String] Android项目目录
|
|
608
|
+
# @param icon_dir [String] icon文件目录(包含各密度文件夹)
|
|
609
|
+
# @return [Boolean] 是否成功安装
|
|
610
|
+
def self.install_android_icon(project_dir: nil, icon_dir: nil)
|
|
611
|
+
AndroidResHelper.install_icon(proj_dir: project_dir, new_icon_dir: icon_dir)
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
# 从URL下载Icon并替换Android工程的Icon
|
|
615
|
+
# @param project_dir [String] Android项目目录路径
|
|
616
|
+
# @param icon_url [String] Icon的下载URL地址
|
|
617
|
+
# @return [Boolean] 是否成功下载并替换Icon
|
|
618
|
+
def self.download_and_replace_icon_from_url(project_dir: nil, icon_url: nil)
|
|
619
|
+
# 参数校验 - 不抛出异常,返回 false
|
|
620
|
+
if project_dir.nil?
|
|
621
|
+
Funlog.instance.fancyinfo_error("Icon 替换失败: 项目目录不能为空")
|
|
622
|
+
return false
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
if icon_url.nil? || icon_url.empty?
|
|
626
|
+
Funlog.instance.fancyinfo_error("Icon 替换失败: Icon URL不能为空")
|
|
627
|
+
return false
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
puts "\n检测到项目 Icon URL: #{icon_url}"
|
|
631
|
+
|
|
632
|
+
# 创建临时目录(所有 icon 处理都在此目录进行)
|
|
633
|
+
temp_icon_dir = File.join(project_dir, ".pindo_temp_icon")
|
|
634
|
+
icon_download_path = nil
|
|
635
|
+
replace_success = false
|
|
636
|
+
|
|
637
|
+
begin
|
|
638
|
+
FileUtils.mkdir_p(temp_icon_dir) unless File.exist?(temp_icon_dir)
|
|
639
|
+
icon_download_path = File.join(temp_icon_dir, "downloaded_icon.png")
|
|
640
|
+
|
|
641
|
+
# 下载 icon
|
|
642
|
+
Funlog.instance.fancyinfo_start("正在从 JPS 下载项目 Icon...")
|
|
643
|
+
URI.open(icon_url) do |file|
|
|
644
|
+
File.binwrite(icon_download_path, file.read)
|
|
645
|
+
end
|
|
646
|
+
Funlog.instance.fancyinfo_success("Icon 下载成功!")
|
|
647
|
+
|
|
648
|
+
# 验证文件已下载
|
|
649
|
+
unless File.exist?(icon_download_path)
|
|
650
|
+
Funlog.instance.fancyinfo_error("Icon 下载失败: 文件未创建")
|
|
651
|
+
return false
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
# 生成 icon 目录(在临时目录内部)
|
|
655
|
+
new_icon_dir = File.join(temp_icon_dir, "generated_icons")
|
|
656
|
+
|
|
657
|
+
# 创建各种密度的 icon
|
|
658
|
+
Funlog.instance.fancyinfo_start("正在创建 Android icon...")
|
|
659
|
+
create_android_icons(
|
|
660
|
+
icon_path: icon_download_path,
|
|
661
|
+
output_dir: new_icon_dir
|
|
662
|
+
)
|
|
663
|
+
Funlog.instance.fancyinfo_success("创建 icon 完成!")
|
|
664
|
+
|
|
665
|
+
# 替换工程中的 icon
|
|
666
|
+
Funlog.instance.fancyinfo_start("正在替换 icon...")
|
|
667
|
+
install_android_icon(
|
|
668
|
+
project_dir: project_dir,
|
|
669
|
+
icon_dir: new_icon_dir
|
|
670
|
+
)
|
|
671
|
+
Funlog.instance.fancyinfo_success("替换 icon 完成!")
|
|
672
|
+
replace_success = true
|
|
673
|
+
|
|
674
|
+
rescue => e
|
|
675
|
+
Funlog.instance.fancyinfo_error("Icon 处理失败: #{e.message}")
|
|
676
|
+
puts e.backtrace
|
|
677
|
+
replace_success = false
|
|
678
|
+
ensure
|
|
679
|
+
# 清理临时文件(无论成功失败都清理)
|
|
680
|
+
FileUtils.rm_rf(temp_icon_dir) if temp_icon_dir && File.exist?(temp_icon_dir)
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
return replace_success
|
|
684
|
+
end
|
|
685
|
+
|
|
565
686
|
end
|
|
566
687
|
|
|
567
688
|
end
|