Class: Pindo::TaskSystem::AndroidBuildTask
- Defined in:
- lib/pindo/module/task/model/build/android_build_task.rb
Overview
Android 构建任务基类 所有 Android 平台构建任务的抽象基类 子类包括:AndroidBuildDevTask、AndroidBuildAdhocTask、AndroidBuildGPlayTask
Direct Known Subclasses
AndroidBuildAdhocTask, AndroidBuildDevTask, AndroidBuildGPlayTask
Instance Attribute Summary
Attributes inherited from BuildTask
#mode, #output_path, #platform, #project_path
Attributes inherited from PindoTask
#callbacks_setup, #context, #created_at, #dependencies, #error, #finished_at, #id, #max_retry_count, #metadata, #name, #priority, #result, #retry_count, #retry_delay, #retry_mode, #skip_count, #started_at, #status, #task_key, #task_manager, #type
Instance Method Summary collapse
-
#find_output ⇒ Object
查找构建产物(APK/AAB),三个子类(dev/adhoc/gplay)共用同一套 glob 逻辑 搜索路径与过滤规则与 pindo jps upload 查找 Android 包保持一致;优先 AAB,其次 APK.
-
#required_resources ⇒ Object
声明所需资源 - 基于项目目录锁定 Gradle 构建 确保同一项目的 Gradle 构建任务串行执行,避免并发冲突.
Methods inherited from BuildTask
create_android_task, create_ios_task, create_task, create_web_task, default_retry_count, default_retry_delay, default_retry_mode, #initialize, normalize_mode, normalize_platform, task_type, task_type_name
Methods inherited from PindoTask
#before_retry, #cancel, #cancelled?, #check_cancelled!, #data_param, default_retry_count, default_retry_delay, default_retry_mode, #do_task, #execution_time, #finished?, #get_all_data_params, #get_all_data_params_by_key, #get_all_dependencies_results, #get_data_param, #get_data_param_by_key, #get_dependency_result, #get_dependency_task, #initialize, #on, #primary_data_param, #release_resource, #release_resources, #reset_for_retry, #retryable?, #running?, #should_retry?, task_key, task_type, #validate, #with_resource, #with_resources
Constructor Details
This class inherits a constructor from Pindo::TaskSystem::BuildTask
Instance Method Details
#find_output ⇒ Object
查找构建产物(APK/AAB),三个子类(dev/adhoc/gplay)共用同一套 glob 逻辑 搜索路径与过滤规则与 pindo jps upload 查找 Android 包保持一致;优先 AAB,其次 APK
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/pindo/module/task/model/build/android_build_task.rb', line 19 def find_output search_paths = [] search_paths.concat(TaskConfig::BUILD_OUTPUT_PATTERNS[:apk].map { |p| File.join(@project_path, p) }) search_paths.concat(TaskConfig::BUILD_OUTPUT_PATTERNS[:aab].map { |p| File.join(@project_path, p) }) package_files = [] search_paths.each do |pattern| package_files.concat(Dir.glob(pattern)) end # 过滤测试包和未签名包 package_files.reject! do |f| basename = File.basename(f).downcase TaskConfig::EXCLUDED_PATTERNS.any? { |pattern| basename.include?(pattern) } end if package_files.any? # 优先返回 AAB,其次 APK aab_files = package_files.select { |f| f.end_with?(".aab") } apk_files = package_files.select { |f| f.end_with?(".apk") } latest_package = if aab_files.any? aab_files.max_by { |f| File.mtime(f) } elsif apk_files.any? apk_files.max_by { |f| File.mtime(f) } else package_files.max_by { |f| File.mtime(f) } end puts " 找到 Android 包文件: #{latest_package}" latest_package else # 构建已执行但产物缺失,视为失败,不静默返回 nil raise Informative, "构建完成但未找到 APK/AAB 文件" end end |
#required_resources ⇒ Object
声明所需资源 - 基于项目目录锁定 Gradle 构建 确保同一项目的 Gradle 构建任务串行执行,避免并发冲突
13 14 15 |
# File 'lib/pindo/module/task/model/build/android_build_task.rb', line 13 def required_resources (super || []) + [{ type: :gradle, directory: @project_path }] end |