Android Programming

From Free Pascal wiki
Jump to navigationJump to search

Go back to Android Interface

Knowing general Android programming can be very useful to help developing the Lazarus Android Interface.

Creating a new Java Android Application

See here: http://developer.android.com/guide/developing/other-ide.html

Android API Hello World in Pascal

Here is an example Pascal application written for Android.

<delphi> program pascalnotes4android;

{$mode objfpc}{$H+}

uses

 Classes, androidpipescomm, androidui, javalang;

{$R *.res}

var

 layout: TAbsoluteLayout;
 params: TAbsoluteLayout_LayoutParams;
 tv: TTextView;
 et: TTextView;
 btn: TButton;

begin

 // Here add any initialization.
 // Any initialization code will be run inside Activity.onCreate,
 // so keep it as short as possible!
 // It should mostly contain GUI initialization
 // User interface
 // Prepares the UI of the program
 layout := TAbsoluteLayout.Create;
 tv := TTextView.Create;
 tv.setText('The first Pascal Android application =)');
 params := TAbsoluteLayout_LayoutParams.Create(320, 300, 0, 120);
 layout.addView(tv, params);
 params.Free;
 et := TEditText.Create;
 et.setText('edit me please');
 params := TAbsoluteLayout_LayoutParams.Create(320, 50, 0, 0);
 layout.addView(et, params);
 params.Free;
 btn := TButton.Create;
 btn.setText('Go!');

{ btn.setOnClickListener(buttonClickCallback);}

 params := TAbsoluteLayout_LayoutParams.Create(320, 50, 0, 60);
 layout.addView(btn, params);
 params.Free;
 Activity.setContentView(layout);
 // Now tell Java that the initialization has finished
 myAndroidPipesComm := TAndroidPipesComm.Create;
 myAndroidPipesComm.InitializationFinished();
 // Here you can add any other initialization,
 // specially non-GUI code
 // Now we block our execution waiting for callbacks from Java
 myAndroidPipesComm.MessageLoop();

end. </delphi>

Simple Android app.png

Compiling the example project in Linux

1> Get a working arm-linux cross-compiler which generates ARMv5 eabi with softfloat (as many phones like HTC Wildfire have no FPU)

To do this one can download an unofficial build from here:

http://members.yline.com/~tom_at_work/fpc-2.4.2.UNOFFICIAL.arm-linux.tar . Compiled for ARMv5 eabi with softfloat.

Or build your own. There are instructions here: Setup_Cross_Compile_For_ARM

2> Install the Android SDK

3> Install ant, for example:

urpmi ant

4> Open the project PascalNotes4Android/pascalsrc/pascalnotes4android.lpi in Lazarus and build it's build mode Android

5> Copy the generate executable

 cp pascalsrc/pascalnotes4android libs/armeabi/libpascalnotes4android.so 

if the directory libs/armeabi doesn't exist, create it

6> Build the APK file in debug mode

 ant debug

7> Connect your phone and make sure you can connect to it via ADB

8> Install the APK file in your phone via ADB or whatever other method you prefer:

 ../android-sdk-linux_x86/tools/adb install bin/PascalNotes4Android-debug.apk

If the package is already installed you need need to do this instead:

 ../android-sdk-linux_x86/tools/adb uninstall com.pascalnotes
 ../android-sdk-linux_x86/tools/adb install bin/PascalNotes4Android-debug.apk

References