dennis@panaceasupplies.com
jwz@jwz.org
+
+
+To set up your Android development environment:
+
+ Install JDK 7 (http://www.oracle.com/technetwork/java/javase/downloads/)
+ Install Android Studio (http://developer.android.com/sdk/)
+ Install Android NDK (http://developer.android.com/ndk/downloads)
+ Rename or link the "android-ndk-*" directory to "ndk" inside your
+ $ANDROID_HOME (the "sdk/" directory that is the parent of
+ "build-tools/", etc.) That is, it should be "sdk/ndk/".
+
+ set $ANDROID_HOME to where your SDK is installed, or
+ set "sdk.dir" in project/local.properties.
+ On MacOS, the value you want is probably ~/Library/Android/sdk/
+ Also set "ndk.dir" in project/local.properties.
+
+To build:
+
+ ./configure
+ cd android
+ make
+
+ Hopefully an "xscreensaver-debug.apk" file will appear in
+ android/project/xscreensaver/build/outputs/apk/.
+
+ Load that onto your device and go to:
+ Settings / Display / Daydream
+ or just click on the XScreenSaver icon, which is a shortcut to that.
+
+ To create and configure an emulator image, use the GUI tool and and
+ give the emulator a name (say, "Nexus_5").
+
+ $ANDROID_HOME/sdk/tools/android avd
+
+ E.g.: Nexus 5, Android 5, Intel Atom x86_64, RAM 2048 VM 64,
+ storage 200, use host GPU.
+
+ Configuration options are in $HOME/.android/avd/*.avd/config.ini
+
+ To launch it:
+
+ $ANDROID_HOME/sdk/tools/emulator -avd Nexus_5
+
+ Warning! On my system at least, the emulator runs out of memory
+ when trying to display the Daydream page if all of the savers are
+ loaded. This is troubling. You can work around this by editing
+ your *.avd/config.ini and setting vm.heapSize=128; or by editing
+ android/Makefile and paring down the $ANDROID_HACKS list to a
+ smaller subset (60 or so with the default heapSize).
+
+
+ To load it into the currently-running emulator or device:
+ $ANDROID_HOME/platform-tools/adb install -r \
+ project/xscreensaver/build/outputs/apk/xscreensaver-debug.apk
+
+ Extremely verbose log output, including stack traces:
+ $ANDROID_HOME/platform-tools/adb logcat
+
+ Non-fatal log output for only this app:
+ $ANDROID_HOME/platform-tools/adb logcat \
+ -s xscreensaver:d AndroidRuntime:d libEGL:d
+
+ Note that sometimes "logcat" will just sit there forever saying
+ "waiting for device". This is because the emulator is a piece of
+ shit and sometimes decides to just randomly not service connections.
+ If you restart the emulator, and wait minutes for the whole damned
+ thing to boot up again, it will probably work next time. Probably.
+
+
+Directory structure:
+
+ Boilerplate for the Java version of "make":
+ project/*gradle*
+ project/*.properties
+ project/xscreensaver/*gradle*
+ project/xscreensaver/build.*
+ project/xscreensaver/*.properties
+
+ The other half of the Makefile:
+ project/xscreensaver/jni/*.mk
+
+ Source code:
+ project/xscreensaver/src/org/jwz/xscreensaver/*.java
+ project/xscreensaver/res/layout/*.xml
+
+ Other relevant source code is in ../jwxyz/ and ../hacks/.
+
+ Icons:
+ project/xscreensaver/res/drawable-ldpi/
+ project/xscreensaver/res/drawable-mdpi/
+ project/xscreensaver/res/drawable/
+
+ Files that we generate:
+
+ gen/function-table.h
+ project/xscreensaver/AndroidManifest.xml
+ project/xscreensaver/res/drawable/*.png
+ project/xscreensaver/res/values/settings.xml
+ project/xscreensaver/res/values/strings.xml
+ project/xscreensaver/res/xml/*.xml
+ project/xscreensaver/src/org/jwz/xscreensaver/gen/*.java
+
+ Other files generated as a part of the build process:
+
+ gen/
+ project/.gradle/
+ project/xscreensaver/build/
+ project/xscreensaver/build/outputs/apk/ -- app appears here
+ project/xscreensaver/jni/
+ project/xscreensaver/libs/
+ project/xscreensaver/obj/
+ project/xscreensaver/res/
+ project/xscreensaver/res/drawable/
+ project/xscreensaver/res/values/
+ project/xscreensaver/res/xml/
+ project/xscreensaver/src/org/jwz/xscreensaver/gen/
+
+When adding a new hack, edit android/Makefile, then "make clean" and "make".
+
+
+TODO list, and known bugs:
+
+ - See the top of ../jwxyz/jwxyz-gl.c for a low level TODO list,
+ but here's what's wrong with the savers from a high level view:
+
+ - Rotation is wonky (on some devices?)
+
+ - The Android emulator is a piece of shit and crashes all the time,
+ so it's possible that some of these work fine on real devices.
+ I don't actually have an Android device, so I have no idea.
+
+ - As mentioned above, the Android emulator runs out of memory if
+ more than about 60 of the Daydreams are installed with the default
+ heapSize. Again, I don't know if this is an issue on real devices.
+ I sure hope not.
+
+ - The code that attempts to grab a screen shot before the Daydream begins
+ doesn't work.
+
+ - When a saver exits abnormally, we catch the exception and attempt to
+ display the error message in a dialog. The catch works, but the dialog
+ box does not.
+
+ anemone needs thick lines
+ anemotaxis needs thick lines
+ antinspect crashes emulator, sometimes
+ antmaze crashes emulator, sometimes
+ antspotlight crashes emulator, sometimes
+ apple2 text, images into pixmaps doesn't work
+ atlantis crashes emulator, sometimes
+ barcode pixmaps
+ binaryring pixmaps
+ blitspin images
+ bouboule ?
+ braid thick lines
+ bsod pixmaps, XCopyArea problems
+ bumps XPutImage
+ carousel blank
+ celtic thick lines
+ circuit crashes emulator
+ cityflow crashes emulator, sometimes
+ compass thick lines
+ crackberg crashes emulator, sometimes
+ cube21 crashes emulator, sometimes
+ cubenetic crashes emulator, sometimes
+ cubicgrid crashes emulator, sometimes
+ deluxe thick lines
+ dnalogo codeword is blank
+ dymaxionmap crashes emulator
+ endgame crashes emulator
+ engine text
+ epicycle thick lines
+ flipflop images
+ flipscreen3d images
+ fliptext text
+ fontglide text
+ fuzzyflakes thick lines
+ gflux images
+ glblur crashes emulator, sometimes
+ gleidescope images
+ glhanoi crashes emulator, but a few seconds in
+ glplanet crashes emulator
+ glslideshow images
+ halftone XFillArc crash
+ halo XOR
+ hypertorus crashes emulator
+ interaggregate window background should be white
+ jigglypuff incredibly slow
+ jigsaw crashes emulator
+ juggler3d crashes emulator
+ maze no logo, lines look weird
+ mirrorblob images
+ moebius crashes emulator
+ moire2 pixmaps
+ molecule crashes emulator
+ mountain polygons
+ munch XOR
+ noseguy pixmaps
+ pacman launches really slowly
+ pedal polygons
+ phosphor pixmaps
+ photopile pixmaps
+ pipes blank
+ polyhedra crashes emulator
+ polyominoes pixmaps
+ projectiveplane crashes emulator
+ pulsar crashes emulator
+ qix polygons
+ queens crashes emulator
+ skytentacles crashes emulator
+ slip pixmaps
+ sonar crashes emulator
+ speedmine polygons
+ spheremonics crashes emulator
+ splitflap text
+ spotlight pixmaps
+ starfish polygons
+ starwars crashes emulator
+ substrate background should be white
+ surfaces crashes emulator
+ tessellimage pixmaps
+ truchet thick lines
+ twang background should be black
+ unicrud pixmaps
+ xanalogtv pixmaps
+ xjack blank
+ xmatrix pixmaps
+ xrayswarm thick lines
+ zoom pixmaps