app-store/UPLOAD_APP_REMOTE.md

3.0 KiB

Upload Android App to Local App Store (Remote)

Use this skill to upload a built Android APK to the Local App Store server remotely via HTTP. The server is at 192.168.8.128:9800.

Prerequisites

  • A signed release APK file (.apk)
  • curl available on the machine running this skill

Step 1: Create Metadata JSON

Create a JSON file with app metadata. All fields except screenshots are required:

{
  "name": "App Display Name",
  "description": "One or two sentences describing the app.",
  "icon": null,
  "screenshots": [],
  "package_name": "com.your.package",
  "version_name": "1.0",
  "version_code": "1",
  "min_sdk": "26",
  "target_sdk": "34",
  "permissions": ["android.permission.INTERNET"]
}

Field notes:

  • name: Human-readable display name shown in the store
  • description: Short description shown in app details
  • icon: null if no PNG icon in the APK, otherwise the resource path inside the APK (e.g., res/drawable-mdpi/ic_launcher.png). If the APK only has XML vector drawables, use null.
  • package_name: Must match applicationId in build.gradle
  • version_name / version_code: Must match build.gradle defaultConfig
  • min_sdk / target_sdk: Must match build.gradle defaultConfig
  • permissions: Array of <uses-permission android:name="..." /> values from AndroidManifest.xml, or [] if none
  • screenshots: [] unless you have screenshot PNG files to upload separately

Save this as metadata.json.

Step 2: Choose App ID

Pick a lowercase, hyphen-separated ID for the app (e.g., my-app, hello-world, flappy-bird). This becomes the app's identifier in the store.

Step 3: Upload via curl

curl -X POST http://192.168.8.128:9800/api/upload \
  -F "apk=@/path/to/app-release.apk" \
  -F "app_id=YOUR_APP_ID" \
  -F "metadata=@/path/to/metadata.json"

Expected response (HTTP 200):

{
  "id": "YOUR_APP_ID",
  "name": "App Display Name",
  "package_name": "com.your.package",
  "version_name": "1.0",
  "version_code": "1",
  "message": "App 'YOUR_APP_ID' uploaded successfully"
}

Error responses:

  • 400 — Metadata JSON is missing required fields (name, description) or APK is invalid
  • 409 — Same app_id + version_code already exists in the store (use a different app_id or bump version)

Step 4: Verify

curl -s http://192.168.8.128:9800/api/apps | python3 -c "
import json, sys
data = json.load(sys.stdin)
for app in data['apps']:
    if app['id'] == 'YOUR_APP_ID':
        print('SUCCESS: Found', app['name'], '(v' + app['version_name'] + ')')
        sys.exit(0)
print('FAILURE: App not found')
"

Updating an Existing App

To push a new version of an existing app, use the same app_id but with updated version_name and version_code in the metadata JSON. The server will replace the APK if the new version_code is higher.

Download the Uploaded APK (Optional)

After upload, the APK is also available for browser download at:

http://192.168.8.128:9800/dl/YOUR_APP_ID.apk