Hi Jorge, first of all, Thanks for the answer!!
By following your steps, i have made some progress into creating a firebird
database on an embedded server in android, but, unfortunately, i'm getting
another error when i'm trying to create a new database: invalid database
handle (no active connection)
Let me add a little detail here:
I have added the files you listed (except firebird.msg, because it was
missing from the download), to the Assets folders, on Android Project.
I have configured, for each file, the property BuildAction to AndroidAsset
During runtime, i'm checking and creating the directories:
public static string AppDir { get =>
System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData).Replace(".config",
""); }
public static string FirebirdFile { get => Path.Combine(Config.AppDir,
"TSDB.FDB"); }
public static string FirebirdServerLib { get; set; }
Setting Directories and Enviroment Variables:
Environment.SetEnvironmentVariable("FIREBIRD_LOCK",
Path.Combine(Config.AppDir, "firebird"));
Config.FirebirdServerLib = Path.Combine(Config.AppDir,
"firebird/lib/libfbclient.so");
string fbFolder = Path.Combine(Config.AppDir, "firebird");
if (!Directory.Exists(fbFolder)) Directory.CreateDirectory(fbFolder);
if (!Directory.Exists(Path.Combine(fbFolder, "plugins")))
Directory.CreateDirectory(Path.Combine(fbFolder, "plugins"));
if (!Directory.Exists(Path.Combine(fbFolder, "lib")))
Directory.CreateDirectory(Path.Combine(fbFolder, "lib"));
if (!Directory.Exists(Path.Combine(fbFolder, "intl")))
Directory.CreateDirectory(Path.Combine(fbFolder, "intl"));
Here, i'm copying the files from Assets, to those folders:
protected void preparaFirebirdEmbedded()
{
string fbFolder = Path.Combine(Config.AppDir, "firebird");
if (!File.Exists(Path.Combine(fbFolder,
"plugins/libEngine12.so"))) CopiarArquivoDoAssets("libEngine12.so",
Path.Combine(fbFolder, "plugins"));
if (!File.Exists(Path.Combine(fbFolder, "lib/libfbclient.so")))
CopiarArquivoDoAssets("libfbclient.so", Path.Combine(fbFolder, "lib"));
if (!File.Exists(Path.Combine(fbFolder,
"lib/libfbclient.so.2"))) CopiarArquivoDoAssets("libfbclient.so.2",
Path.Combine(fbFolder, "lib"));
if (!File.Exists(Path.Combine(fbFolder,
"lib/libfbclient.so.3.0.3"))) CopiarArquivoDoAssets("libfbclient.so.3.0.3",
Path.Combine(fbFolder, "lib"));
if (!File.Exists(Path.Combine(fbFolder, "intl/libfbintl.so")))
CopiarArquivoDoAssets("libfbintl.so", Path.Combine(fbFolder, "intl"));
if (!File.Exists(Path.Combine(fbFolder, "intl/fbintl.conf")))
CopiarArquivoDoAssets("fbintl.conf", Path.Combine(fbFolder, "intl"));
if (!File.Exists(Path.Combine(fbFolder, "firebird.conf")))
CopiarArquivoDoAssets("firebird.conf", fbFolder);
}
protected void CopiarArquivoDoAssets(string AssetName, string
DestinationFolder)
{
try
{
using (var asset = Assets.Open(AssetName))
{
using (var dest =
File.Create(Path.Combine(DestinationFolder, AssetName)))
asset.CopyTo(dest);
}
}
catch (Exception)
{
}
}
and Here i'm trying to create the database
public static void CriarDatabase()
{
try
{
if (!File.Exists(Config.FirebirdFile))
FbConnection.CreateDatabase($"User=SYSDBA;Password=masterkey;Database={Config.FirebirdFile};Charset=UTF8;ClientLibrary={Config.FirebirdServerLib};ServerType=1;",
16384);
}
catch (Exception ex)
{
throw ex;
}
}
Thats where i'm getting the exception invalid databse handle...
Did you encounter that problem also?
On Mon, Apr 23, 2018 at 5:45 PM, Jorge Gonçalves <projo...@gmail.com> wrote:
> Hi,
> from my attempt to put FB running on Android ....
>
>
> The process is a little tricky.
>
> 1º
> You must put the files( libfbclient, libEngine12, .. ) on asset folder and
> then copy that to app/files folder.
> The folder structure must be kept in order to work.
>
> ex :
> .../app.com/files/fb/firebird.conf
> .../app.com/files/fb/firebird.msg
> .../app.com/files/fb/lib/libfbclient.so
> .../app.com/files/fb/plugins/libEngine12.so
> .../app.com/files/fb/intl/intl.conf
> .../app.com/files/fb/intl/libfbintl.so
>
> I don't know if all files are necessary.
> The process of putting native libraries on the lib folder will not work
> because the embedded version must have the above structure.
>
>
> 2º
> Load the libfbclient.so using the full path.
>
>
> 3º
> FB tries to create the lock file on /data/local/tmp. In versions higher
> than 5 this folder isn't writable.
> You may set env variable FIREBIRD_LOCK to app/cache.
>
>
> After that you should have the embedded version running.
>
>
> Regards
> jGoncalves
>
> On Mon, Apr 23, 2018 at 3:41 PM, Luiz Alberto Tessarolli <
> tessaro...@gmail.com> wrote:
>
>> Hello, i'm working on a cross-platform project, and i would like to unify
>> the database management system.
>> I've always worked with firebird, server and embedded, on linux and
>> windows with total success for more than a decade.
>> And for this new project, i'm looking into firebird embedded on Android
>> and iOS devices, using xamarin forms and visual studio (C#, DotNet).
>> So far, i've not been able to run embedded on android emulator, there is
>> little to none documentation on how to do that. After some time i figured
>> out how to ship the *.so files with the apk into the emulator, but its not
>> running. At first i though it was because the android port is compile for
>> arm, and the emulator is running in x86, so i tried the linux port for x86,
>> and it does not load libfbclient.so because it fails to find librt.so.1
>> (libc6).
>>
>> I have tried downloading the *.so files in user folders on runtime, but
>> the DLLImport always looks on /data/app/appname/lib/x86/*
>>
>>
>> So i'm stuck.
>>
>> Any help is appreciatted
>>
>> Thanks,
>> Luiz Alberto
>> from Brazil.
>>
>> ------------------------------------------------------------
>> ------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> Firebird-Devel mailing list, web interface at
>> https://lists.sourceforge.net/lists/listinfo/firebird-devel
>>
>>
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> Firebird-Devel mailing list, web interface at
> https://lists.sourceforge.net/lists/listinfo/firebird-devel
>
>
--
Abraços...
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel