Build Type

This determines the final compilation output of your project.

Available Outputs

Data Privacy & Retention Policy: SwapLab is a build engine, not a file hosting service. To guarantee your privacy, all final output artifacts (APK, AAB, ZIP) are permanently deleted after exactly 1 hour via an automated Cloudflare R2 cron job, regardless of whether the build succeeded or failed. Please download your files promptly.

Prerequisites for Release Builds (APK/AAB)

Unlike Debug builds, selecting a Release build triggers a strict signing process. To execute this securely, you must configure your private repository's YAML file to accept the keystore injection.

1. Update Your Workflow File

You must add exactly one new line to Step 4 of your swaplab-workflow-cache.yml file in your private repository.

Before (Public Version):

# 4. Execute the build engine in an isolated container
      - name: SwapLab Run Build Android Engine
        run: |
          docker run --rm -i \
            -v ~/.gradle/caches:/github/workspace/.gradle/caches \
            ...
            -e GITHUB_RUN_ID=${{ github.run_id }} \
            ghcr.io${{ github.event.inputs.imageName }}:${{ github.event.inputs.ref }}

After (Private Release Version):

# 4. Execute the build engine in an isolated container
      - name: SwapLab Run Build Android Engine
        run: |
          docker run --rm -i \
            -v ~/.gradle/caches:/github/workspace/.gradle/caches \
            ...
            -e GITHUB_RUN_ID=${{ github.run_id }} \
            -e INPUT_KEYSTORE_BASE64=${{ secrets.KEYSTORE_BASE64 }} \
            ghcr.io${{ github.event.inputs.imageName }}:${{ github.event.inputs.ref }}

2. GitHub Repository Secrets

You must create a new Repository Secret in your GitHub repository named exactly KEYSTORE_BASE64. The value must be the Base64 encoded string of your `.jks` file.

💡 Need a Keystore? If you don't have one, or need to convert your existing .jks file to Base64, you can safely use our free companion tool at keystore.swaplab.net.
Security & Just-In-Time (JIT) Injection: When you start a Release build, the keystore metadata (passwords and alias) you enter in the UI is encrypted during transit. It is never uploaded to R2 and is never written to disk. The engine retrieves these credentials strictly into RAM right before Gradle compilation begins (after passing SAST/SCA security scans) and destroys them immediately when the job finishes.