jwz@jwz.org
-To build:
+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/)
"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.
+ set "sdk.dir" in the file local.properties.
On MacOS, the value you want is probably ~/Library/Android/sdk/
- Also set "ndk.dir" in project/local.properties.
+ Also set "ndk.dir" in local.properties.
+
+To build:
+ ./configure
cd android
make
- If it fails, try a "make clean" and then try make again.
- Make sure you have the needed Android SDK platform versions installed.
-
Hopefully an "xscreensaver-debug.apk" file will appear in
- android/project/xscreensaver/build/outputs/apk/.
+ android/xscreensaver/build/outputs/apk/.
Load that onto your device and go to:
- Settings / Display / Wallpaper / Live Wallpapers.
+ 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 the emulator:
- $ANDROID_HOME/sdk/tools/emulator -avd Nexus_5_API_21_x86
+ To launch it:
- To load it into the currently-running emulator:
+ $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
+ xscreensaver/build/outputs/apk/xscreensaver-debug.apk
+ Extremely verbose log output, including stack traces:
+ $ANDROID_HOME/platform-tools/adb logcat
-The files in these subdirectories are source code, more or less:
+ Non-fatal log output for only this app:
+ $ANDROID_HOME/platform-tools/adb logcat \
+ -s xscreensaver:d AndroidRuntime:d libEGL:d
- project/xscreensaver/*.xml
- project/xscreensaver/src/org/jwz/xscreensaver/
- project/GLWallpaperService/ (a third-party library, unchanged)
+ 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.
-These directories are boilerplate for Android apps:
- project/xscreensaver/res/layout/
- project/xscreensaver/res/values/
- project/xscreensaver/res/xml/
- project/xscreensaver/res/drawable-ldpi/
- project/xscreensaver/res/drawable-mdpi/
- project/xscreensaver/res/drawable-hdpi/
- project/xscreensaver/res/drawable/thumbnail.png
+Directory structure:
-These are files that we generate:
+ Boilerplate for the Java version of "make":
+ *gradle*
+ *.properties
+ xscreensaver/*gradle*
+ xscreensaver/build.*
+ xscreensaver/*.properties
- project/xscreensaver/src/org/jwz/xscreensaver/gen/
+ The other half of the Makefile:
+ xscreensaver/jni/*.mk
-These too (intermediate build files):
+ Source code:
+ xscreensaver/src/org/jwz/xscreensaver/*.java
+ xscreensaver/res/layout/*.xml
- .gradle/
- gen/
- project/GLWallpaperService/build/
- project/build/
- project/xscreensaver/build/
- project/xscreensaver/libs/
- project/xscreensaver/obj/
- project/xscreensaver/res/xml/
+ Other relevant source code is in ../jwxyz/ and ../hacks/.
+
+ Icons:
+ xscreensaver/res/drawable-ldpi/
+ xscreensaver/res/drawable-mdpi/
+ xscreensaver/res/drawable/
-These are files that we *will* generate but don't yet:
+ Files that we generate:
- project/xscreensaver/res/drawable/*.png
- XScreenSaverView.c
+ gen/function-table.h
+ xscreensaver/AndroidManifest.xml
+ xscreensaver/res/drawable/*.png
+ xscreensaver/res/values/settings.xml
+ xscreensaver/res/values/strings.xml
+ xscreensaver/res/xml/*.xml
+ xscreensaver/src/org/jwz/xscreensaver/gen/*.java
-When adding a new hack, edit:
+ Other files generated as a part of the build process:
- project/xscreensaver/jni/Android.mk
- project/xscreensaver/build.gradle
- generate_files.pl
+ gen/
+ .gradle/
+ xscreensaver/build/
+ xscreensaver/build/outputs/apk/ -- app appears here
+ xscreensaver/jni/
+ xscreensaver/libs/
+ xscreensaver/obj/
+ xscreensaver/res/
+ xscreensaver/res/drawable/
+ xscreensaver/res/values/
+ xscreensaver/res/xml/
+ 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.
+
+ antinspect renders incorrectly
+ apple2 text, images into pixmaps doesn't work
+ barcode pixmaps
+ bsod pixmaps, XCopyArea problems
+ carousel images are corrupted
+ cityflow shading is wrong
+ endgame insanely slow
+ engine text
+ esper images don't load, no text
+ fliptext text
+ fontglide text
+ glblur grayscale instead of color
+ halftone XFillArc crash
+ jigglypuff incredibly slow
+ juggler3d blank
+ maze lines are not the same thickness (aliased?)
+ molecule blank
+ noseguy text; images
+ pacman images; launches really slowly
+ pedal polygons
+ phosphor text; pixmaps
+ photopile text; images don't display
+ polyhedra text
+ polyominoes pixmaps
+ qix polygons
+ queens insanely slow
+ sonar does icmp work?
+ speedmine polygons
+ splitflap super slow
+ spotlight blank
+ starfish polygons
+ starwars text
+ unicrud pixmaps
+ winduprobot dome is not transparent
+ xanalogtv pixmaps
+ xflame draws only upper left corner
+ xmatrix pretty slow