This action will help you zipalign
and sign an Android .apk
or .aab
(Android App Bundle) file for release. Based on https://github.com/r0adkll/sign-android-release.
Required: The relative directory path in your project where your Android release file will be located
Required: The base64 encoded signing key used to sign your app
This action will directly decode this input to a file to sign your release with. You can prepare your key by running this command on *nix systems.
openssl base64 < some_signing_key.jks | tr -d '\n' | tee some_signing_key.jks.base64.txt
Then copy the contents of the .txt
file to your GH secrets
Optional: The alias of your signing key (note: if you're signing an aab
file, this is still required.)
Required: The password to your signing keystore
Optional: The private key password for your signing keystore
Optional: True to run zipalign
on the .apk
to perform the operation, rather than just verify zipalign.
Optional: Whether to use the -p
flag with zipalign
, which page-aligns uncompressed .so files.
Optional: You can manually specify a version of build-tools to use. We use 33.0.0
by default.
Output variables are set both locally and in environment variables.
The path to the single release file that have been signed with this action. Not set if several release files have been signed.
The paths to the release files that have been signed with this action,
separated by :
.
The output variable signedReleaseFile
can be used in a release action.
steps:
- uses: kevin-david/zipalign-sign-android-release@v2
name: Sign app APK
# ID used to access action output
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
zipAlign: true
env:
# override default build-tools version (33.0.0) -- optional
BUILD_TOOLS_VERSION: "34.0.0"
# Example use of `signedReleaseFile` output -- not needed
- uses: actions/upload-artifact@v4
with:
name: Signed app bundle
path: ${{steps.sign_app.outputs.signedReleaseFile}}
The output variables signedReleaseFileX
can be used to refer to each signed release file.
steps:
- uses: kevin-david/zipalign-sign-android-release@v2
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
- name: Example Release
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: true
title: "Release X"
files: |
${{ steps.sign_app.signedReleaseFile0 }}
${{ steps.sign_app.signedReleaseFile1 }}
${{ steps.sign_app.signedReleaseFile2 }}
${{ steps.sign_app.signedReleaseFile3 }}
${{ steps.sign_app.signedReleaseFile4 }}
The output variable signedReleaseFiles
must be split first,
before being used in a release action.
steps:
- uses: kevin-david/zipalign-sign-android-release@v2
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
alias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
zipAlign: true
- uses: jungwinter/split@v1
id: signed_files
with:
msg: ${{ steps.sign_app.signedReleaseFiles }}
separator: ':'
- name: Example Release
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: true
title: "Release X"
files: |
${{ steps.signed_files._0 }}
${{ steps.signed_files._1 }}
${{ steps.signed_files._2 }}
${{ steps.signed_files._3 }}
${{ steps.signed_files._4 }}