Very nice. Really!
On Thu, Jan 19, 2012 at 2:56 PM, fpp <fpp....@gmail.com> wrote: > > In response to a question in another thread, here is a summary of how > I got web2py running on my Android device (a Samsung Note), using > hints found here and there. > > Maybe it can save some time for those wanting to do the same thing. > > Note : I am just getting started with Android, so there are probably > better and/or easier ways to do it than what I describe here. > > Please add to this thread if you see anything missing or incorrect. > > --------------------------------- > > First we need to get python running on the device, obviously. > > This is done by installing SL4A (scripting layer for Android). > Get the the apk from http://code.google.com/p/android-scripting/ and > install it > (requires checking "unknown sources" in settings/applications) > SL4A was initially called ASE (Android scripting engine), so many > older Howtos use that instead. > > Run the app, use menu/view/interpreters : by default there is only > "shell". > Use menu again, "add", choose Python. > This downloads the installer. Run "python for android" from your apps > list, install... > > Whew, now we have Python on our device, but it only runs through the > SL4A interface. > > > Now we need to get it running from the command line. > > I used the traditional "adb" method to connect from the PC to the > Android console, with the USB cable. > adb can be found in the Android SDK, and is also included in several > rooting kits, which are smaller (adb is just one executable and two > DLLs under Windows). > It also needs the USB drivers for the device, which means installing > vendor software (like Kies for Samsung). > > (Users who already have an SSH daemon running on their device can use > ssh and scp and Wifi instead) > > So, if all goes well, "adb shell" will connect you to a very basic > Linux console on your device. > > On mine, the SL4A scripts folder is at : /sdcard/sl4a/scripts > I chose to do everything in there to be available also from inside the > app. > > You can now verify that python does not run from the command line, > because no environment is set. > > I found this ready-made script that does all the grunt work : > http://blog.anantshri.info/android-standalone-python/ > > Only it seems that paths move around a lot between Android versions > and/or devices, so I had to correct them for mine : > > #! /bin/sh > PW=`pwd` > export EXTERNAL_STORAGE=/mnt/sdcard > export LANG=en > PYTHONPATH=/mnt/sdcard/com.googlecode.pythonforandroid/extras/python > PYTHONPATH=${PYTHONPATH}:/data/data/com.googlecode.pythonforandroid/ > files/python/lib/python2.6/lib-dynload > export PYTHONPATH > export TEMP=/mnt/storage/com.googlecode.pythonforandroid/extras/python/ > tmp > export PYTHON_EGG_CACHE=$TEMP > export PYTHONHOME=/data/data/com.googlecode.pythonforandroid/files/ > python > export LD_LIBRARY_PATH=/data/data/com.googlecode.pythonforandroid/ > files/python/lib > cd $PW > /data/data/com.googlecode.pythonforandroid/files/python/bin/python > "$@" > > Let's save this to "py.sh" and copy that to the device : > adb push py.sh /sdcard/sl4a/scripts > > Then connect back with 'adb shell' and try 'sh py.sh' : if the paths > are OK you should now be in the Python interpreter. > Whew again :-) > > > Now comes the web2py part. It's not as easy as it should be, due to > some shortcomings in the Android Python distribution. > > First, you need version 1.97.1 at least (i used 1.99.4, latest as of > this writing). > Next, even then some things don't work, such as creating an app > directly on the device, because of cache problems : > https://groups.google.com/group/web2py/browse_thread/thread/461ca3eec3fde4e4/9ab612d9c21604ee?hl=fr&lnk=gst&q=android#9ab612d9c21604ee > > I worked around this by preparing the web2py environment on the PC > first, then copying it over. > > These are the main steps : > > * get latest web2py_src.zip > * unzip to temp dir on PC > * run once so that all initialization steps are done, check the admin > app > * stop > * copy your existing app(s) to the web2py applications folders > * (optional) reduce size by deleting example apps, test scripts, > errors etc. > * re-zip to web2py_a.zip > * push to device with adb push web2py_a.zip /sdcard/sl4a/scripts > * connect to shell again and unzip > > Note: on my device 'unzip' would fail to extract the archive because > it could not set the permissions. > I had to use 'su' first for it to work (the device was already rooted) > > So now we only need a way to start web2py as a daemon. > I created a new 'web2py.sh' shell script, which is the same as py.sh > except for the last two lines : > > #! /bin/sh > > PW=`pwd` > export EXTERNAL_STORAGE=/mnt/sdcard > export LANG=en > PYTHONPATH=/mnt/sdcard/com.googlecode.pythonforandroid/extras/python > PYTHONPATH=${PYTHONPATH}:/data/data/com.googlecode.pythonforandroid/ > files/python/lib/python2.6/lib-dynload > export PYTHONPATH > export TEMP=/mnt/storage/com.googlecode.pythonforandroid/extras/python/ > tmp > export PYTHON_EGG_CACHE=$TEMP > export PYTHONHOME=/data/data/com.googlecode.pythonforandroid/files/ > python > export LD_LIBRARY_PATH=/data/data/com.googlecode.pythonforandroid/ > files/python/lib > cd $PW > cd web2py > /data/data/com.googlecode.pythonforandroid/files/python/bin/python > web2py.py -l '' -a foobar -n 2 -i 127.0.0.1 & > > This starts web2py with the following settings : > > -l'' : disable logging > -zz foobar: sets the admin app password > -n 2 : two processes only (single user app) > -i 127.0.0.1 : listen on localhost address (no networks needed for on- > device usage) > > This prints the web2py startup message and returns. > Disconnecting from adb does not stop the server. > This should work also from SL4A. > > Hope this helps, > fp