From http://www.jwz.org/xscreensaver/xscreensaver-5.40.tar.gz
[xscreensaver] / android / README
index 35b7b426d48d058fb55c1884df0210cceb55070d..2843296548b6cae41058a01b737c578e0f4ca360 100644 (file)
@@ -9,7 +9,7 @@ If you're messing with this, please let us know!
         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/)
@@ -19,68 +19,171 @@ To build:
       "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