German Probleme beim Umstieg auf B4A v9.0

iserfäller

Member
Licensed User
Longtime User
Hallo zusammen,

lange habe ich mit einer (ur)alten Version von B4A gearbeitet und war ganz zufrieden.
Jetzt 'klemmt' es jedoch bei den neuen Android-Versionen und ich habe mir darum das o.a Release zugelegt.

Leider bekomme ich nicht mal ein 'Hello World' Programm compiliert.
Fehlermeldung:
Nicht gefunden: c:\android\platform-tools\aapt.exe
Außerdem vermisse ich die android.jar.

Ich habe die sdk-tools-windows-4333796 wie vorgeschlagen nach C:\Android entpackt.
Was mach ich falsch ?

Gruss
Henning
 

DonManfred

Expert
Licensed User
Longtime User

iserfäller

Member
Licensed User
Longtime User
vielen Dank für die schnelle Antwort, leider gibt es ein weiteres Problem:
ich komme in dem Video nur bis zum Punkt Open SDK-Manager
Dieser lässt sich nicht öffnen, weder mittels Button noch unter Extras.
 

iserfäller

Member
Licensed User
Longtime User
danke für diesen Tip! Damit hat es funktioniert.:)

Eine Frage hätt ich aber noch:
neu erstellte Projekte lassen sich problemlos installieren, bei den schon vorhandenen kommt nach der Installation auf einem Samsung Note8 die Meldung
'App wurde nicht installiert'.
 

iserfäller

Member
Licensed User
Longtime User
ganz so einfach wie ich mir den Umstieg auf das neue Release vorgestellt habe klappt es wohl doch nicht :(

Du musst die alte App erst desinstallieren.
ok, mein Fehler, hätte ich auch draufkommen können...

die App lässt sich nun installieren, zickt aber gleich nach dem Start:
die Zeile strText = File.ReadString(File.DirRootExternal, "KnownHosts.txt")
lässt die App abstürzen.
Auch eine Test-App mit nur diesem Befehl reagiert mit sofortigem Absturz.

Offensichtlich kann vorhandener Quellcode nicht ohne weiteres übernommen werden, bei anderen App's werden z.B. Datenbanken nicht geöffnet.

Benutzt Du einen eigenen Signkey? <- SOLLTE so sein.
nicht das ich wüsste
 

iserfäller

Member
Licensed User
Longtime User
Damit wir uns nicht falsch verstehen: ich möchte die Apps nicht veröffentlichen - ich hab die auch bisher nur auf meinem Tablet installiert und das reicht mir völlig.
Aber funktiomieren sollten sie schon.
Ich kann nicht verstehen, dass eine neu geschriebene App auf einem neuen Release nicht ordnungsgemäß arbeitet.
 

DonManfred

Expert
Licensed User
Longtime User
dass eine neu geschriebene App auf einem neuen Release nicht ordnungsgemäß arbeitet
Ich kann dir versichern dass es NICHTS mit der neuen B4A Version zu tun hat!

Viel mehr haben sich die Regeln geändert, die Google vorgibt mit höheren SDK Versionen.
Wenn man alle neuen Regeln bzgl. TargetSDK 26 korrekt beachtet/behandelt, dann läuft auch eine neue App auf Anhieb mit TargetSDK 26.
 

iserfäller

Member
Licensed User
Longtime User
das hilft zumindest schon mal teilweise, SFPT / Email klappen, aber der Zugriff auf den Speicher wird verhindert
weder strText = File.ReadString(File.DirRootExternal, "KnownHosts.txt") noch die Initialisierung einer Datenbank funktioniert.
 

mw71

Active Member
Licensed User
Longtime User
moin,

je nach Android Version (SDK) gibt es verschiedene Wege die Schreibrechte anzufordern.
Die meiner Meinung nach günstigste Variante ist RuntimePermissions.
https://www.b4x.com/android/forum/threads/runtime-permissions-android-6-0-permissions.67689/
https://www.b4x.com/android/help/runtimepermissions.html

hier mal ein Codebeispiel für verschiedene Versionen
B4X:
dim ExtSDCard as String
dim IntSDCard as String
log("===========================")
log("Ermittle Interne und Externe SD Card Pfade für SDK Version: " & p.SdkVersion)
  
    If p.SdkVersion >= 26 Then
        Dim pfade() As String = Starter.rp.GetAllSafeDirsExternal("")
        IntSDCard=pfade(0)
        If pfade.Length>0 Then
            ExtSDCard=pfade(pfade.Length-1)
        Else
            ExtSDCard=""
        End If
    else If p.SdkVersion >=19 Then
        Dim paths() As Object = GetContext.RunMethod("getExternalFilesDirs", Array(Null))
        IntSDCard=paths(0)
        If paths.Length>0 Then
            ExtSDCard=paths(paths.Length-1)
        Else
            ExtSDCard=""
        End If
    Else
        Dim fc As MLfiles
        IntSDCard =File.DirDefaultExternal
        ExtSDCard =fc.GetExtSd
    End If

    log("IntSDCard=" & IntSDCard)
    log("ExtSDCard=" & ExtSDCard)

log("===========================")
 

iserfäller

Member
Licensed User
Longtime User
im folgenden ein kleines Pojekt, welches einen Text einliest, das Editieren zulässt und beim Beenden speichert.
Für schnelle, einfach festzuhaltende Notizen.
Das Prg. stürzt bei erreichen der mit 'xxx gekennzeichneten Zeile ab.

#Region Project Attributes
#ApplicationLabel: SimplePad
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region

#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region

Sub Process_Globals

End Sub

Sub Globals
Dim pnlSP As Panel
pnlSP.Initialize(pnlSP)

Dim txtSP As EditText
txtSP.Initialize(txtSP)

Dim strText As String

Dim IME As IME
IME.Initialize(IME)
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.Title = " SimplePad"
Activity.Color = Colors.RGB(0, 0, 64)

Activity.AddMenuItem3(" ok ", "mnuBeenden", Null, True)

Activity.AddView(pnlSP, 0dip, 0dip, 96%x, 300%y)
pnlSP.AddView(txtSP, 2%x, 0%y, 95%x, 96%y)

If File.Exists(File.DirRootExternal & "/SimplePad", "SimplePad.txt") = False Then
File.MakeDir(File.DirRootExternal, "SimplePad")
txtSP.Text = "leer"
File.WriteString(File.DirRootExternal & "/SimplePad", "SimplePad.txt", strText)
Else
txtSP.Text = File.ReadString(File.DirRootExternal &"/SimplePad","SimplePad.txt") ' xxx
End If

pnlSP.Left = 2%x
pnlSP.Top = 2%y
pnlSP.Width = 96%x
pnlSP.Height = 96%y
pnlSP.Color = Colors.rgb(0, 0, 64)

txtSP.Gravity = Gravity.TOP
txtSP.TextSize = 18
txtSP.TextColor = Colors.White

txtSP.RequestFocus
End Sub

Sub Activity_Resume
txtSP.RequestFocus
DoEvents
IME.ShowKeyboard(txtSP)
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub mnuBeenden_Click
strText = txtSP.Text
File.WriteString(File.DirRootExternal & "/SimplePad", "SimplePad.txt", strText)
Activity.Finish
End Sub

Das Manifest sieht wie folgt aus:
'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="5" android:targetSdkVersion="19"/>
<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.DarkTheme)
'End of default text.

 

klaus

Expert
Licensed User
Longtime User
1. Wenn Du Code posetest, musst Du den zwischen Codemarks senden:
Das mcht man so:

upload_2019-4-4_11-30-56.png


upload_2019-4-4_11-31-19.png


2. Es wäre für uns einfacher wenn du dein Projekt als zip Datei posten würdest, dann können wir genau sehen was Du wie gemacht hast und wir können es testen.
Zip Datei erstellt man so:

upload_2019-4-4_11-34-38.png


Und dan die zip Datei hochladen:

upload_2019-4-4_11-36-0.png
 

iserfäller

Member
Licensed User
Longtime User
nun bin ich schon so alt und lerne doch täglich was dazu :)

B4X:
#Region  Project Attributes
    #ApplicationLabel: SimplePad
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals

End Sub

Sub Globals
    Dim pnlSP As Panel
    pnlSP.Initialize(pnlSP)
    
    Dim txtSP As EditText
    txtSP.Initialize(txtSP)

    Dim strText As String

    Dim IME As IME
    IME.Initialize(IME)
    
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.Title = " SimplePad"
    Activity.Color = Colors.RGB(0, 0, 64)
    
    Activity.AddMenuItem3("  ok  ", "mnuBeenden", Null, True)

    Activity.AddView(pnlSP, 0dip, 0dip, 96%x, 300%y)
    pnlSP.AddView(txtSP, 2%x, 0%y, 95%x, 96%y)
    
    If File.Exists(File.DirRootExternal & "/SimplePad", "SimplePad.txt") = False Then
        File.MakeDir(File.DirRootExternal, "SimplePad")
        txtSP.Text = "leer"
        File.WriteString(File.DirRootExternal & "/SimplePad", "SimplePad.txt", strText)
    Else
        txtSP.Text = File.ReadString(File.DirRootExternal &"/SimplePad","SimplePad.txt")
    End If
        
    pnlSP.Left = 2%x
    pnlSP.Top = 2%y
    pnlSP.Width = 96%x
    pnlSP.Height = 96%y
    pnlSP.Color = Colors.rgb(0, 0, 64)
    
    txtSP.Gravity = Gravity.TOP
    txtSP.TextSize = 18
    txtSP.TextColor = Colors.White
    
    txtSP.RequestFocus

End Sub

Sub Activity_Resume

    txtSP.RequestFocus
    DoEvents
    IME.ShowKeyboard(txtSP)

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub mnuBeenden_Click

    strText = txtSP.Text
    File.WriteString(File.DirRootExternal & "/SimplePad", "SimplePad.txt", strText)
    
    Activity.Finish
End Sub
 

Attachments

  • SimplePad.zip
    3.8 KB · Views: 215
Top