Italian AppUpdating non funziona con Android 11

Walter Scafati

Active Member
Licensed User
Longtime User
Su uno smartphone con Android 11, nel momento dell'aggiornamento della App con AppUpdating, si verifica il seguente errore:

*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Using FileProvider? true
wcl.Initialize(wcl)
---- AppUpdating.UpdateApk
Current Version: 1.01
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
---- AppUpdating.JobDone --
JobName = JobWebVNcompare, Success = true
-- JoWebVNcompare
Read while in webVNcompare: ver=1.02
Web version number: 1.02
Newer version available. Now I try its downloading
-- ApkUpdate
---- AppUpdating.JobDone --
JobName = JobApkUpdate, Success = true
-- JobApkUpdate
java.io.FileNotFoundException: /storage/emulated/0/Android/data/b4a.verdeco/files/tmp.apk: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:492)
at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
at anywheresoftware.b4a.objects.streams.File.OpenOutput(File.java:449)
at eu.dgconsulting.appupdating.cl_appupdate._jobdone(cl_appupdate.java:431)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:263)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8160)
at libcore.io.IoBridge.open(IoBridge.java:478)
... 13 more
java.io.FileNotFoundException: /storage/emulated/0/Android/data/b4a.verdeco/files/tmp.apk: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:492)
at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
at anywheresoftware.b4a.objects.streams.File.OpenOutput(File.java:449)
at eu.dgconsulting.appupdating.cl_appupdate._jobdone(cl_appupdate.java:431)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:263)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8160)
at libcore.io.IoBridge.open(IoBridge.java:478)
... 13 more

Come si può risolvere questo problema?
 

udg

Expert
Licensed User
Longtime User
Ciao,
al momento non riesco a verificare il codice (e comunque non ho un device Android 11).
prova a dare un'occhiata a questo thread che fa riferimento alla cartella Android/data (ammesso che la libreria scriva lì il file temporaneo)
Altre misure possibili:
- nel Manifest non fare riferimento a SDK30 (che è obbligatorio per il PlayStore ma non certo pe run proprio server)
- controllare che siano consentite le "fonti alternative" pe ril download ed esecuzione di apk
- verificare che sia disattiva un eventuale GooglePlayProtect o altro oggetto simile

Appena potrò, proverò a dare un'occhiata al codice (cosa che può fare chiunque visto che è una libreria in formato b4xlib) e vedere se la fase di scrittura in locale del file temporaneo contrasta con qualcuno degli infiniti nuovi paletti imposti da Android.

In fondo, si sa, noi siamo solo i finanziatori..coloro che acquistano il device ma sul quale non hanno alcun diritto...
 

Walter Scafati

Active Member
Licensed User
Longtime User
Ciao,
al momento non riesco a verificare il codice (e comunque non ho un device Android 11).
prova a dare un'occhiata a questo thread che fa riferimento alla cartella Android/data (ammesso che la libreria scriva lì il file temporaneo)
Altre misure possibili:
- nel Manifest non fare riferimento a SDK30 (che è obbligatorio per il PlayStore ma non certo pe run proprio server)
- controllare che siano consentite le "fonti alternative" pe ril download ed esecuzione di apk
- verificare che sia disattiva un eventuale GooglePlayProtect o altro oggetto simile

Appena potrò, proverò a dare un'occhiata al codice (cosa che può fare chiunque visto che è una libreria in formato b4xlib) e vedere se la fase di scrittura in locale del file temporaneo contrasta con qualcuno degli infiniti nuovi paletti imposti da Android.

In fondo, si sa, noi siamo solo i finanziatori..coloro che acquistano il device ma sul quale non hanno alcun diritto...

Ho seguito il tuo consiglio e quindi ho messo il riferimento SDK26, mentre come platform SDK sto utilizzando la 30.
Ora il messaggio di errore è cambiato ma non capisco quale sia il problema:

*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Using FileProvider? true
wcl.Initialize(wcl)
---- AppUpdating.UpdateApk
Current Version: 1.01
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
---- AppUpdating.JobDone --
JobName = JobWebVNcompare, Success = true
-- JoWebVNcompare
Read while in webVNcompare: ver=1.02
Web version number: 1.02
Newer version available. Now I try its downloading
-- ApkUpdate
---- AppUpdating.JobDone --
JobName = JobApkUpdate, Success = true
-- JobApkUpdate
new apk version downloaded and ready to install
android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/b4a.verdeco/files/tmp.apk exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:2141)
at android.net.Uri.checkFileUriExposed(Uri.java:2391)
at android.content.Intent.prepareToLeaveProcess(Intent.java:11211)
at android.content.Intent.prepareToLeaveProcess(Intent.java:11158)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1724)
at android.app.Activity.startActivityForResult(Activity.java:5430)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:5360)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5774)
at android.app.Activity.startActivity(Activity.java:5727)
at anywheresoftware.b4a.keywords.Common.StartActivity(Common.java:857)
at eu.dgconsulting.appupdating.cl_appupdate._jobdone(cl_appupdate.java:448)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:263)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/b4a.verdeco/files/tmp.apk exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:2141)
at android.net.Uri.checkFileUriExposed(Uri.java:2391)
at android.content.Intent.prepareToLeaveProcess(Intent.java:11211)
at android.content.Intent.prepareToLeaveProcess(Intent.java:11158)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1724)
at android.app.Activity.startActivityForResult(Activity.java:5430)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:5360)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5774)
at android.app.Activity.startActivity(Activity.java:5727)
at anywheresoftware.b4a.keywords.Common.StartActivity(Common.java:857)
at eu.dgconsulting.appupdating.cl_appupdate._jobdone(cl_appupdate.java:448)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:263)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
 

LucaMs

Expert
Licensed User
Longtime User
Se imposti il target a 24 o superiore, si dovrebbe usare FileProvider (la libreria di @udg dovrebbe usarlo, penso).
Prova ad impostarlo su 23.
Attenzione che se l'app utilizza qualche API Android che richieda la versione 24 o superiore, avrai problemi.
 

Walter Scafati

Active Member
Licensed User
Longtime User
Se imposti il target a 24 o superiore, si dovrebbe usare FileProvider (la libreria di @udg dovrebbe usarlo, penso).
Prova ad impostarlo su 23.
Attenzione che se l'app utilizza qualche API Android che richieda la versione 24 o superiore, avrai problemi.
ho seguito il tuo consiglio ed ho impostato il target sul manifest a 23 ma è cambiato il msg di errore:

Logger connesso a: 45372f6
--------- beginning of crash
--------- beginning of system
--------- beginning of main
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Using FileProvider? true
wcl.Initialize(wcl)
---- AppUpdating.UpdateApk
Current Version: 1.01
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
---- AppUpdating.JobDone --
JobName = JobWebVNcompare, Success = true
-- JoWebVNcompare
Read while in webVNcompare: ver=1.02
Web version number: 1.02
Newer version available. Now I try its downloading
-- ApkUpdate
---- AppUpdating.JobDone --
JobName = JobApkUpdate, Success = true
-- JobApkUpdate
new apk version downloaded and ready to install
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/Android/data/b4a.verdeco/files/tmp.apk typ=application/vnd.android.package-archive flg=0x20000 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2073)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1729)
at android.app.Activity.startActivityForResult(Activity.java:5430)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:5360)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5774)
at android.app.Activity.startActivity(Activity.java:5727)
at anywheresoftware.b4a.keywords.Common.StartActivity(Common.java:857)
at eu.dgconsulting.appupdating.cl_appupdate._jobdone(cl_appupdate.java:448)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:263)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/Android/data/b4a.verdeco/files/tmp.apk typ=application/vnd.android.package-archive flg=0x20000 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2073)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1729)
at android.app.Activity.startActivityForResult(Activity.java:5430)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:5360)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5774)
at android.app.Activity.startActivity(Activity.java:5727)
at anywheresoftware.b4a.keywords.Common.StartActivity(Common.java:857)
at eu.dgconsulting.appupdating.cl_appupdate._jobdone(cl_appupdate.java:448)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:263)
at android.app.ActivityThread.main(ActivityThread.java:8278)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
 

udg

Expert
Licensed User
Longtime User
Mi è venuto un dubbio. Stai utilizzando la versione 2.05 di AppUpdating?
I messaggi nel log non mi sembrano corretti

In fase di inizializzazione, la determinazione della cartella in cui scrivere il file temporaneo avviene in questo modo:
B4X:
If p.SdkVersion >= 24 Or File.ExternalWritable = False Then
        UseFileProvider = True
        SharedFolder = File.Combine(File.DirInternal, "shared")
        File.MakeDir("", SharedFolder)
    Else
        UseFileProvider = False
        SharedFolder = rp.GetSafeDirDefaultExternal("shared")
    End If
    Log($"SDK#: ${p.SdkVersion} - UseFP: ${UseFileProvider} - SharedFolder: ${SharedFolder}"$)
 

Walter Scafati

Active Member
Licensed User
Longtime User
Mi è venuto un dubbio. Stai utilizzando la versione 2.05 di AppUpdating?
I messaggi nel log non mi sembrano corretti

In fase di inizializzazione, la determinazione della cartella in cui scrivere il file temporaneo avviene in questo modo:
B4X:
If p.SdkVersion >= 24 Or File.ExternalWritable = False Then
        UseFileProvider = True
        SharedFolder = File.Combine(File.DirInternal, "shared")
        File.MakeDir("", SharedFolder)
    Else
        UseFileProvider = False
        SharedFolder = rp.GetSafeDirDefaultExternal("shared")
    End If
    Log($"SDK#: ${p.SdkVersion} - UseFP: ${UseFileProvider} - SharedFolder: ${SharedFolder}"$)
No, in effetti stavo usando la 1.30 . Installo la 2.05 e riprovo.
 
Top