AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

10.2 und Android...

Ein Thema von Mavarik · begonnen am 10. Jun 2017 · letzter Beitrag vom 14. Jun 2017
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.210 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: 10.2 und Android...

  Alt 10. Jun 2017, 21:15
Wir haben es letztes Jahr einmal mit RAD Studio auf iOS und Android versucht, endete ziemlich unglücklich und wurde dann eingestampft. Jetzt soll noch einmal ein kleines Projekt damit gemacht werden, aber wenn ich das alles lese dann reiche ich besser bald Urlaub ein und warte bis die Sache sich wieder erledigt hat
  Mit Zitat antworten Zitat
braunbaer

Registriert seit: 15. Okt 2008
Ort: Vorarlberg
118 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: 10.2 und Android...

  Alt 11. Jun 2017, 15:56
Ich hab im Moment ios app auf 10.2 und selbige auf Android unter 10.1
Hallo Rollo 62,
das ist ein guter Tipp.
mit Android habe ich ebenfalls massivste Probleme.
hab jetzt wie du das kompilieren auf Android mit 10.1 gemacht und hat einwandfrei funktioniert.
Ich habe 3 Apps im Produktivbetrieb und alle Androidversionen sind seit Delphi 10.2 Schrott.

Hoffe, dass so was in Zukunft nicht mehr passiert...

Grüße aus dem Bregenzerwald
Gebhard
Gebhard Blank
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.239 Beiträge
 
Delphi 12 Athens
 
#3

AW: 10.2 und Android...

  Alt 11. Jun 2017, 16:54
Das Dumme ist nur das ich ein paar Fixes der FMX-Routinen einbauen musste, die sich je nach 10.1 und 10.2 unterscheiden.

Ich mache das im Moment Quick-and-Dirty so, dass ich diese per Batch-Datei umkopieren lasse:

Die verschiedenen Ausgangsdateien bei mir:
Zitat:
FMX.Platform.iOS_Fix10_1.pas
FMX.Platform.iOS_Fix10_2.pas
FMX.Platform.iOS_Fix10_2_Hf1.pas

System.Bluetooth_Fix10_1.pas
System.Bluetooth_Fix10_2.pas
System.Bluetooth_Fix10_2_Hf1.pas

System.Mac.Bluetooth_Fix10_1.pas
werden durch die jeweiligen Batch Dateien für 101 oder 102 bereinigt, umkopiert ...
Zitat:
_Use101_Upd2.bat
_Use102_Hf1.bat
und diese legen mir dann noch je nachdem eine "BatchInfo"-Datei an, die mir nur zeigen soll was gerade aktiv ist.

Zitat:
_Is102_Hf1.bai
Das ist nicht besonders schön oder cool, erfüllt aber seinen Zweck.

Ich hoffe auch drauf das ich mit dem Upd1 diese Krücke wieder rausnehmen kann (und am Besten alle Fixes gleich mit).
Die Hoffnung stirbt zuletzt
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#4

AW: 10.2 und Android...

  Alt 11. Jun 2017, 17:34
Leider habe ich bezüglich der für uns "lebensnotwendigen" Patches bei "Bluetooth" und "BluetoothLE" einen Maulkorb.
Fakt ist: man kann OutOfTheBox seit XE8 keine sichere AndroidAPP mit BLE schreiben, wenn man Android 4.4+,5.1+,6+,7+ sowie die Samsung S5&S6 "vernünftig" unterstützen will. In den Emba/Idera Sourcen gibt es schlicht einige unbehandelte ErrorStates (ala "131..133") welche zu "BigTimeouts" führen, wo doch eine vernünftige Behandlung und "Lösung" garnicht so schwer wäre(ist).

Aktuell ist unsere Liste für Sachen, die man nicht nutzen darf bei der Schnittmenge zu Android&IOS für BLE sehr lang. Für Berlin10.1u2 habe ich noch all unsere Patches seit XE8u? nachgezogen.
Gerade bei Multiplattform und IOT stößt hier scheinbar FMX als universelle Kapselung/Schicht seitens Emba/Idera aktuell an die Grenze des "wartbaren", denn um das sauber zu lösen braucht es Fachkompetenz in BLE, allen native Plattformen und dann noch Deep-FMX als "AbstaktionLayer". Ich wollte FMX so erweitern, das unter Windows(8.1+) auch der BLE-Scan ("DiscoverDevices") echt funktioniert und nicht nur die zuvor bereits unter Windows(System) registrierten/angemeldeten Geräte findet...
In C#/C++ API nach MSDN ist das mit etwas Aufwand durchaus möglich, aber es passt leider nicht wirklich(einfach) in die FMX-Layer seit XE8

FMX als UniGUI halte ich weiter für DAS TOP FEATURE von RadStudio, was auch wenn es aktuell (wieder) etwas hakt sicher gelöst wird.
Sobald aber neben GUI auch noch Hardwarelayer ala BLE für IOT dazu kommen, wird das seitens Emba/Idera mit ein paar SimpleDemos stets nur ein kratzen an der Oberfläche bleiben. Mangels vorhersehbarer Entwicklungsstabilität lohnt sich da aber leider auch für niemanden ein komerzielles AddON zu realisieren und dieses anzubieten. Die von FMXlinux machen ja genau sowas, nur eben rein für GUI und da klappt da ja auch sehr gut
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: 10.2 und Android...

  Alt 11. Jun 2017, 18:57
Hoffe das für Berlin noch ein Update 3 folgt um xCode 8.3 und iOS 10.3 / 11 zu unterstützen. Würde 10.2 gerne auslassen und auf 10.3 hoffen.
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.164 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: 10.2 und Android...

  Alt 11. Jun 2017, 19:42
@Rollo62,Mensch72

Mich würden Eure Patches interessieren...

Ich selbe führe meine auch seit XE7 mit:

FMX.Memo.Style,
FMX.Controls,
FMX.WebBrowser.Win.pas,
FMX.Objects.pas,
FMX.Platform.iOS.pas
FMX.VirtualKeyboard.ios.pas
System.Win.Sensors.pas


Mavarik
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.239 Beiträge
 
Delphi 12 Athens
 
#7

AW: 10.2 und Android...

  Alt 11. Jun 2017, 21:13
Hallo Frank,

Es hält sich noch in Grenzen bei mir, im Wesentlichen um die Basisfunktionen mit BLE sicherzustellen.
Ich muss dazusagen das ich auch wirklich auf unterstem Level mit den Control arbeite, also teilweise
TRectangle als TButton, weil irgendwas nicht rund lief.
Ich versuche auch möglichst ohne solche FMX-Fixes auszukommen, falls machbar.
Jegliche Versuche höherklassige Komponenten einzsetzen ist oft gescheitert, weshalb ich erstmal die Fingerdavon lasse.
Mit TLayout, TRectangle, TGlyph, TImage, TImageList, TLabel, TSpeedButton, TCheckBox/TSwitch, TListBox, TListView, TMemo(hat Probleme), TStyleBook, FireDac/Sqlite, Camera, ShowShareSheet kann man schon ganz schon weit kommen.
Ein paar Funktionen habe ich dann natürlich aus Android/iOS oder z.B. Anregungen aus D.P.F. reingenommen, ansonsten nutze ich aber keine kompletten Fremdkomponenten um mir nicht noch mehr Ärger einzuhandeln.
Ich denke aber über TMS Cloud package nach.

Mein aktuelles Problem in 10.2 sind die TGlyh TImageList unter Android, es werden anscheinend Caches für die MultiResBitmap verwendet, die mal als "Geisterbilder" woanders wieder auftauchen können.
Bei iOS funktioniert das noch wie unter 10.1.
Womöglich hat Android Version noch zig andere Probleme, aber das bekomme ich nicht einfach weg, deshalb teste ich den Rest nicht.
Es fühlte sich generell auch etwas zäher an, also von optimierung der Threads hätte ich mehr erwartet.

Ansonsten arbeitet Bluetootk im Moment für mich bei 8 ziemlich verschiedenen Geräten mit customer UUIS Services als RS232-Ersatz, aber da tauche ich auch nicht sehr in die (Un)-Tiefen von BLE ab.
Nice-to-have für BLE wären mehrere Devices gleichzeitig verbinden, Mesh-Support (ist aber noch nicht wirklich in den Phones angekommen), stabileres BLE System generell.

Um BLE herum hatte ich Einiges an Versuchen machen müssen, von normalem reinlegen in DatenModul über Threads bis zu Alles im TBluetoothManagerLE, habe ich bestimmt 5 Varianten durch.
Im Moment ist es eine Version die vom Timing und von den Prozessen her relativ stabil läuft, auf der Basis der FMX Komponenten, so hoffe ich bleibt es erstmal bestehen.
Allerdings habe ich noch nicht versucht, wie Mensch72, den kompletten BLE-Codes zu Optimieren und/oder einen Rewrite zu machen, das sollte das FMX schon liefern, sonst kann ich ja gleich zu Xamarin o.ä. wechseln.
Wenn man die Workarounds mal sortieren würde und einen bestmöglichen, funktionierenden Code irgendwo ablegen könnte fände ich das super, aber womöglich sprechen die Lizenzregeln von Emba dagegen.
Vielleicht wäre Emba gut geraten die Sourcen als OpenSource anzulegen, damit mal ein paar mehr Leute an den BugFixes mitarbeiten können.

Also z.B. diverse Fixes:

in FMX.Platform.iOS machte das Longtap für mich Probleme, sendet mal falsche Codes und gibt daher
Probleme wenn man mit Mouse Down/Move/Up zeichnet.
Der Workaround ist das komplett abzuschalten, und bei Bedarf mein eigenes LongTap erzeugen:
Delphi-Quellcode:
    TInteractiveGesture.LongTap:
      begin
////S4:
// LongTapRecognizer := TUILongPressGestureRecognizer.Alloc;
// LongTapRecognizer := TUILongPressGestureRecognizer.Wrap(LongTapRecognizer.initWithTarget(GetObjectID, sel_getUid('LongTap:')));
// LongTapRecognizer.setDelaysTouchesBegan(False);
// LongTapRecognizer.setCancelsTouchesInView(True);
// LongTapRecognizer.setDelegate(GetObjectID);
// View.addGestureRecognizer(LongTapRecognizer);
// LongTapRecognizer.release;
      end;

in System.Bluetooth: Es gab memory leaks, die durch Weak reference weg sind
Delphi-Quellcode:
   [Weak] FFilterUUIDList: TBluetoothUUIDsList; //Added weak reference

....

    if Assigned( FFilterUUIDList ) then // Added safety check
    begin
      for LServiceUUID in FFilterUUIDList do
        if ADevice.ScannedAdvertiseData.ContainsServiceUUID(LServiceUUID) then
          Exit(True);
      if ADevice.DiscoverServices and (FFilterUUIDList <> nil) then
        for LServiceUUID in FFilterUUIDList do
          if ADevice.GetService(LServiceUUID) <> nil then
            Exit(True);
    end;

....

   FFilterUUIDList := nil; // Add to avoid Leaks, additional Weak s.a.
in System.Bluetooth: scheint ein Typo zu sein der die falsche Variable übergibt
Delphi-Quellcode:

  try
    if FilterDiscoveredDevices(LFilter, LDeviceList) and Assigned(FOnDiscoveryLEEnd) then
      FOnDiscoveryLEEnd(Sender, LDeviceList); // BugFix: old variable ... ADeviceList);
  except
    if Assigned(ApplicationHandleException) then
      ApplicationHandleException(Self)
    else
      raise;
  end;
in System.Mac.Bluetoot: auch Memory leaks:

Delphi-Quellcode:
  if FLEManager.FScanOptions = nil then
  begin
    FLEManager.FScanOptions := TNSMutableDictionary.Create;
// LNumber := TNSNumber.Wrap(TNSNumber.OCClass.numberWithBool(True)); //After 10.1_U1 addition from new file
    LNumber := TNSNumber.Wrap(TNSNumber.OCClass.numberWithBool(False)); //After 10.1_U1 test
    //S4: Before 10.1_U1 LNumber := TNSNumber.Wrap(TNSNumber.OCClass.numberWithUnsignedChar(0));
    FLEManager.FScanOptions.setValue((LNumber as ILocalObject).GetObjectID, CBCentralManagerScanOptionAllowDuplicatesKey);
  end;

....

procedure TInternalBluetoothLEManager.StartDiscovery(Timeout: Cardinal; const FilterUUIDList: TBluetoothUUIDsList);
var
  LNumber: NSNumber;
begin
  if FIsDiscovering then Exit;

  //###
  //S4: Addition to avoid permanent Memory leaks
  if FFilterUUIDList <> nil then
  begin
    FFilterUUIDList.release;
  end;
  //###
  //S4: Addition to avoid permanent Memory leaks
....

Wohlgemerkt unter VCL habe und hatte ich solche Probleme nie, das läuft immer superstabil.
FMX als Zugpferd für Mobile ist allerdings auf wackeligen Füssen gebaut, läuft aber auch zuverlässig wenn man's nicht übertreibt und versucht das letze Auszureizen.

Rollo

Geändert von Rollo62 (12. Jun 2017 um 06:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz