App-logging direkt auf das Gerät in Datei??

  • 8 Antworten
  • Neuester Beitrag
Diskutiere App-logging direkt auf das Gerät in Datei?? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
G

gnome2012

Neues Mitglied
Hallo,
ich habe eine App programmiert bzw. ein vorhandenes Projekt auf Github umprogrammiert. Diese App erstellt einen Apple-BLE-Beacon dessen UUID eine verschlüsselten Inhalt hat, sendet für 15s und beendet diesen. Anschließen wird eine neue UUID erstellt startet neu. Die UUID wird von Nodered (mein Smarthome-System) entschlüsselt. Passt die Kennung und Timestamp (verschlüsselt in der UUID) wird das Signal aktzepiert. Damit öffne ich unter anderem meine Eingangstür über einen Nuki. Ich will verhindern, das die UUID einfach mit z.B. nRFConnet kopiert werden kann und damit jemand die Tür öffnet. Die Nuki eigene Lösung war mir zu unzuverlässig!

Die App (und das Projekt mit dem Türöffnen) funktioniert ansich tadellos mit einem Oneplus 8 Pro und einem Galaxy S21 (auch auf dem Emulator im Android Studio). Auf diesem beiden Handys und Emu läuft die App quasi forever (also über Wochen nonstop). Nur auf mein Xiaomi 12 Pro wird in unregelmäßigen Abständen beendet ohne stürzt ab. Letzteres vermute ich eher. Der Rekord auf dem Xiomi lag bei 9 Tagen. In der Regel ist aber innerhalb 4 Tagen schluss (Machmal innerhalb 24h).
Also alles was man so einstellen kann bei Xiaomi bezüglich Stromsparfunktionen habe ich deaktiviert. Dies war auch beiden anderen Handys notwendig, damit die app nicht beendet wird. Für das Xiaomi habe ich zig Internetseiten besucht, damit ich nichts übersehen habe. Ich finde auch, wenn das Xiaomi-Handy die app von sich aus beenden würde, dann wäre da eine gewisse Regelmäßigkeit.

Alle Handys/Emu laufen mit Android 12. Dies ist auch die Mindestanforderung der App.

1.Wie kann ich die App debuggen und zwar so, dass nur die Log der App auf einer Datei ins Handy geschrieben werden. Ich kann das Gerät ja schlecht loggend per Wlan oder USB am PC liegen lassen und tagelang warten. Hier wäre ich für einen Tipp dankbar.

2. Ich meine irgendwo gelesen zu haben, dass bei Xiaomi besonders sorgfältig programmiert werden muss, weil die Firmware sehr intolerant sei. Mache Sachen habe ich etwas umschreiben müssen, womit die beiden anderen genannt Handys kein Problem hatten, aber dass Xiaomi gleich den den Dienst verweigerte. Hat jemand ähnliche Erfahrung gemacht mit Xiaomi Smartphones?
 
swa00

swa00

Moderator
Teammitglied
@gnome2012

Hier einmal ein paar einfache "Tricks", wie wir es machen

Wir benutzen grundsätzlich einen eigenen Remote-Root-Server um CrashLythics, und Logs ausserhalb Firebase und Konsorten zu realisieren, denn wir entwickeln mehrere Apps, die 24/7 getriggert werden müssen.
(Du kannst auch Notfalls einen Raspberry oder eine NUC benutzen)

a) Crash : Sentry hat sich als gut herausgestellt
Application Performance Monitoring & Error Tracking Software

b) Logging: Grafana -> Log.d() per Remote access
Grafana: The open observability platform | Grafana Labs


Und ich vermute bei deinem Xiaomi :
Das geht in den DeepSleep (DOZE) . Das kannst du dann nur durch eine High-Priority Push in Kombination mit einem AlarmManager quälen. (Ähnliches haben wir auch hier beobachten können)
Optimize for Doze and App Standby | Android Developers



Grafana
1674568304963.png

Sentry
1674568343135.png
 
Zuletzt bearbeitet:
G

gnome2012

Neues Mitglied
Danke für die Infos bzw. Tricks. ich werde mich mal damit beschäftigen. Das mit dem Optimze for Doze and App Standby werde ich mal als erstes in Angriff nehmen. So was in der Art habe ich auch schon vermutet.
Danke nochmal

@swa00 :
Edit: bei jeder neu kreierten UUID wird eine Notification gestartet mit ".PRIORITY_HIGH". Dieses hatte ich schon länger so eingefügt.
Dies hält die App aber nicht vom Doze ab. Wie gesagt normalerweise wechselt die UUID alle 15 Sekunden. Aber ich sehe bei der Auswertung der UUID in Nodered bei der Entschlüsselung, dass die UUID manchmal alter als 60 Sekunden und mehr ist.

Hier nochmal die Notification

Code:
Notification notification = new NotificationCompat.Builder(this, getString(R.string.service_channel_id))
                .setContentTitle("new UUID advertising ")
                .setSmallIcon(R.drawable.ic_ble_beacon)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
                .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)
                .setCategory(NotificationCompat.CATEGORY_MESSAGE)
                .setPriority(NotificationCompat.PRIORITY_HIGH) //<=====
                .setBadgeIconType( NotificationCompat.BADGE_ICON_SMALL)
                .build();
 
Zuletzt bearbeitet:
swa00

swa00

Moderator
Teammitglied
@gnome2012

Der Flag High-Priority in der Notification nutzt dir nichts und hat keine Auswirkung auf den DOZE.

Deshalb schrieb ich auch :
Das kannst du dann nur durch eine High-Priority Push ....
Also FCM oder HMS verwenden

Siehe obigen Link
 
Zuletzt bearbeitet:
G

gnome2012

Neues Mitglied
@swa00 :

Das geht in den DeepSleep (DOZE) . Das kannst du dann nur durch eine High-Priority Push in Kombination mit einem AlarmManager quälen.
Also soweit habe Firebase in der App vorbereitet. Ich sende dann eine Nachricht auf die App, die dann auf ein z.b. "OnMessageReceived()" reagiert??
Und wenn ja in welchen intervallen?
 
swa00

swa00

Moderator
Teammitglied
a) Ja
b) na nicht öfters als 20 Min- Sonst macht Dir Google ärger. - Besser ist jede Stunde einmal mit der gleichen Subscription

Und dabei startest du jedesmal den Alarmmanager - Der hält dann Device zumindest mal bis zum nächsten 1hour Trigger am Leben
(Wenn alles gut geht)
 
G

gnome2012

Neues Mitglied
@swa00
Danke für die schnelle Antwort.!!

Bei der Google-Konsole kann man ja nur täglich eine Nachricht automatisieren, soweit ich das sehe. Ich müsste alo eine externe Anwendung benutzen, die das dann stündlich macht, oder?
 
Zuletzt bearbeitet:
swa00

swa00

Moderator
Teammitglied
nein , die Google Konsole gibt dir nur die Möglichkeit eine Test Push zu schicken , (Für Developer)
Diese automatisiert gar nichts.

In Endeffekt musst du dir selbst einen Server o.ä. aufsetzen, der dann die Push auslöst.
Dazu gibt es dann bei Firebase X Beispiele
 
G

gnome2012

Neues Mitglied
Ja deshalb schrieb ich externe Anwendung: Soweit ich weiss kann das Nodered .Da kann ich ja dann stündlich losfeuern lassen.
 
Ähnliche Themen - App-logging direkt auf das Gerät in Datei?? Antworten Datum
14
4
1