Android Adventures, part 6: Building a signed .apk from Processing
Processing makes it really easy to “Present” a sketch to your Android phone via it’s “Present” button. This creates a special ‘debug’ apk that can run on your specific device, but isn’t distributable (and I can’t even find it on the phone) to others. There is no easy way (yet) to get these sketches to other users via the apk format. But thanks to the great user community (and one specific post in question) I was able to get a signed apk built and installed on my phone. Follow-up post will expose this apk to the world 😉
How to do it?
First Export the sketch. Then Sign the Sketch. Sounds easy. The first part is… 😉 Below is the process I took to get my “floater08″ sketch “apk’ed”, so it’s what I’ll use as an example:
Part 1: Export the sketch
- From the Processing PDE, open the sketch (go into ‘Android -> Android Mode’), and press the “Export” button (arrow facing to right). This will export the android data and put it in an \export folder under the sketch:
- C:\sketchbook\floater08\android
That’s the easy part.
Part 2: Signing the sketch
Docs:
The Android-Processing wiki (under the ‘Distributing Apps’ section) links to these Android Docs for signing an APK. But I followed the steps on this incredibly helpful post (the ones by user ‘ckamath‘ specifically) to get me going. Below is an overview of my process working with this information.
Install Tools:
Like the post says, make sure you can run these commands from a shell: keytool, jarsigner, zipalign, ant. I didn’t have ant, so I installed it from here, following these steps (specifically everything it says to do under “The Short Story” & “Setup”). jarsigner and keytool are provided via the JDK which I’d already installed.
Like the post says, I also (apparently) needed cygwin which provides OpenSSL. After downloading and running the setup.exe cygwin installer, I figured out I needed to filter the install list for ‘openssl’, and then I needed to select each entry for install. It was all a bit clunky and cryptic, and the installer seemed to crash a couple times. But it did install (with a bunch of other stuff too apparently).
Run Code:
These are my steps, which more or less follow ckamath’s tutorial in the above post:
- Open a shell.
- Browse to the \android folder where your export data is. In my case that was:
- C:\sketchbook\floater08\android
- In the below examples, this is the presumed path from the shell that the code is being entered from.
- A: Make your secret key!
- Create the ‘secret key’ that is required for signing your application:
- Here is a template of what to type:
- \android>keytool -genkey -v -keystore <SKETCHNAME>-release-key.keystore -alias <YOURNAME> -keyalg RSA -keysize 2048 -validity 10000
- This is what I typed:
- \android>keytool -genkey -v -keystore floater08-release-key.keystore -alias AKEric -keyalg RSA -keysize 2048 -validity 10000
- Here is a template of what to type:
- It will then ask you several question like “What is your first and last name?”, What is the name of your City or Locality?”, etc.
- When its done (successfully) it will finish by printing:
- [Storing floater08-release-key.keystore]
- And will store the corresponding file: \android\floater08-release-key.keystore
- B: Create ‘unsigned .apk’
- Execute ant to build the unsiged apk:
- \android>ant release
- This should spit out a bunch of stuff in the shell. When complete you should see something like:
- BUILD SUCCESSFUL
Total time: 18 seconds
- BUILD SUCCESSFUL
- If you didn’t have one before, you should now have a \bin folder with the unsigned apk in it:
- C:\sketchbook\floater08\android\bin\floater08-unsigned.apk
- C: Sign the unsigned .apk with the secret key:
- Here is a template of what to type:
- \android>jarsigner -verbose -keystore <SKETCHNAME>-release-key.keystore <FULL PATH TO>\android\bin\<SKETCHNAME>-unsigned.apk <YOUR NAME FROM SECRET KEY STEP>
- This is what I typed:
- \android>jarsigner -verbose -keystore floater08-release-key.keystore C:\sketchbook\floater08\android\bin\floater08-unsigned.apk akeric
- The shell should have several lines of “adding” and “signing”.
- D: Verify that jarsigner did its thing:
- Here is a template of what to type:
- \android>jarsigner -verify <FULL PATH TO>\android\bin\<SKETCHNAME>-unsigned.apk
- This is what I typed:
- \android>jarsigner -verify C:\sketchbook\floater08\android\bin\floater08-unsigned.apk
- If this works you should see in the shell:
- jar verified.
- E: Make signed (and distributable) apk file:
- Here is a template of what to type:
- \android>zipalign -v 4 <FULL PATH TO>\android\bin\<SKETCHNAME>-unsigned.apk <SKETCHNAME>.apk
- This is what I typed:
- \android>zipalign -v 4 C:\sketchbook\floater08\android\bin\floater08-unsigned.apk floater08.apk
- The shell will start by saying:
- Verifying alignment of floater08.apk (4)…
- Print a bunch more stuff, and finally:
- Verification successful
- You’ll now find a <SKETCHNAME>.apk file in your \android directory:
- \android\floater08.apk
That apk is now directly consumable by an Android device. As a test I put it on my ftp, browsed to it from my phone, and it installed immediately.
The next step would be to get it on the Android market, but I’ll work in that in another post. Happy Holidays!