Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Web service which converts Open Web Apps into native Android apps

APK Factory Service

Web service which takes Open Web App manifests and produces Synthetic APKs.

This service depends on APK Factory Library.

Build Status


  • GraphicsMagick
  • MySQL
  • Java 7
  • Ant (from the Android SDK)
  • unzip (UnZip, by Info-ZIP will work)

APT-based Linux:

sudo apt-get install graphicsmagick  mysql-server
# Android SDK also requires:
sudo apt-get install openjdk-7-jdk ant ia32-libs unzip

Mac OS X with brew:

brew install libtiff graphicsmagick mariadb


# Clone apk-factory-library
cd lib/ext && git clone
cd ../..
npm rebuild

# Create the database and an *apk* user with privileges on it.
mysql.server start
mysql -u root < docs/db/schema_up_000.sql
mysql -u root < docs/db/schema_up_001.sql
mysql -u root < docs/db/schema_up_002.sql
mysql -u root -e "CREATE USER 'apk'@'localhost' IDENTIFIED BY 'password';"
mysql -u root -e "GRANT ALL PRIVILEGES ON apk_factory.* TO 'apk'@'localhost';"

Install the Android SDK. See Notes on Android SDK for common setup instructions. You'll need to expose the SDK path with something like this:

export ANDROID_HOME=~/Downloads/adt-bundle-mac/sdk/

You need to have API 19 (or maybe higher?). Check for adt-bundle-mac/sdk/platforms/android-19/.

Please read config/default.js which documents the various configuration paramters and allowable values.

Local development

One time install of development only modules

npm install node-inspector tape

You'll probably want to point your local generator to a local APK Signer. See config/default.js for where to set its URL.

After setting ANDROID_HOME, fire up your local controller and generator servers like:

npm start

If everything is configured you should be able to post a manifest to your controller and get a binary APK response. Try this:

curl -v ''

curl -v -H "Content-Type: application/json" -X POST -d '{ "installed":{"":1394909578}}' https://localhost:8080/app_updates

You can generate manifests at

You can attach a debugger via two tabs in Chrome, if you do this instead of npm start

node scripts/development-server.js debug

And then load in Chrome:


There is a command line interface to create APKs locally.

node  --endpoint=http://localhost:8080 bin/cli.js application.apk


Unit tests

$ npm test

Integration tests

 $ INT_TESTING=true npm start
 $ ./node_modules/.bin/tap --timeout=999999 int-test/integration-test.js

or to target a different environment

 $ APK_ENDPOINT='' tap int-test/integration-test.js





Dev server is automatically deployed from master after a commit

OLD Dev Server

A former development server is available at

Some notes on how its process is started up:

ANDROID_HOME=/data/android-sdk-linux \
CONFIG_FILES='/home/ubuntu/apk-factory-service/config/default.js,/home/ubuntu/apk-factory-service/config/aws.js' \
forever start bin/controller

Command Line Interface

node bin/cli.js
Something went wrong with that request. Please try again.