ACBrUtil.Math.pasEstou crinado este tópico para compartilhar as alterações necessário no ACBr para compatibilidade com LAMW(Desenvolvimento Android com Lazarus).
Instalação LAMW.
O LAMW pode ser obtido diretamente no github pelo seguinte link: :https://github.com/jmpessoa/lazandroidmodulewizard
Para iniciantes pode ser usado LAMW Manager para instalar o ambiente completo de desenovolvimento.
Para que deseja usar a versão 2.2.4 do Lazarus recomento instalar via FPDeluxe.
Obs: O ideal é usar a versão mais recente do LAMW pois já exise ajustes oriundos da compatibilização.
Alterações realizadas:
1 - Foi criado uma diretiva chama LAMW para diferenciar códigos LAMW com FMX ou VCL.
2 - Syanpse:
2.1 - synaser.pas: Este arquivo foi feito um ajuste no método procedure TBlockSerial.Flush; pois o código implementado usava um método que não existe no FPC.
O código modificado foi enviado ao Synapse(https://sourceforge.net/p/synalist/feature-requests/28/)
procedure TBlockSerial.Flush;
begin
{$IFNDEF MSWINDOWS}
{$IFDEF ANDROID}
ioctl(FHandle, TCSBRK, 1);
{$ELSE}
SerialCheck(tcdrain(FHandle));
{$ENDIF}
{$ELSE}
SetSynaError(sOK);
if not Flushfilebuffers(FHandle) then
SerialCheck(sErr);
{$ENDIF}
ExceptCheck;
end;
synaser.pas
-------
2.2 - No arquivo ssl_openssl_lib existe uma chamada para System.IOUtils que OS é Android. Fiz um tratamento iguinorar quando for FPC.
Também foi modificado o InitSSLInterface, este ainda precisa de mais testes.
ssl_openssl_lib.pas
3 - ACBrComum:
3.1 - O arquivos(ACBrUtil, ACBrUtil.XMLHTML.pas, ACBrUtil.Math.pas, ACBrUtil.Compatibilidade.pas, ACBrUtil.DateTime.pas,
ACBrUtil.Strings.pas, ACBrUtil.Base.pas) com um chamada para a unit forms e isso impede a execução do projeto no Android.
Isso ocorre pq o LCL é imbutido pelo compiado a aplicação na abre no android.
Para resolver o problema foi feito o tratamento com IFNDEF LAMW nos pontos onde é feita a chama.
Obs: A unit forms não é usada e poderia ser remvida destas units.
ACBrUtil.DateTime.pasACBrUtil.Compatibilidade.pasACBrUtil.XMLHTML.pasACBrBase.pas
3.2 - A unit ACBrBase.pas contém uma chama para a unit Dialogs e também usa o método MessageDlg no código.
Foi feito o tratamento com IFNDEF LAMW e este bloco não vai gerar problemas pois é usado apenas em tempo de desenvolvimento.
ACBrReg.pas
3.3 - Na unit ACBrUtil.FilesIO.pas foi feito um tratamento para a unit forms, modificado o ApplicationPath que quando for LAMW usara o params(0).
4 - ACBrDiversos: O unico componente que apresentou problema foi ACBrCalculadora isso porque ele criar um usa TForm.
Obs: Precisa de teste individual por componente.
5 - ACBrTCP: Os unicos componentes que apresentão problemas são ACBrTCPServer eACBrDownload.
Obs: Precisa de teste individual por componente.
6 - ACBrPIX: Não apresentou problema com o projeto e precisa de testes.
Obs: Precisa de teste individual por componente.