German B4A 6.30 apk Installation

RauchG

Active Member
Licensed User
Longtime User
Hallo zusammen,

wenn ich aus der IDE ein Debug mache, muss ich die alte apk erst deinstallieren.

Habe ich eine apk_DEBUG oder apk_RELEASE und will ein Update auf eine apk machen, die schon auf einem Gerät installiert ist und mit B4A6.00 Kompiliert wurde geht das nicht (apk wurde nicht installiert).

Wir haben 8 apps auf ca. 250 Geräten laufen die nicht über den PlayStore zu haben sind. Wir Kopieren über einen Client die apk's auf die Geräte und installieren sie beim Öffnen der app's.

Hat einer von euch eine Idee, wie man das lösen kann?

Gruß
RauchG
 

Heinz

Active Member
Licensed User
Longtime User
Hatte ich auch schon gehabt.
Bei Menü Project - Build Configurations
den Package Name ändern :
anywheresoftware.b4a.xxxxx

Warum das so ist, weiß ich allerdings auch nicht.
 

RauchG

Active Member
Licensed User
Longtime User
generell weltweit einzig sein

@KMatle: Meine Packagenamen sind einzig.
Mein Problem sind Updates seit B4A = 6.30

B4A <= 6.00 - Updates sind ohne vorheriges Uninstall möglich.
B4A = 6.30 - Updates sind ohne vorheriges Uninstall nicht mehr möglich.

Unsere ca. 250 User sind Bundesweit verstreut und teilweise nicht so Technisch versiert, dass sie das Uninstall durchführen können.

Gruß
RauchG
 

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

gibt es dafür mittlerweile eine Lösung?
Ich kann über meine eigene Update-Funktion zwar das Update herunterladen aber die Installation klappt nicht.
Z.B. über B4A-Bridge funktioiniert es doch auch ohne vorherige Deinstallation???

Bisher nutze ich nach dem Download der neuen APK-Datei diesen Code:
B4X:
If File.Exists(oDir,"XY.apk") Then
  Dim i As Intent
  i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(oDir, "XY.apk"))
  i.SetType("application/vnd.android.package-archive")
  StartActivity(i)
Else
  Msgbox("Das Update konnte nicht heruntergeladen werden!","Problem [551]")
End If
 

RauchG

Active Member
Licensed User
Longtime User
Schätze mal, dafür wird es auch keine Lösung geben. Erel hat in B4A6.30 den Debug-Key geändert. Der passt nicht mehr zu APPs die mit B4A <= 6.00 kompiliert wurden. Verstehe zwar nicht, warum Erel das gemacht hat aber er wird es auch nicht mehr rückgängig machen. Gottseidank ist B4A6.30 abwärtskompatibel.

Um weiterhin problemlos die neuesten Versionen von B4A verwenden zu können, ist es am besten man erstellt über Tools einen eigenen Private-Key und verwendet den für alle zukünftigen Versionen.

Wenn man das Problem "App wurde nicht installiert" hat und will ein Update machen, kann man das mit einem neuen Package-Namen lösen.
  • Mit B4A6.30 einen neuen Package-Namen erstellen und vor dem Debug den Private-Key laden.
  • In diese Version ein Uninstall der alten Version einbauen.
 

peternmb

Well-Known Member
Licensed User
Longtime User
In diese Version ein Uninstall der alten Version einbauen.
wie funktioiert das, hast du da vielleicht ein Beispiel?

Einen neuen Package-Namen möchte ich eigentlich nicht vergeben, dann würde die App ja praktisch doppelt beim User installiert
 

peternmb

Well-Known Member
Licensed User
Longtime User
Was ich dabei nicht verstehe:
kann ich die App, die praktisch die Deinstallationsroutine aufruft deinstallieren?

Ich habe auch etwas Problem mit der korrekten Syntax, evtl. resultiert daraus auch meine Fehlermeldung
B4X:
Dim i As Intent
Initialize("android.intent.action.DELETE", "???")
i.SetType("application/vnd.android.package-archive")
StartActivity(i)

Was kommt bei ??? hin?
- der Name meiner APK-Datei z.B. Test.APK
oder
- was unter "Project" -> "Build Configurations" bei Package eingetragen ist?

Es funktioniert bei mir beides nicht.

Vielen Dank.
 

RauchG

Active Member
Licensed User
Longtime User
kann ich die App, die praktisch die Deinstallationsroutine aufruft deinstallieren?
Das geht nicht. Du kannst nur die App deinstallieren, die schon installiert ist

- was unter "Project" -> "Build Configurations" bei Package eingetragen ist?
Das ist der Package-Name

B4X:
Dim In As Intent
 
    In.Initialize("","")
    In = pm.GetApplicationIntent("xxx.xxxx.xxx")
         
    If In.IsInitialized Then
        Msgbox("Als nächstes kommt eine Meldung zur Deinstallation der alten Software. Bitte bestätigen Sie die Deinstallation mit OK. Diese Meldung kommt nur einmal", "Achtung")
        In.Initialize("android.intent.action.DELETE", "package:xxx.xxxx.xxx")
        StartActivity(In)
    End If
 

peternmb

Well-Known Member
Licensed User
Longtime User
Ah, jetzt verstehe ich es - da bin ich wohl etwas auf dem Schlauch gestanden ;-)
Ich installiere die App unter einem neuen Package-Namen, dann deinstalliere ich beim Start der neuen App die alte...

Das Problem, das ich allerdings dabei sehe:
Wenn ich jedesmal einen neuen Package-Namen vergebe woher weiß ich dann, welches Package deinstalliert werden muss.
Solange immer alle Updates vom User installiert werden ist es klar (die Vorgängerversion), nur wenn Updates übersprungen werden was dann?

Oder mache ich da schon weider einen Denkfehler?
 

RauchG

Active Member
Licensed User
Longtime User
Da kommt der Private-Key ins Spiel. Du musst die App mit dem neuen Package-Namen mit einem Private-Key (Tools) kompilieren und in Zukunft deine Apps nur noch mit diesem Private-Key verwenden.

Dann vergibst du keinen neuen Package-Namen mehr. Der einmal erstellte neue Package-Name in Verbindung mit dem Private-Key ermöglicht dir reibungslose Updates in der Zukunft.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Wenn ich den Key in den Tools erstellt habe, muss der dann noch irgendwo eingebunden werden oder geht das automatisch?

Ist es richtig, dass ich den Keys für alle meine Apps nutze, oder brauche ich da für jede App einen?
 

RauchG

Active Member
Licensed User
Longtime User
Jedes mal, wenn du eine App mit B4A >= 6.30 bearbeitest, musst du den Private-Key über Tools laden und mit Ok bestätigen (nicht "Use Debug Key" anklicken)

Wenn du einmal einen Private-Key erstellt hast, kannst du ihn für alle Apps verwenden. Wenn du deine Apps über den Play-Store verkaufst solltes du für jede App einen eigenen Private-Key verwenden.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Wenn du deine Apps über den Play-Store verkaufst solltes du für jede App einen eigenen Private-Key verwenden.
Dafür gibt es keinen Grund, man kann immer den selben Key verwenden.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Dim In As Intent

In.Initialize("","")
In = pm.GetApplicationIntent("xxx.xxxx.xxx")

If In.IsInitialized Then
Msgbox("Als nächstes kommt eine Meldung zur Deinstallation der alten Software. Bitte bestätigen Sie die Deinstallation mit OK. Diese Meldung kommt nur einmal", "Achtung")
In.Initialize("android.intent.action.DELETE", "package:xxx.xxxx.xxx")
StartActivity(In)
End If

als was muss ich pm deklarieren?
 
Top