comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
Subject: Ada 'hello world' for Android; success!
Date: Wed, 26 Oct 2011 21:18:47 -0400
Date: 2011-10-26T21:18:47-04:00	[thread overview]
Message-ID: <8239efcjuw.fsf@stephe-leake.org> (raw)

I've managed to get an Ada 'hello world' working on Android. It follows
the example at
http://developer.android.com/resources/tutorials/hello-world.html
translated to Ada.

Here's the Ada 'main program':

with Android.App.Activity;
with Android.OS.Bundle;
package Hello is

   --  <Ada package>$<Ada type> must match ../AndroidManifest.xml manifest | application | activity | android:name
   type Typ is new Android.App.Activity.Typ with null record;

   overriding procedure OnCreate
     (This               : access Typ;
      savedInstanceState : access Standard.Android.Os.Bundle.Typ'Class);
   pragma Export (Java, OnCreate, "onCreate");

end Hello;
--  Prefix must match ../AndroidManifest.xml manifest | package
pragma Export (Java, Hello, "net.example.helloada.hello");

package body Hello is

   overriding procedure OnCreate
     (This               : access Typ;
      savedInstanceState : access Standard.Android.Os.Bundle.Typ'class)
   is
      type Super_Ref is access all Android.App.Activity.Typ;
   begin
      Android.App.Activity.Oncreate (Super_Ref (This), savedInstanceState);

      --  FIXME: use R.layout
      --
      --  need to run jvm2ada on ../gen/net/example/R.java, but that's
      --  generated by the ant process that runs after this code is
      --  compiled, so we have to learn how to break that up or
      --  something.
      --
      --  until then, get this constant from R.java (value for 'layout')
      Android.App.Activity.SetContentView (Android.App.Activity.Ref (This), 16#7f030000#);
   end OnCreate;

end Hello;

It runs on the Android emulator provided with the Android SDK, and on my
HTC Inspire.

As you can see, there are still some rough edges in the build process. I
could have hard-coded the 'hello' string here, but that's not what the
Java program does; this demonstrates that the Ada code really is using
all the Java GUI resources and classes properly. 

Mostly I didn't want to spend any more time figuring out how to
customize the Android SDK build tools. They work really nicely if you
are doing simple Java stuff, but really get in the way when you want to
do something more complicated.

I started with GNAT GPL 2011, jvm target. I had to fix two bugs in
jvm2ada, one bug in the jvm-gnat backend (all reported to AdaCore with
patches), and work around another bug in the gnat front end (also
reported to AdaCore). Not too bad :).

Any suggestions for where to post more info?
wikibooks.org/wiki/Ada_Programming looks like a good place, but I'm not
sure where this fits in that hierarchy.

I can post a .tar.gz (or just the .apk :) on my own website if anyone is
interested in getting a quick look now.

There are some interesting issues in the Ada <-> Java mapping; for
example, Ada packages map to Java nested classes, so you have to put the
desired Java package name in the 'pragma Export' external name.

Figuring out how to tell the SDK build tools exactly what was going on
was the most frustrating; the documentation on those is totally
inadequate. I managed to find some answers in the source code for the
tools; at least it is all open source.

Fixing the bugs in the GNAT tools was easy by comparison, once I had
test cases.

Now I can work on my music player app, and get away from Java ;).

-- 
-- Stephe



             reply	other threads:[~2011-10-27  1:18 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-27  1:18 Stephen Leake [this message]
2011-10-27  7:12 ` Ada 'hello world' for Android; success! Alex R.  Mosteo
2011-10-28 12:51   ` Stephen Leake
2011-10-27 10:50 ` Jeffrey Creem
2011-10-28 13:01   ` Stephen Leake
2011-10-27 10:58 ` Brian Drummond
2011-10-28  1:37 ` Shark8
2011-10-28 12:22 ` Anatoly Chernyshev
2011-10-29 13:37   ` Stephen Leake
2011-10-29 14:46     ` Anatoly Chernyshev
2011-10-29 20:47       ` Brad Moore
2011-10-29 21:59         ` Anatoly Chernyshev
2011-10-30  3:51           ` Brad Moore
2011-10-30  7:20             ` Anatoly Chernyshev
2011-10-30 10:56       ` Stephen Leake
2011-10-30 17:32         ` Brad Moore
2011-10-29 15:32     ` Georg Bauhaus
2011-10-29 16:09       ` Simon Wright
2011-10-29 17:32         ` tmoran
2011-10-30 11:38           ` Stephen Leake
2011-10-29 20:51         ` Brad Moore
2011-10-30 11:32       ` Stephen Leake
2011-10-31 22:34         ` Randy Brukardt
2011-11-01  8:41           ` Stephen Leake
2011-11-01  9:30         ` Georg Bauhaus
2011-11-02 15:55           ` Stephen Leake
2011-11-02 17:37             ` Robert A Duff
2011-11-08  3:56               ` Randy Brukardt
2011-11-03  0:37             ` Georg Bauhaus
2011-11-03 11:36               ` Stephen Leake
2011-11-03 15:24                 ` Robert A Duff
2011-11-03 18:43                   ` Pascal Obry
2011-11-03 22:14                 ` Georg Bauhaus
2011-11-04  8:48                   ` Dmitry A. Kazakov
2011-11-04 12:18                   ` Stephen Leake
2011-11-04 15:03                     ` Georg Bauhaus
2011-11-05 16:56                       ` Stephen Leake
2011-11-01  9:52         ` Dmitry A. Kazakov
2011-11-02 15:59           ` Stephen Leake
2011-11-02 16:27             ` Dmitry A. Kazakov
2011-11-02 17:38               ` Simon Wright
2011-11-10 17:25 ` Stephen Leake
2011-11-27 15:18 ` mockturtle
2011-11-28 22:35   ` Ada 'hello world' for Android; success! (but music player failure) Stephen Leake
2011-11-29 11:23     ` Georg Bauhaus
2011-11-30  3:33       ` Stephen Leake
2011-11-30 18:57         ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox