Web service which converts Open Web Apps into native Android apps
JavaScript Shell
Latest commit a538ed7 Aug 3, 2015 @dannycoates dannycoates Merge pull request #87 from mozilla/readme-tweaks
Small tweaks to make the installation and debugging more complete
Permalink
Failed to load latest commit information.
bin Decrement build for uncaught exceptions. Fixes Issue#74 Jul 29, 2014
config Controller/Generator should return 503 based on config.maximumNumberO… Jul 14, 2014
docs Merge pull request #79 from pdehaan/patch-1 Oct 14, 2014
int-test Rework review and release modes. Use ant debug. Fixes Bug#988644 Apr 2, 2014
lib FileLoader.copy should use a buffer instead of string. fixes #84 Jan 7, 2015
node_modules Enhance monolith logging for app updates Apr 14, 2014
scripts Rework review and release modes. Use ant debug. Fixes Bug#988644 Apr 2, 2014
test-manifests Started reorganizing builder into apk-factory-service Nov 20, 2013
test Controller/Generator should return 503 based on config.maximumNumberO… Jul 14, 2014
util-templates Started reorganizing builder into apk-factory-service Nov 20, 2013
.gitignore Moving apk-factory-library install path out of node_modules. Fixes Bu… Feb 4, 2014
.jshintrc Adding .jshintrc Jan 28, 2014
.travis.yml We're too noisy for #mobile Feb 12, 2014
Gruntfile.js Started reorganizing builder into apk-factory-service Nov 20, 2013
README.md Small tweaks to make the installation and debugging more complete Aug 1, 2015
RELEASE_NOTES.md Create release-2014-04-02-01 release Apr 2, 2014
build Bug 979759: run npm rebuild during build process. Mar 6, 2014
install-tools.sh Started reorganizing builder into apk-factory-service Nov 20, 2013
package.json Made CLI build packaged apps. Fixes Bug#962879 Apr 25, 2014

README.md

APK Factory Service

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

This service depends on APK Factory Library.

Build Status

Dependencies

  • 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 g++
# 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

Installation

# Clone apk-factory-library
cd lib/ext && git clone https://github.com/mozilla/apk-factory-library.git
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 JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
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.

Use config/developer.js to override any settings.

cp config/developer.js-dist config/developer.js

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 'http://127.0.0.1:8080/application.apk?manifestUrl=http://deltron3030.testmanifest.com/manifest.webapp'

curl -v -H "Content-Type: application/json" -X POST -d '{ "installed":{"http://deltron3030.testmanifest.com/manifest.webapp":1394909578}}' https://localhost:8080/app_updates

You can generate manifests at testmanifest.com.

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:

Logs will appear in var/log

Logs will appear in var/log/apk-generator.log and var/log/apk-controller.log

Testing

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='http://dapk.net' tap int-test/integration-test.js

To check if things are working, you can request an APK build from your local server like this:

curl -v -o application.apk 'http://localhost:8080/application.apk?manifestUrl=https://yacht.paas.allizom.org/yacht/manifest.webapp'

Where the manifestUrl is a valid link to an open web app manifest.

Deployment

Production

Stage

Dev

Dev server is automatically deployed from master after a commit

https://apk-controller.dev.mozaws.net

OLD Dev Server

A former development server is available at http://dapk.net.

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

Monitoring

Check out the monitoring documentation.