Class: Pindo::TaskSystem::AndroidBuildTask

Inherits:
BuildTask show all
Defined in:
lib/pindo/module/task/model/build/android_build_task.rb

Overview

Android 构建任务基类 所有 Android 平台构建任务的抽象基类 子类包括:AndroidBuildDevTask、AndroidBuildAdhocTask、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

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_outputObject

查找构建产物(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_resourcesObject

声明所需资源 - 基于项目目录锁定 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