November 28, 2014

Android Beyond Java: Part Two

toolsThis series of posts highlights a number of other languages and toolkits for developing Android applications, beyond the standard Java-based SDK. These are a preview of topics to be covered in CommonsWare’s upcoming book “Android Beyond Java”, to be released in 2010.

Scripting Languages

Scripting languages for Android come in two forms: ones that run via their own activity, and ones that are designed to be embedded in another application.

The most visible example of the former is the Android Scripting Environment (ASE), which offers you the ability to write scripts in “Python, Perl, JRuby, Lua, BeanShell, and shell”. Some of these, notably Python and Perl, are achieved through ports of their C-based interpreters, rather than via JVM versions of the langauge (e.g., Jython). Through some ingenious RPC mechanisms, these C-based interpreters still have access to Android APIs, as wrapped by the ASE environment itself.

However, in some cases, you may wish to embed an interpreter in your own application, for user scripts or the like. Here, interpreters once again come in two flavors: those that try to generate JVM bytecodes on the fly, and those that don’t.

Those that try to generate JVM bytecodes on the fly will have problems with Android, because Android does not execute JVM bytecodes. Android executes Dalvik VM bytecodes, and the JVM->Dalvik conversion happens in the development environment, not on the device. Hence, these languages either need a mode to disable such bytecode-generation optimizations, or they need to be taught how to create Dalvik VM bytecodes as an option.

Some languages that fit this pattern include:

  • JRuby: JRuby has been demonstrated to run on Android, though not yet as an embedded language.
  • Jython: An early attempt to get Jython working with Android appears to be abandoned.
  • Rhino: This implementation of Javascript-on-Java at least used to work on Android when used in pure interpreter mode.
  • Groovy: There has been some work done in the summer of 2009 to get Groovy working on Android.

Other languages, like BeanShell, do not attempt to generate JVM bytecodes, and therefore work quite nicely on Android. However, watch out for old JARs. In the case of BeanShell, the JARs up on the official site were compiled with Java 1.4.2, which does not work with Android. Recompiling the code under a newer Java compiler clears up that problem.

If you are aware of other scripting languages, embeddable or otherwise, that work on Android, post them in the comments!

Next Post: The NDK



  • Per Bothner

    Kawa Scheme (http://www.gnu.org/software/kawa/) is used by Google Labs's App Inventor (http://googleresearch.blogspot.com/2009/08/under-… See also this article: http://per.bothner.com/blog/2009/AndroidHelloSche

    While Kawa can generate bytecode on-the-fly, for Android you need to use the ahead-of-time compiler (preferred) and/or the interpreter. Tuned Kawa code blows most of the other mentioned languages out of the water (I say immodestly).

    • http://intensedebate.com/people/commonsguy commonsguy

      That's cool! I've added Kawa to my list of projects to track. So far, I haven't seen any public releases of anything from App Inventor, though.

      Thanks!

  • hsig

    JQTouch looks interesting, I think they’re working on making it more compatible for android, for now it’s working best with the iphone.

    Test it from your android phone at http://www.jqtouch.com/preview/demos/main/#home

    • http://intensedebate.com/people/commonsguy commonsguy

      On its own, it is just a Javascript library, AFAICT. For on-device applications, you might be able to use it in conjunction with PhoneGap or the equivalent (see yesterday's post).

      Thanks!

  • http://www.manifesto.blog.br Diogo Souza

    Apart from ASE having Lua, you can also embed Lua on your application using Luaj ( http://sourceforge.net/projects/luaj/ ) , that is a LuaVM written in Java.

  • http://intensedebate.com/people/commonsguy commonsguy

    Excellent! Thanks!

  • patthoyts

    Hecl (http://www.hecl.org/) is a scripting language that is written in Java and supports Android and J2ME and is having work done to support Blackberry. It provides a command oriented language similar to Tcl and also provides access to the underlying Java libraries. So unlike ASE (last time I looked) which does not let you create a GUI, you can create Android graphical layouts with Hecl.

  • itcrespo

    Hi,

    I found a tutorial about bytecode manipulation in android. I tested and works fine, but maybe it is not so deep to make great things yet.

    http://lulachronicles.blogspot.com/2009/11/how-to

    cheers

  • http://rilindtona tona

    very ggooooooooooooodddddddd

  • http://www.everyonelovesbuttons.com/ campaign buttons

    It is a very useful article for the developers regarding a number of other languages and
    toolkits for developing Android applications, beyond the standard
    Java-based SDK. thanks for sharing.

  • http://qmsconsultants.com/NABH.html NABH

    I really appreciate your post and you explain each and every point very well.Thanks for sharing this information.And I’ll love to read your next post too.
    Regards:
    NABH

  • Pingback: Takethe5th Picks and Pans » Blog Archive » Operating Systems as Natural Monopolies: Think Apple iOS