Documentation

Channels and rollouts

Understand native channel identity and control each channel and native version independently.

Updated 2026-09-15

On this page

Choose a setup

For one distribution, leave the channel unset and use default. Configure additional channels when stores or internal testers need separate updates.

This guide creates an Android huawei channel, writes it into the app, registers the resulting build, and publishes an update.

What a channel does

One application can release to 10% of eligible Huawei devices and 100% of eligible Xiaomi devices independently.

FieldExampleWhere to set it
Display nameHuawei storeConsole
Channel codehuaweiConsole and native app; values must match
Native version1.0.0Android versionName / iOS app version

1. Create the channel

  1. Sign in, open Applications, and enter the application.

  2. Open Channels and choose Create channel.

  3. Enter huawei as the code and a readable channel name.

  4. Keep hot updates enabled and the option to ignore timestamp/fingerprint checks disabled. The native download URL can remain empty.

  5. Save and confirm the channel appears.

Codes contain 1–64 lowercase letters, digits, dots, underscores or hyphens. They cannot be edited after creation. Do not create another default channel.

Alternatively, after selecting the app:

bash
pakta createChannel --name huawei --code huawei
pakta channels --platform android

2. Configure the native app

Follow your platform below. The channel belongs to the installed native build. Neither new Pakta() nor an upload flag changes it. Rebuild and install after editing.

Android

In android/app/src/main/AndroidManifest.xml, add this inside the existing <application>. Keep its other attributes and activities.

android/app/src/main/AndroidManifest.xml · inside application
<meta-data android:name="channel" android:value="huawei" />

Build from the android directory:

Windows
.\gradlew.bat assembleRelease
macOS / Linux
./gradlew assembleRelease

Without product flavors, the output is usually android/app/build/outputs/apk/release/app-release.apk. Install and keep that exact APK.

For existing flavors, use ${PAKTA_CHANNEL} as the manifest value and set manifestPlaceholders = [PAKTA_CHANNEL: "huawei"] inside the relevant flavor in android/app/build.gradle. Supply a value for every flavor and run its Release build task.

iOS

Add these entries to the root <dict> in your app target's ios/YourApp/Info.plist:

Info.plist · inside dict
<key>channel</key>
<string>appstore</string>

For an automatically generated plist, add a String property named channel, valued appstore, under the app target's Info → Custom iOS Target Properties. Do not edit a Pod's plist.

Create appstore in the console. Archive again, export and retain the IPA, and install the corresponding build.

HarmonyOS

After native integration, add channel to harmony/entry/src/main/resources/rawfile/meta.json:

harmony/entry/src/main/resources/rawfile/meta.json
{
  "channel": "huawei"
}

Preserve existing fields. The SDK Hvigor plugin retains the channel and writes build time and version. Sign and rebuild the .app in DevEco Studio; install and retain it.

Expo

For manually maintained android / ios directories, follow the native instructions above. With Expo prebuild or EAS, add this entry to expo.plugins:

app.json · expo.plugins
{
  "expo": {
    "plugins": [
      ["rn-update", { "channel": "huawei" }]
    ]
  }
}

The channel is written to Android manifest metadata and iOS Info.plist. Use separate build configurations for different platform channels. No plugin entry is needed for default. See the Expo guide.

3. Inspect and upload the build

From the application root:

bash
pakta selectApp --platform android
pakta parseApk ./android/app/build/outputs/apk/release/app-release.apk
pakta uploadApk ./android/app/build/outputs/apk/release/app-release.apk --channel huawei

Verify the parsed channel and native version before uploading. --channel only checks the value. If it disagrees, fix native configuration and rebuild.

FormatInspectUpload
APKparseApk PATHuploadApk PATH --channel huawei
AABparseAab PATHuploadAab PATH --channel huawei
IPAparseIpa PATHuploadIpa PATH --channel appstore
Harmony APPparseApp PATHuploadApp PATH --channel huawei

Refresh Native builds in the console. The channel and version must appear before you can select them as a release target.

4. Publish to a channel

Build a .ppk, then run:

bash
pakta publish .pakta/output/android.ppk --platform android --name fix-001 --channel huawei --packageVersion 1.0.0 --rollout 10 --no-interactive

Replace 1.0.0 with the uploaded native version. Use 100% for an isolated test application; start production releases with a small percentage. For browser steps, see console publishing.

To release to several channels, create this file in the app root:

targets.json
[
  { "channel": "huawei", "packageVersion": "1.0.0", "rollout": 10 },
  { "channel": "xiaomi", "packageVersion": "1.0.0", "rollout": 100 }
]
bash
pakta publish .pakta/output/android.ppk --platform android --name fix-001 --targets targets.json --no-interactive

Both targets need registered native builds. Build and publish separately for Android, iOS and HarmonyOS.

Adjust, stop and recover

Click a target's channel/version label on the update row, or open Publish to edit multiple targets. Preview and confirm every change.

  • Stop one target with Cancel release.

  • Stop a whole channel under Channels → Configure, turn off hot updates and save.

  • Restore a stable historical package to the same channel and native version using Roll back to full rollout.

Stopping or reducing a rollout does not remove updates already installed. Recovery still requires device checks, downloads and activation. See recovery steps.

Internal testing

Create internal, write it into a test build, and distribute that build to testers. Publish there first, verify, then release to production channels. Renaming a console channel does not move installed devices between channels.