App signing
You do not supply a keystore. Appsinity signs every Android build with its own key, on the server, and hands back an installable APK.
Open Appsinity StudioThe signing key
A keystore is generated per project when none exists, with these fixed parameters:
- The key stays on Appsinity infrastructure. You cannot download it, and you cannot substitute your own.
- Because validity is ~27 years, expiry is not a realistic failure for a listing.
- The
CNis your project id, so the certificate subject is the one place your project identity is visible to anyone who inspects the APK.
keypair RSA 2048
validity 10000 days
alias appsinity
distinguished name
CN=<project id>, OU=Appsinity Studio,
O=Appsinity Technologies, L=Faridabad,
ST=Haryana, C=INThe pipeline, in order
- Gate. Only
.apkand.aabare accepted. Anything else returns Only APK and AAB files can be signed. - Bundle (AAB only).
bundletool build-apks --mode universalthen extractsuniversal.apk. - Align.
zipalignto a 4-byte boundary — required before apksigner on modern Android. - Sign.
apksignerwith the project keystore and theappsinityalias. - Scan. The malware scanner runs against the signed output.
- Upload. The result is copied to storage under a key derived from the source path.
- Patch the record. The build document gains the signed fields, and the local working copy is deleted.
POST https://api.appsinity.com/api/apps/{appId}/builds/sign
Authorization: Bearer <developer token>
{ "buildUrl": "https://storage.appsinity.com/public/games/<id>/builds/<v>/game.aab" }The fields signing writes
| Field | Meaning |
|---|---|
signingStatus | Progress marker; failed on error |
signedApkUrl | The installable output — what players receive |
originalBuildUrl | The file you uploaded |
sourceType | Whether the source was an APK or an AAB |
originalSizeBytes / signedSizeBytes | Sizes before and after alignment and signing |
signedAt | When it completed |
signingError | Written only on failure |
signedApkUrl is the field the download chain and the dashboard both look for. A listing whose build has only originalBuildUrl is offering an unsigned — and for an AAB, uninstallable — file.How signing gets triggered
Two routes exist. The dashboard calls the endpoint when you save a build: it only submits .aab files, and reports Saved. Signing started. or Saved. Signing is queued and finishes automatically.
Separately, a background signer on the server polls every 30 seconds and picks up AAB rows that have no signedApkUrl. That loop is the safety net, and it is why an upload that appeared to fail to sign often signs itself within half a minute.
- The sign endpoint itself is synchronous. A large bundle can exceed the 60-second proxy timeout and return a 504 while the signing continues — see the FAQ.
- An APK upload from the dashboard is not auto-submitted; the signing call is gated on the AAB extension.
- There is no signing-status badge in Studio. Read the listing, or download the file.
Failure modes
On failure the record keeps the original URL and writes signingError. Nothing falls back automatically, so check the listing after any failure.
| Symptom | Cause | Fix |
|---|---|---|
| Only APK and AAB files can be signed. | Wrong upload type | Upload the Android package |
| "Failed to fetch" on the sign request | A 60-second gateway timeout on a long signing run | Wait 30-60 s and reload; the background signer usually completes it |
signingStatus: failed | Corrupt archive, alignment error, or a tool failure | Rebuild and re-upload; if it repeats, send the build URL to devhelp |
| Signed APK missing after success | The upload step to storage failed | Re-trigger signing |
| "Could not delete original AAB" in logs | Storage CLI not on the server path | Cosmetic — the signed output is unaffected |
Frequently asked questions
Can I use my own keystore?
No. The signing key is generated and held per project by Appsinity and is not exportable.
Will I lose the ability to update if I leave Appsinity?
Yes for existing installs — an update signed with your own key cannot replace an Appsinity-signed one. Players must uninstall first.
Does signing change the APK size?
Slightly, and signedSizeBytes records it. An AAB's universal APK is much larger than the bundle, see Android App Bundle.
Developer publishing support: [email protected]
General support: [email protected]
Partnerships: [email protected]
APPSINITY