German Android 8 auf Android 14

pucki

Active Member
Licensed User
Longtime User
Ich habe eine App gemacht, die unter Android 8 auf eine Samsung A5 Handy hervorragend läuft.

Nun wollte ich die App auf mein Android 14 Handy (Samsung A16 5G) installieren.

Und da fingen die Probleme an.

Ich kann nach der Installation nicht einmal auf den Ordner zugreifen. Er wird vom PC überhaupt nicht gefunden. Die Total-Commander-App findet den Ordner zwar, lässt mir aber kein Zugriff.
Das die App nur zuckt und gleich wieder "angehalten" wird, ist wohl logisch.


Im Prinzip sind alle meine Apps gleich.
Sie bestehen aus einer SQL-Datenbank, ein paar Bilder-Ordner und einer App mit ein paar Buttons und Grid.

Hier die Manifest-Datei. Sie ist die selbe wie vorher, nur das ich die 19 gegen die 34 getauscht habe.

B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
'End of default text.

Ja ich weiß , 7 Jahre sind eine lang Zeit und ich habe seit dem nix mehr mit B4X gemacht. Der Grund war : Die Apps liefen und ich war zufrieden.

Vielleicht kann mir je einer helfen, was ich machen muss das alles wieder läuft.

Ich vermute es liegt an dieser Zeile.

my_sql.Initialize(File.DirRootExternal, "mein_einkauf.db", False)

Ist aber nur ne Idee.

Ich brauche also eine Lösung wie ich vom PC / Total-Commander-App auf Handy auf den Ordner zugreifen kann, damit ich die Bilder anzeigen lassen kann, bzw. die passende Datenbank updaten kann.


Ich bin für jeden Tipp sehr dankbar.

Gruß

Pucki
 

DonManfred

Expert
Licensed User
Longtime User
Keine Ahnung wie hier jemand überhaupt helfen KÖNNTE bei der Info die du lieferst. Quasi ZERO info.
Keine Info über quellcode, KEINE Info über den Pfad von dem Du redest.

So kann dir sicher niemand helfen.

Fang nochmal neu an. Lade ein Beispiel hoch MIT QUELLTEXT und ALLEN nötigen Informationen.

Ansonsten les erstmal hier https://www.b4x.com/android/forum/threads/android-jar-targetsdkversion-minsdkversion.87610/

Du MUSST einige beachten beim update von Android 8 auf 14
 

pucki

Active Member
Licensed User
Longtime User
Keine Info über quellcode, KEINE Info über den Pfad von dem Du redest.

Der Pfad von den ich rede ist : ///_data_de.b4a.my_einkauf unter /Storage/emulated/0/android/data.

Bei Android 8 konnte ich auf den Pfad vom PC aus, und auch vom Handy aus zugreifen.

Sobald ich wieder auf den Pfad zugreifen kann, muss ich (siehe Link von dir) nur einige Zeilen ändern.

ABER und jetzt kommt der große Witz.

Ich habe das Beispiel was erscheint wenn man NEU - Standard anklickt, ohne Änderung kompiliert und installiert. Es läuft hervorragend aber ich kann auch auf diesen Ordner (b4a.example) NICHT zugreifen. Unter den PC wird der Ordner nicht gefunden (angezeigt).

Ich denke mein Code ist das 2.rangige Problem. Denn um die Änderungen zu machen, muss ich ja Daten in den Ordner meines Programmes legen.

Also ist meiner Meinung nach die einfache Frage : Wie hebe ich die Sperre für den Ordner auf, so das ich auf "FILES" in den Ordner zugreifen kann.

Gruß

Pucki
 

pucki

Active Member
Licensed User
Longtime User
Nachtrag:

Ich bin den Problem ein kleinen Schritt weiter.

Dies ist die Zeile die das Problem macht.

my_sql.Initialize(File.DirInternal, "mein_einkauf.db", False)

Und das ist die Debug-Fehlermeldung dazu.

android.database.sqlite.SQLiteCantOpenDatabaseException: Cannot open database '/data/user/0/b4a.my_einkauf/files/mein_einkauf.db' with flags 0x10: File /data/user/0/b4a.my_einkauf/files/mein_einkauf.db doesn't exist

Was auch logisch ist. Da ich keine Ahnung habe wie ich die Datenbank in das richtige Verzeichnis bekomme.

Nach einer Menge Google habe ich herausgefunden das der Zugriff auf DATA seit Android 13 gesperrt ist. Es sollte also irgendwie eine Lösung geben wie ich meine Datenbank auf das Handy bekomme und mein Programm drauf zugreifen kann.

Ich bin für jede Idee dankbar.

Gruß

Pucki
 

klaus

Expert
Licensed User
Longtime User
Eine Möglichkeit ist mit der RuntimePermission Bibliothek.
Du kannst einen Ordner erstellen der von aussen vom PC zugriff bar ist.
Mit
B4X:
Sub Process_Globals
    Private MyPath As String
    Private xui As XUI
    
    Private RP As RuntimePermissions
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
    
    MyPath = RP.GetSafeDirDefaultExternal("")
    
    File.WriteString(MyPath, "NewText.txt", "New text")
    Log(File.ReadString(MyPath, "NewText.txt"))
End Sub

Auf dem PC findest Du die Datei unter Android\data\NameInBuildConfiguration\files
NameInBuildConfiguration ist der Name den Du hier eingegben hast:

1746171584045.png

Im Testprogramm Android\data\b4a.TestDirDefaultExternal\files.
 

Attachments

  • TestDirDefaultExternal.zip
    9.2 KB · Views: 42

pucki

Active Member
Licensed User
Longtime User
Vielen Dank.

Wenn ich USB-Debugging anmachen tue, funktioniert der Zugriff auf deine Software (Files-Ordner).

Leider bekomme ich das bei meiner Software nicht hin.

Hast du oder jemand anders vielleicht eine Idee.

Im Anhang mal das Zip-Paket dazu. Ich hoffe ich muss das Teil nicht neu schreiben. Es ist soweit ich es verstanden habe, mit deinen Änderungen versehen worden.


Vielleicht hast du ja eine Idee.

Der Code ist locker 6 Jahre alt. ;) Habe ich damals für ein A5(2017) geschrieben, mit sehr viel Mühe. In VB-2022 hätte ich das in 3 Std. gemütlich runter genagelt. So hat es mich fast 1 Woche gekostet. Ach und nur so nebenbei. Das ist MEIN Prg. und es ist nur für MEIN Handy bestimmt, was im Klartext heißt, der Play-Store wird es niemals sehen. ;) Und es reicht wenn es auf meinen Handy läuft.

Ich habe noch 4 andere Programme geschrieben die im Prinzip das selbe sind, nur andere Datenbanken. Eins davon ist eine Comic-Verwaltung mit einem Coverbild für jedes LTB / Donald Duck Taschenbuch /und ähnliches was ich besitze. Wird für den Flohmarkt benutze, um doppelte zu vermeiden.

Es ist mir auch völlig egal, wo ich meine Daten ablege. Hauptsache, ich kann darauf zugreifen.

Gruß
UND DANKE für deine Hilfe.

PUCKI

Ps: Ich weiß nun warum manche Leute 2 Handys nutzen. Eins für die guten Programme und eins für die Industrie. Der Grund warum ich ein neues Handy gekauft habe, ist nämlich die Postbank die mein Android 8 nicht mehr gern hatte ;(
 

Attachments

  • my_einkauf.zip
    22.1 KB · Views: 34

klaus

Expert
Licensed User
Longtime User
Wenn Du keine Datenbank im MyPath Ordner gespeichert hast meckert das Programm natürlich.
Ich habe diese fünf Zeilen eingefügt um sicher zu stellen dass die Datenbank auch im MyPath Ordner drin ist, und es funktioniert.

B4X:
    MyPath = RP.GetSafeDirDefaultExternal("")
    
    If FirstTime Then
        If File.Exists(MyPath, "mein_einkauf.db") = False Then
            File.Copy(File.DirAssets, "mein_einkauf.db", MyPath, "mein_einkauf.db")
        End If
    End If
    
    'Log("---- neustart---")
 

BlueVision

Well-Known Member
Licensed User
Longtime User
Probiere mal diese class von agraham. Zusätzlich solltest Du hier nachlesen, wenn Du einen derartig großen APK-Sprung machst.

Eine der segensreichen Neuerungen von ANDROID 13/14 ist, dass aus "Sicherheitsgründen" kein Zugriff mehr auf den DATA-Ordner der App und auch nicht auf den Downloadordner des Mobiltelefons mehr möglich ist. Mit dieser Class funktioniert der Zugriff wieder. Der Nachteil: Eine App mit dieser Class kann nicht mehr über den Playstore vertrieben werden.
Fileexplorer und andere Apps, die Geld für Google verdienen und im Store hohe Downloadraten haben, bekommen von Google natürlich eine Sondergenehmigung. Manche sind eben gleicher als gleich. Android degeneriert zunehmend mit diesen Änderungen, viele Programmierer haben einfach keine Lust mehr auf Android.
Bei mir hat es mit der Class funktioniert.

Abhängig vom Smartphone könntest Du auch zurück gehen auf SDK29, viele neuere Handys (insbesondere SAMSUNG) lehnen aber die Installation einer inzwischen veralteten SDK-Version ab.
Solltest Du GPS-Funktionen in der App verwenden, wechsele die GPS-Bibliothek gegen die GNSS-Bibliothek aus. Auch Apps mit der alten GPS-Bibliothek sind auf neueren Smartphones nicht mehr lauffähig.

Viel Glück beim Portieren Deiner App!
Gruß BV
 
Last edited:

pucki

Active Member
Licensed User
Longtime User
Der Nachteil: Eine App mit dieser Class kann nicht mehr über den Playstore vertrieben werden.
Vielen DANK.
Dieser "Nachteil" ist mir, wie bereits erwähnt, völlig egal.

GPS-Funktionen o.ä. Benutzte ich nicht. Wie schon erwähnt, es sind einfache Programme die eine FÜR MICH perfekte Datenbankabfrage machen.

Wenn Du keine Datenbank im MyPath Ordner gespeichert hast meckert das Programm natürlich.
Genau DAS ist das Problem. War es auch schon unter Android-8. Aber da ich vor den Installieren bereits die Datenbank ins Hauptverzeichnis des Internen Speichers kopiert hatte, hat es logoweis nie gemeckert.



Abhängig vom Smartphone könntest Du auch zurück gehen auf SDK29, viele neuere Handys (insbesondere SAMSUNG) lehnen aber die Installation einer inzwischen veralteten SDK-Version ab.

Habe ich in den Manifest gemacht. Nur dann funktioniert bei meiner App das Debugging.



Ich werde jedenfalls mal die Tipps von euch beiden ausprobieren und hoffe des es hilft.
Werde mich dann wieder melden.

Erst mal VIELEN DANK

Gruß

Pucki
 

Heinz

Active Member
Licensed User
Longtime User
Ja, das ist ein Problem und ärgerlich.
Ich hatte auch alles auf File.DirInternal umgestellt.
Wenn du die DB auf dem PC hast, dann füge diese rechts beim Tab Files ein.
So landet sie beim Installieren automatisch in den gleichen Ordner, in dem auch
die App installiert wird.

Ist halt viel anders als beim PC, wo Programme von WIN11 bis hinunter zu XP
rückwärtskompatibel laufen.

Vielleicht könnte da Erel etwas in die IDE einbauen, wo man die Permissions
per Checkbox oder Radiobutton automatisch setzen bzw. einbauen könnte.
Wäre dann einfacher für nicht so Bewanderte wie mich u. a.
 
Last edited:

pucki

Active Member
Licensed User
Longtime User
DANKE @ all

Besonderen Dank an KLAUS.
Seine 2 Routinen lassen die Software wieder "Normal" anschauen.

Ich kann (wie unter Android 8) wieder auf das Verzeichnis zugreifen. Und die Datenbank austauschen.

Das ist zwar bei den Einkaufs-Prg. nicht wichtig. Aber bei den Comic-Software besonders.

Einziger Nachteil. Ich muss USB-Debugging aktivieren. Sonst ist alles "tot" und kein zugriff möglich vom PC aus.
Aber damit kann ich super leben.

@Heinz.
Ich bin deiner Meinung.
Ich habe gerade das Test-Prg. (siehe oben) in mein PC-Ordner "wichtige Software" geschoben, damit ich bei neuer Software es alles so einstellen kann.

Nochmal VIELEN DANK AN ALLE.

*Edit* : Ich musste nur einen Wert in der Gitter.breite ändern und es läuft auch auf meine größeren Display perfekt.

Gruß

Pucki
 
Last edited:

pucki

Active Member
Licensed User
Longtime User
Eine der segensreichen Neuerungen von ANDROID 13/14 ist, dass aus "Sicherheitsgründen" kein Zugriff mehr auf den DATA-Ordner der App und auch nicht auf den Downloadordner des Mobiltelefons mehr möglich ist. Mit dieser Class funktioniert der Zugriff wieder. Der Nachteil: Eine App mit dieser Class kann nicht mehr über den Playstore vertrieben werden.

Ich habe es ohne die Class geschafft.
ABER, ich musste dazu das Handy in den "Entwicklermodus" schalten (Build 7 x hauen) und das USB-Debugging einschalten.

Und die Tipps hier (die 2 kleine Codes-Zeilen) einbauen.

Ich finde den "Sandbox-Modus" von Google ja fein. Aber wieso man einer Software keine Daten mehr ohne so Tricks hinzufügen kann, ist mir ein Rätsel. Dafür habe ich echt nicht genug IQ. :mad:

Da ich auch google benutzen kann, habe ich festgestellt, dass ich nicht der einzige bin, der sich über den Mist ärgert. Das Netz ist voll mit dem Ärger darüber. Nur eine Lösung habe ich da nicht gefunden. Deshalb nochmal DANKE.

Gruß

Pucki
 
Top