ministero-salute / it-dgc-verificac19-sdk-android

Digital Covid Certificate SDK
Apache License 2.0
57 stars 30 forks source link

[RESOLVED] Crash con Android 12 all'avvio del LoadKeysWorker #67

Closed albertocappellina closed 2 years ago

albertocappellina commented 2 years ago

Issue content

Buonasera,

come da oggetto all'avvio del worker LoadKeysWorker la nostra app crasha con il seguente errore

Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. at android.app.PendingIntent.checkFlags(PendingIntent.java:375) at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645) at android.app.PendingIntent.getBroadcast(PendingIntent.java:632) at androidx.work.impl.utils.ForceStopRunnable.getPendingIntent(ForceStopRunnable.java:273) at androidx.work.impl.utils.ForceStopRunnable.isForceStopped(ForceStopRunnable.java:151) at androidx.work.impl.utils.ForceStopRunnable.forceStopRunnable(ForceStopRunnable.java:171) at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:102) at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920)

Cercando in rete questo problema sembra essere risolto da androidx.work:work-runtime-ktx:2.7.0-alpha05 tuttavia a questo punto il worker non viene piu' avviato, con questo messaggio di errore:

E/WM-WorkerFactory: Could not instantiate it.ministerodellasalute.verificaC19sdk.worker.LoadKeysWorker java.lang.NoSuchMethodException: it.ministerodellasalute.verificaC19sdk.worker.LoadKeysWorker. [class android.content.Context, class androidx.work.WorkerParameters] at java.lang.Class.getConstructor0(Class.java:2363) at java.lang.Class.getDeclaredConstructor(Class.java:2201) at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95) at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:245) at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:137) at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920) E/WM-WorkerWrapper: Could not create Worker it.ministerodellasalute.verificaC19sdk.worker.LoadKeysWorker

Qualcuno è riuscito a risolvere questo problema ?

rawmain commented 2 years ago

Buonasera @albertocappellina

come da oggetto all'avvio del worker LoadKeysWorker la nostra app crasha con il seguente errore

`Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable [...] Cercando in rete questo problema sembra essere risolto da androidx.work:work-runtime-ktx:2.7.0-alpha05 tuttavia a questo punto il worker non viene piu' avviato, con questo messaggio di errore

Avendo reimpostato il target da 30 a 31 per la vostra app, una volta verificato ok allineamenti nuovi compileSdk&targetSdk a 31 con le dependency dei progetti (app + dgc-sdk + decoder), dovreste aver applicato di base anche le 3 seguenti modifiche :

allprojects {
    repositories {
        google()
        jcenter()
    }

    project.configurations.all {
        resolutionStrategy {
            force Deps.androidx_worker_ktx
        }
    }
}
        <provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            android:exported="false"
            tools:node="merge">
            <meta-data
                android:name="androidx.work.WorkManagerInitializer"
                android:value="androidx.startup"
                tools:node="remove" />
        </provider>

Esito OK nei test effettuati su emulatore / dispositivi reali con tali modifiche applicate al codice corrente merged develop + feature/sgp per verifier-app & DGC-SDK (supporto scan mode 2G/3G & CRL/DRL RevokeList).

Nessuna exception & regolare avvio LoadKeysWorker: key fetching start e passi successivi.

Qualora possa servirvi per controllo codice & test, ti allego :

https://github.com/VC19SGP/it-dgc-verificaC19-android-SGP/releases/tag/1.1.7-SGP-20211125-T31

albertocappellina commented 2 years ago

Grazie infinite, la correzione funziona!

Ne approfitto per chiederti se per modificare i targetSdk/compileSdk dei sottoprogetti dobbiamo modificare in locale le definizioni (senza pusharle) o se possiamo usare il force anche per quelle, es:

   project.configurations.all {
        resolutionStrategy {
            force Deps.androidx_worker_ktx
            force Config.targetSdk
            force Config.compileSdk
        }
    }
rawmain commented 2 years ago

Ciao @albertocappellina

Grazie infinite, la correzione funziona!

Prego ;) .

Ne approfitto per chiederti se per modificare i targetSdk/compileSdk dei sottoprogetti dobbiamo modificare in locale le definizioni (senza pusharle) o se possiamo usare il force anche per quelle [...]

Personalmente suggerirei di mantenere comunque un approccio "keep it simple" - evitando modifiche locali & minimizzando override per i projects DGC-SDK e EU DCC core.

L'override force compileSdk/targetSdk richiederebbe comunque anche override dependency.useVersion espliciti per alcuni casi ModuleVersionSelector dependency.getRequested .

Sufficiente quindi impostare i parametri per object Config solo in app buildsrc :


Qualora posso servirvi per controllo codice & test, allego :

https://github.com/VC19SGP/it-dgc-verificaC19-android-SGP/releases/tag/1.1.7-SGP-20211126-M23-T31

albertocappellina commented 2 years ago

Chiaro! Grazie ancora, chiudo la issue così qualcun'altro potra' trovarne beneficio :)