APK-файлы и треки

API разработчика Google Play позволяет загружать новые APK-файлы для ваших приложений и выпускать их в различных версиях . Это позволяет разворачивать альфа- и бета-версии приложения, доступные только одобренным пользователям. Кроме того, это позволяет развернуть поэтапную версию, которая автоматически становится доступна ограниченному числу пользователей приложения. После выпуска поэтапной версии вы можете постепенно увеличивать число пользователей, получающих эту версию приложения, пока, наконец, не развернёте её в качестве «рабочей».

Добавление и изменение APK

  1. Загрузите один или несколько APK-файлов, вызвав метод загрузки Edits.apks:.

    Этот метод загружает APK-файл в хранилище, где его можно назначить на «трек» для распространения среди пользователей. (Если редактирование удалено или отменено, все APK-файлы, загруженные в это редактирование, также будут утеряны.)

  2. Вы можете выпустить APK-файлы на «треках», вызвав Edits.tracks: update . Вы можете выпустить APK-файлы на следующих треках:

    • Тестовые версии, такие как "alpha" и "beta"

      Альфа- и бета-версии приложения развёртываются для пользователей, назначенных вами в группы альфа- и бета-тестирования. Вы назначаете пользователей в эти группы через Google Play Console.

    • Внутренний тестовый трек: "qa"

      Внутренние версии вашего приложения развертываются на вашей внутренней тестовой платформе, как настроено в Google Play Console.

    • Производственный трек: "production"

      Релизы в режиме «production» развертываются для всех пользователей. Вы можете использовать поэтапные релизы в режиме «production», чтобы безопасно развернуть релиз сначала для небольшой доли пользователей, а затем постепенно увеличивать этот процент по мере роста вашей уверенности в релизе.

    Пользователи простого режима не должны загружать более одного APK на каждый трек. Пользователи расширенного режима, использующие поддержку нескольких APK, могут загружать ноль, один или несколько APK на каждый трек.

Название трека для треков форм-фактора

Имя дорожки для дорожки форм-фактора предваряется определенным идентификатором.

Форм-фактор Префикс
Автомобильная ОС Android автомобильный
Wear OS носить
Android TV тв
Android XR android_xr
Google Play Игры на ПК google_play_games_pc

Как вычислить название дорожки для дорожки заданного форм-фактора?

У таких обычных типов путей, как производственный, открытый и внутренний, есть хорошо известные названия путей.

Тип пути Название трека по умолчанию
Производство производство
Открытое тестирование бета
Внутреннее тестирование ка

Имя трека для заданного форм-фактора можно вычислить следующим образом: "[prefix]:defaultTrackName" . Например, для форм-фактора Wear OS будут треки с именами: "wear:production" , "wear:beta" и "wear:qa" .

Треки закрытого тестирования создаются вручную и имеют собственные названия. Например, трек закрытого тестирования для форм-фактора с именем $name будет иметь название "[prefix]:$name" .

Пример рабочего процесса APK

В этом разделе описывается типичный способ использования API Tracks. В данном случае мы предполагаем, что вы хотите загрузить новые версии APK для каждого трека и назначить ряду пользователей, которым будет предоставлена поэтапная версия. (На практике разработчик вряд ли выполнит все эти действия за один раз; вместо этого вы можете обновить бета-версию в один день, создать поэтапный релиз в «рабочей» версии в другой день и так далее.)

  1. Откройте новое редактирование, как описано в разделе «Рабочий процесс редактирования».
  2. Вызовите метод Edits.apks: upload для каждого APK-файла, который вы хотите загрузить. Передайте APK-файл в теле запроса метода. (Это помещает APK-файл в область хранения, но не выпускает его на трек и не развёртывает.) Метод возвращает код версии для каждого загружаемого APK-файла; этот код версии будет использоваться для ссылки на APK-файл при его выпуске на трек.
  3. Вызовите метод Edits.tracks: update для каждой версии, для которой вы хотите выпустить APK-файлы. В теле запроса передайте ресурс Edits.tracks , содержащий версию, которую вы хотите выпустить. Например, чтобы выпустить APK с кодом версии 88:

    {
    "releases": [{
      "versionCodes": ["88"],
      "status": "completed"
    }]
    }

    На этом этапе APK-файлы всё ещё недоступны пользователям. Как и в случае с другими правками, изменения не будут опубликованы, пока вы их не закоммитите.

  4. Вызовите метод Edits: commit , чтобы зафиксировать изменения. После этого пользователи каждого трека получат обновлённую версию APK. (Как и в случае с любыми другими изменениями, вступление изменений в силу может занять несколько часов.)

Поэтапные внедрения

Когда у вас есть новая версия APK-файла, которую вы хотите постепенно развернуть, вы можете выпустить её в формате поэтапного развёртывания. В этом случае Google Play автоматически развёртывает её для нужной доли пользователей приложения, которую вы укажете. Если APK-файл для развёртывания не содержит проблем (например, сбоев и т. д.), вы можете увеличить долю пользователей, получающих эту версию; когда будете готовы, вы можете развернуть этот APK в качестве новой рабочей версии.

В этом разделе описываются шаги, которые необходимо выполнить для поэтапного развертывания APK-файла и последующего его перевода в эксплуатацию:

  1. Создайте редактирование, как описано в разделе Рабочий процесс редактирования .

  2. Загрузите новый APK в редактирование, используя метод загрузки Edits.apks :.

  3. Запустите поэтапный релиз "inProgress" в рабочей версии с помощью метода обновления Edits.tracks:. Выберите долю пользователей, которые должны получить новый APK. На этом этапе APK всё ещё недоступен ни одному конечному пользователю.

    {
    "releases": [{
      "versionCodes": ["99"],
      "userFraction": 0.05,
      "status": "inProgress"
    }]
    }

  4. Зафиксируйте изменения в активном редактировании, вызвав Edits: commit . В течение следующих нескольких часов новый APK будет развёрнут для пользователей. Выбранная вами доля пользователей получит новый APK.

В зависимости от успешности поэтапного внедрения вы можете захотеть увеличить процент пользователей, имеющих право на этот выпуск, или приостановить выпуск.

Увеличение доли пользователей при поэтапном развертывании

Если предположить, что у вас есть поэтапное развертывание на уровне 5%, как описано в предыдущем разделе, в этом разделе описывается, как увеличить процент в случае, если выпуск проходит успешно:

  1. Создайте редактирование, как описано в разделе Рабочий процесс редактирования .

  2. Измените этап выпуска "inProgress" в рабочей версии с помощью метода обновления Edits.tracks :. Увеличьте долю пользователей, которые должны получить новый APK:

    {
    "releases": [{
      "versionCodes": ["99"],
      "userFraction": 0.1,
      "status": "inProgress"
    }]
    }

  3. Зафиксируйте изменения в активном редактировании, вызвав Edits: commit . В течение следующих нескольких часов новый APK будет развёрнут для пользователей. Выбранная вами доля пользователей получит новый APK.

Остановка поэтапного внедрения

Предполагая, что у вас есть поэтапное развертывание на уровне 5%, как описано в предыдущем разделе, в этом разделе описывается, как остановить поэтапное развертывание в случае обнаружения проблемы:

  1. Создайте редактирование, как описано в разделе Рабочий процесс редактирования .

  2. Измените статус релиза "inProgress" на этапе производства с помощью метода Edits.tracks: update . Установите статус "halted" .

    {
    "releases": [{
      "versionCodes": ["99"],
      "status": "halted"
    }]
    }

  3. Зафиксируйте изменения в активном редактировании, вызвав Edits: commit . Ваш релиз больше не будет доступен новым пользователям.

Если позднее вы решите возобновить приостановленный выпуск, вы сможете сделать это, вернув ему статус "inProgress" .

Завершение поэтапного внедрения

Если вы довольны поэтапным развертыванием и хотите распространить релиз среди 100% пользователей, вы можете установить статус релиза на "completed" :

  1. Создайте редактирование, как описано в разделе Рабочий процесс редактирования .

  2. Измените статус релиза "inProgress" на этапе производства с помощью метода Edits.tracks: update . Установите статус "completed" .

    {
    "releases": [{
      "versionCodes": ["99"],
      "status": "completed"
    }]
    }

  3. Зафиксируйте изменения в активном редактировании, вызвав Edits: commit . В течение следующих нескольких часов новый APK будет развёрнут для пользователей. Выбранная вами доля пользователей получит новый APK.

Остановить завершенное развертывание

Предполагая, что у вас есть завершенное развертывание на трассе, как описано в предыдущем разделе, в этом разделе описывается, как остановить завершенное развертывание в случае обнаружения проблемы:

  1. Создайте редактирование, как описано в разделе Рабочий процесс редактирования .

  2. Измените статус релиза на "completed" в производственном треке с помощью метода Edits.tracks: update . Установите статус на "halted" .

    {
    "releases": [{
      "versionCodes": ["99"],
      "status": "halted"
    }]
    }

  3. Зафиксируйте изменения в активной версии, вызвав Edits: commit . Ваш релиз больше не будет доступен новым пользователям или существующим пользователям для обновления.

Релиз, который начнёт публиковаться вместо "completed" релиза, будет представлять собой предыдущий "completed" релиз в треке, который был опубликован и не остановлен. Обратите внимание, что это означает, что остановить "completed" релиз в треке можно только в том случае, если в этом треке уже опубликован один или несколько "completed" релизов.

Если вы вызовете GetTrack или ListTracks , когда "completed" релиз остановлен, «обслуживающий резервный релиз» будет отображаться как завершенный релиз на той трассе, на которой был остановлен предыдущий "completed" релиз.

Например, если изначально у вас был alpha -трек, который выглядел так:

{
  "track": "alpha",
  "releases": [
    {
      "name": "2 (2.0)",
      "versionCodes": [
        "2"
      ],
      "status": "completed"
    }
  ]
}

и вы остановили "completed" релиз, следуя инструкциям в этом разделе, вызов GetTrack для alpha версии вернет что-то вроде этого:

{
  "track": "alpha",
  "releases": [
    {
      "name": "2 (2.0)",
      "versionCodes": [
        "2"
      ],
      "status": "halted"
    },
    {
      "name": "1 (1.0)",
      "versionCodes": [
        "1"
      ],
      "status": "completed"
    }
  ]
}

Если позже вы решите возобновить работу над "completed" релизом, вы сможете вернуть ему статус "inProgress" или "completed" . Обратите внимание, что вы можете создать новый релиз со статусом "inProgress" поверх "completed" , но тогда вы сможете возобновить работу над "completed" релизом только до 100% (т.е. до статуса "completed" ).

Проекты релизов

Черновые релизы позволяют автоматически загружать APK-файлы и создавать релизы через API, которые затем можно развернуть через Google Play Console. Чтобы создать черновой релиз для трека:

  1. Откройте новое редактирование, как описано в разделе «Рабочий процесс редактирования».
  2. Вызовите метод Edits.apks: upload для каждого APK-файла, который вы хотите загрузить. Передайте APK-файл в теле запроса метода. Метод возвращает код версии для каждого загружаемого APK-файла; этот код версии будет использоваться для ссылки на APK-файл при назначении его релизу.
  3. Вызовите метод Edits.tracks: update для каждого трека, который вы хотите выпустить. В теле запроса передайте ресурс Edits.tracks , содержащий черновик релиза, который вы хотите создать. Например:

    {
    "releases": [{
      "name": "My draft release",
      "versionCodes": ["88"],
      "status": "draft"
    }]
    }

  4. Вызовите метод Edits: commit для фиксации изменений. Теперь ваш черновик релиза можно проверить и внедрить через Google Play Console или API.

Указание примечаний к выпуску

При выпуске новой версии вашего приложения вы можете проинформировать пользователей о новых возможностях, указав примечания к выпуску.

Для этого используйте поле "releaseNotes" при предоставлении ресурса Edits.tracks методу обновления Edits.tracks :.

{
  "releases": [{
      "name": "Release with notes",
      "versionCodes": ["88"],
      "status": "completed",
      "releaseNotes": [
        {"language": "en-US", "text": "Describe what's new in this release."}
      ]
  }]
}