[fpc-pascal] fpc code for Java class and Android.
jon-lists at jfpossibilities.com
Sat Apr 15 18:01:18 CEST 2017
On 04/09/2017 11:30 AM, Paul Breneman wrote:
> On 04/09/2017 11:32 AM, fredvs wrote:
>>> For this, Xorg must be installed.
>> Huh, of course only for gui applications (fpGUI or MSEgui).
>> For no gui console application, compile your fpc java native library for
>> same cpu than the one of Android.
>> For example RPi (but I am not sure it is the same cpu as android-devices).
> I'd like to try console apps (also with Free Vision) first in conjunction
> with this:
The only thing that console apps need is a terminal emulator. A bunch of
ways that can happen and it depends on whether this is to be provided
through the Android market or not. If not things are much easier. Terminal
emulators abound you can pretty much just pick one.
Now for the obstacles:
1. Linux (Android kernel) only runs executables from a file system that
allows you to set the "execute" permission, which means that you can't just
put your stuff on an SD card and run it, since FAT and descendants don't
have that permission. So you have to get your exes into the internal
non-FAT App storage and Android permissions throw up plenty of barriers.
2. Compiling for ARM. This can be done with cross build tools, with an ARM
Linux computer or some other *nix variant available on ARM, or with several
of the Android apps that provide pre-built versions of the compiler and a
term environment. I actually built the compiler and tools with a CHIP /
PocketCHIP (http://getchip.com/). Very inexpensive full blown Debian 8
install. But I think I had to build a bootstrap compiler with my Intel
based Linux box first. Which meant building a cross "binutils" for ARM,
which was fairly simple. I can probably post some scripts if desired.
My final solution for compiling and running things was "Terminal IDE" Its
setup for Java, C & C++ but it provides the terminal, assembler, linker,
some Android packaging tools and it provides full access to the packages
"home" folder which allows the executable permission. If there is an ARM
bootstrap compiler, and I haven't looked in a while, you should be able to
build FPC and units all from within Terminal IDE. You will want to use the
automated installer for the C compiler and stuff, since that contains
"binutils" (assembler, linker, ...).
*NOTE* Last I looked this won't work on Android 5+, explained below (#3).
My problem with it is "vi" for editing. And since other apps don't have
access to its "sandbox" you have to do some juggling for a complete on
device dev environment. It would technically be possible to keep source on
the FAT storage (SD or internal) and just build into the sandbox, which has
You will need a ".fpc.cfg" in the IDE's home folder and you won't be able
to install one to "/etc". You can find the correct location by typing "echo
$HOME" (case is significant) in the terminal window.
I should also mention that the "hacker's keyboard" is very desirable for
this. But you will probably want a larger screen size. Those buttons can
get pretty small!
3. Android 5+ introduced *mandatory* address space randomization. This
means that binaries compiled for <5 won't run on 5+ and visa-versa. It also
means you need address independent output from FPC for 5+. I believe this
is now an option in FPC 3. But I don't believe the Terminal IDE guy ever
produced a build that will work on Android 5+.
If distributing you will probably want to build both an address independent
and non-independent version and then selectively launch the correct one.
But that ties in with 4 & 5 below.
4. Google does not allow one package to require another package. So your
package has to be self contained, meaning that if you need an X server or
Terminal emulator it has to be combined into one package with your fpc
binaries and data. This has licensing implications that may not be
acceptable. Depending on your situation you may be able to take someone
else's OpenSource package and hack your stuff into it. ie. Get an open
source term app, "rebrand" it, inject your FPC app, and patch it to
auto-start your app and shutdown when your app finishes.
5. Android *only* launches Dalvik (Java) based apps so if packaging you
have to provide some kind of Java based wrapper anyways. Making #4
6. App lifespan. Terminal apps expect that they will start and run until
either their task has finished or the user signals it to stop. Android
expects it can terminate and restart apps as it sees fit. This can cause
problems when your app unexpectedly gets terminated.
I should also mention that the JVM target for FPC seems to work quite well.
So its possible to use FPC to write the mandatory Dalvik wrapper for your
native FPC code. I have an App that I kept the same core code and wrote a
new Dalvik front end in FPC, using the JVM target. But its very time
consuming and fraught with peril. The Android UI does many unexpected
things and the Java environment has many obstacles that we FPC users don't
expect. And FPC hasn't ported their units so you'll need the Android API
reference handy and will have to dig for normal things like converting an
integer to a string. And then there is the renaming of stuff done by the
FPC API converter and ...
I'm sure I haven't listed all of the obstacles. But those are the majors. I
also don't have a single solution that will work reliably. Depending on
needs/wants you may be able to work out something that you can use. Right
now I'm looking over fpGUI with an eye to porting it to Android to make a
more sane environment.
Sent from my Debian Linux laptop -- http://www.debian.org/intro/about
JF Possibilities, Inc.
jon at jfpossibilities.com
More information about the fpc-pascal