From http://www.jwz.org/xscreensaver/xscreensaver-5.39.tar.gz
[xscreensaver] / android / README
index 501aafe453fa4ad7b4559d4613fc74a3099837f2..c5b00c18401b255a8111a372b1a964e1a99615ff 100644 (file)
@@ -7,3 +7,202 @@ If you're messing with this, please let us know!
 
         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 the file local.properties.
+    On MacOS, the value you want is probably ~/Library/Android/sdk/
+    Also set "ndk.dir" in local.properties.
+
+To build:
+
+    ./configure
+    cd android
+    make
+
+    Hopefully an "xscreensaver-debug.apk" file will appear in
+    android/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 \
+        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":
+        *gradle*
+        *.properties
+        xscreensaver/*gradle*
+        xscreensaver/build.*
+        xscreensaver/*.properties
+
+    The other half of the Makefile:
+        xscreensaver/jni/*.mk
+
+    Source code:
+        xscreensaver/src/org/jwz/xscreensaver/*.java
+        xscreensaver/res/layout/*.xml
+
+    Other relevant source code is in ../jwxyz/ and ../hacks/.
+
+    Icons:
+        xscreensaver/res/drawable-ldpi/
+        xscreensaver/res/drawable-mdpi/
+        xscreensaver/res/drawable/
+
+    Files that we generate:
+
+        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
+
+    Other files generated as a part of the build process:
+
+        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
+  antmaze      crashes emulator, sometimes
+  antspotlight crashes emulator, sometimes
+  apple2       text, images into pixmaps doesn't work
+  atlantis     crashes emulator, sometimes
+  barcode      pixmaps
+  blitspin     images
+  bsod         pixmaps, XCopyArea problems
+  bumps                images
+  carousel     images
+  cityflow     shading is wrong
+  endgame      insanely slow
+  engine       text
+  esper                images, text
+  flipflop     images
+  flipscreen3d images
+  fliptext     text
+  fontglide    text
+  gflux                images
+  glblur       grayscale instead of color
+  gleidescope  images
+  glslideshow  images
+  halftone     XFillArc crash
+  halo         some extra triangles show up
+  jigglypuff   incredibly slow
+  jigsaw       images
+  juggler3d    blank
+  maze         lines are not the same thickness (aliased?)
+  mirrorblob   images
+  molecule     blank
+  mountain     polygons
+  munch                XOR
+  noseguy      text; images flicker to black and white
+  pacman       launches really slowly
+  pedal                polygons
+  phosphor     text; pixmaps
+  photopile    images; pixmaps
+  polyhedra    text
+  polyominoes  pixmaps
+  qix          polygons
+  queens       blank
+  slip         images
+  sonar                does icmp work?
+  speedmine    polygons
+  splitflap    super slow
+  spotlight    pixmaps
+  starfish     polygons
+  starwars     text
+  tessellimage pixmaps
+  twang                background should be black
+  unicrud      pixmaps
+  winduprobot  dome is not transparent
+  xanalogtv    pixmaps
+  xflame       draws only upper left corner
+  xmatrix      super slow, glitch on first screen
+  zoom         pixmaps