Fixed
Status Update
Comments
ra...@google.com <ra...@google.com>
ia...@gmail.com <ia...@gmail.com> #2
The most common devices for the first crash sorted from highest to lowest:
Samsung S8 (5% of all crashes), S9 (4%), S8+ (4%), S10+ (3%), S9+ (3%), Huawei P20 Pro & Lite (9%)
The most common devices for the second crash:
HUAWEI Y6 2019 (38% of all crashes), HUAWEI Y5 2019 (17%), Nokia 3 (10%), Nokia 2.1 (9 %), Oppo realme 1 (5%)
The most common devices for the third crash:
Samsung Galaxy A5 (14% of all crashes). S7 Edge (9%), Spa Condor Electronics PGN610 (17% of all crashes)
Samsung S8 (5% of all crashes), S9 (4%), S8+ (4%), S10+ (3%), S9+ (3%), Huawei P20 Pro & Lite (9%)
The most common devices for the second crash:
HUAWEI Y6 2019 (38% of all crashes), HUAWEI Y5 2019 (17%), Nokia 3 (10%), Nokia 2.1 (9 %), Oppo realme 1 (5%)
The most common devices for the third crash:
Samsung Galaxy A5 (14% of all crashes). S7 Edge (9%), Spa Condor Electronics PGN610 (17% of all crashes)
su...@google.com <su...@google.com> #4
Which library version are you using?
to...@googlemail.com <to...@googlemail.com> #5
yeap, at least #1 was reported against the alpha here: https://stackoverflow.com/q/56358422/270197 - while the lib is now in beta
su...@google.com <su...@google.com> #6
#1 and #3 are definitely fixable in the support library. #2 can likely be resolved by the app checking BiometricManager#canAuthenticate() before requesting BiometricPrompt#authenticate().
For #1)
Looks like somehow the app is trying to display the dialog after onSaveInstanceState(), e.g. the activity/fragment is ending its lifecycle? Curtis perhaps we should do some lifecycle checks here.
For #2)
tranced.freak@ do you happen to know which devices are reporting this?
There is a chance the following is happening:
- device does not have fingerprint hardware
- app requests authenticate()
- hasSystemFeature(FP) fails, but invokes sendError
- sendError needs FPM to get error string.
A solution on the app side is to check BiometricManager#canAuthenticate() before requesting authentication. Is this something the app is already doing? We will focus this bug on #1 and #3 until we hear otherwise.
For #3)
Similar onSaveInstanceState issue
For #1)
Looks like somehow the app is trying to display the dialog after onSaveInstanceState(), e.g. the activity/fragment is ending its lifecycle? Curtis perhaps we should do some lifecycle checks here.
For #2)
tranced.freak@ do you happen to know which devices are reporting this?
There is a chance the following is happening:
- device does not have fingerprint hardware
- app requests authenticate()
- hasSystemFeature(FP) fails, but invokes sendError
- sendError needs FPM to get error string.
A solution on the app side is to check BiometricManager#canAuthenticate() before requesting authentication. Is this something the app is already doing? We will focus this bug on #1 and #3 until we hear otherwise.
For #3)
Similar onSaveInstanceState issue
to...@googlemail.com <to...@googlemail.com> #7
Edit, just read comment #2 . Y5, Nokia 3, Nokia 2.1, Realme1 don't have fingerprint sensors.
The only other device, Y6 does have a fingerprint sensor but it's possible the only other device (Y6) did not declare FEATURE_FINGERPRINT.
Either way, checking androidx.BiometricManager#canAuthenticate (added in beta01) will resolve this issue.
The only other device, Y6 does have a fingerprint sensor but it's possible the only other device (Y6) did not declare FEATURE_FINGERPRINT.
Either way, checking androidx.BiometricManager#canAuthenticate (added in beta01) will resolve this issue.
su...@google.com <su...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 549dceb1f3104bc4c4cb3e5168114f99e84a223c
Author: Curtis Belmonte <curtislb@google.com>
Date: Tue Sep 17 11:24:07 2019
Fix biometric dialog crashes due to state loss
Making fragment transactions such as adding or removing dialogs after
the host activity's state has been saved is currently causing crashes in
the biometric library. normally For multiple reasons (outlined in
b/138825362 ), allowing these dialogs to be dismissed with state loss is
probably preferable anyway, so this commit makes that change. It also
tries to prevent BiometricPrompt from triggering authentication in the
first place if the host's state has already been saved.
Test: ./gradlew biometric:connectedAndroidTest
Test: Trigger delayed dismissal of dialog and quickly finish activity
Test: Enable "Don't Keep Activities", show prompt and back out
periodically
Before: App crashes
After: App no longer crashes
Fixes: 138825362
Bug: 140447194
Change-Id: Ic2cf512c9441c2c8b83a051ff788210ae10d64b1
M biometric/src/main/java/androidx/biometric/BiometricPrompt.java
M biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
https://android-review.googlesource.com/1122833
https://goto.google.com/android-sha1/549dceb1f3104bc4c4cb3e5168114f99e84a223c
Branch: androidx-master-dev
commit 549dceb1f3104bc4c4cb3e5168114f99e84a223c
Author: Curtis Belmonte <curtislb@google.com>
Date: Tue Sep 17 11:24:07 2019
Fix biometric dialog crashes due to state loss
Making fragment transactions such as adding or removing dialogs after
the host activity's state has been saved is currently causing crashes in
the biometric library. normally For multiple reasons (outlined in
probably preferable anyway, so this commit makes that change. It also
tries to prevent BiometricPrompt from triggering authentication in the
first place if the host's state has already been saved.
Test: ./gradlew biometric:connectedAndroidTest
Test: Trigger delayed dismissal of dialog and quickly finish activity
Test: Enable "Don't Keep Activities", show prompt and back out
periodically
Before: App crashes
After: App no longer crashes
Fixes: 138825362
Bug: 140447194
Change-Id: Ic2cf512c9441c2c8b83a051ff788210ae10d64b1
M biometric/src/main/java/androidx/biometric/BiometricPrompt.java
M biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
su...@google.com <su...@google.com> #9
are these fixes released in beta02?
to...@googlemail.com <to...@googlemail.com> #10
> are these fixes released in beta02?
Unfortunately no, but fixes for (1) and (3) from comment #2 will be in rc01, which should be released very soon. :-)
As kchyn@google.com said, an app-side solution is probably most appropriate for (2).
Unfortunately no, but fixes for (1) and (3) from
As kchyn@google.com said, an app-side solution is probably most appropriate for (2).
su...@google.com <su...@google.com> #11
I did use alpha version first and then upgraded to beta-02 and I had the same issues.
Unfortunately at the moment I can't use this library until the state errors will be fixed, so I use my own solution as a workaround.
Unfortunately at the moment I can't use this library until the state errors will be fixed, so I use my own solution as a workaround.
to...@googlemail.com <to...@googlemail.com> #12
Sit tight, rc01, which contains the fixes for 1 and 3 is coming in before the end of next week.
to...@googlemail.com <to...@googlemail.com> #13
Does it suffice to raise the compileSdkVersion to 28 or do I also have to raise the version of the support library artifacts at the same time? I tried your suggestion in comment #11 but the build still fails.
ap...@google.com <ap...@google.com> #14
Project: platform/frameworks/support
Branch: androidx-master-dev
commit cee9ab55352f3ad506552afb4753baf8648b4c30
Author: Sumir Kataria <sumir@google.com>
Date: Mon Oct 08 14:20:57 2018
Fix class name in Proguard configuration.
Bug: 116296569
Test: N/A
Change-Id: I3525f9d2f3b06523cbe842b35f97014677879a64
M work/workmanager/proguard-rules.pro
https://android-review.googlesource.com/782087
https://goto.google.com/android-sha1/cee9ab55352f3ad506552afb4753baf8648b4c30
Branch: androidx-master-dev
commit cee9ab55352f3ad506552afb4753baf8648b4c30
Author: Sumir Kataria <sumir@google.com>
Date: Mon Oct 08 14:20:57 2018
Fix class name in Proguard configuration.
Bug: 116296569
Test: N/A
Change-Id: I3525f9d2f3b06523cbe842b35f97014677879a64
M work/workmanager/proguard-rules.pro
su...@google.com <su...@google.com> #15
Support library as well.
to...@googlemail.com <to...@googlemail.com> #16
Do the latest changes (WorkParameters -> WorkerParameters, NonBlockingWorker -> ListenableWorker) in the ProGuard configuration apply to WorkManager 1.0.0-alpha09 or 1.0.0-alpha10 or both?
su...@google.com <su...@google.com> #17
alpha10.
to...@googlemail.com <to...@googlemail.com> #18
su...@google.com <su...@google.com> #19
There isn't one for alpha09... it's already released. You can modify that commit and adapt it to alpha09.
Just change WorkParameters -> WorkerParameters.
Just change WorkParameters -> WorkerParameters.
to...@googlemail.com <to...@googlemail.com> #20
Which commit do you refer to? The link I posted show the history of the proguard-rules.pro commits. Since the file exists for a year I would have expected that there was a version of the file which shipped with WorkManager 1.0.0-alpha which was released by September 19, 2018.
Or do you mean that the proguard-rules.pro being shipped with WorkManager 1.0.0-alpha is buggy?
Or do you mean that the proguard-rules.pro being shipped with WorkManager 1.0.0-alpha is buggy?
su...@google.com <su...@google.com> #21
Yes, alpha09 had a bug. #19 suggests a modification to your app's proguard config to get around the issue. alpha10 should be out soon with the fix.
to...@googlemail.com <to...@googlemail.com> #22
Thank you for the clarification.
I prepared my test branch according to your recommendations (ProGuard, compileSdkVersion, targetSdkVersion, support libraries) as you can see here:
https://github.com/EventFahrplan/EventFahrplan/compare/master...workmanager
The release build however still fails:
00:20:09.182 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobService
00:20:09.182 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobScheduler
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk7.JDK7PlatformImplementations
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
00:20:09.212 [QUIET] [system.out] Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform$CloseGuard: can't find dynamically referenced class dalvik.system.CloseGuard
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.ConscryptPlatform: can't find dynamically referenced class org.conscrypt.ConscryptEngineSocket
00:20:09.229 [QUIET] [system.out] Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl
00:20:09.955 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.core.graphics.drawable.IconCompatParcelizer { android.support.v4.graphics.drawable.IconCompat read(androidx.versionedparcelable.VersionedParcel); }', but not the descriptor class 'androidx.versionedparcelable.VersionedParcel'
00:20:09.955 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.core.graphics.drawable.IconCompatParcelizer { void write(android.support.v4.graphics.drawable.IconCompat,androidx.versionedparcelable.VersionedParcel); }', but not the descriptor class 'androidx.versionedparcelable.VersionedParcel'
I prepared my test branch according to your recommendations (ProGuard, compileSdkVersion, targetSdkVersion, support libraries) as you can see here:
The release build however still fails:
00:20:09.182 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobService
00:20:09.182 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobScheduler
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk7.JDK7PlatformImplementations
00:20:09.210 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
00:20:09.212 [QUIET] [system.out] Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform$CloseGuard: can't find dynamically referenced class dalvik.system.CloseGuard
00:20:09.228 [QUIET] [system.out] Note: okhttp3.internal.platform.ConscryptPlatform: can't find dynamically referenced class org.conscrypt.ConscryptEngineSocket
00:20:09.229 [QUIET] [system.out] Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl
00:20:09.955 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.core.graphics.drawable.IconCompatParcelizer { android.support.v4.graphics.drawable.IconCompat read(androidx.versionedparcelable.VersionedParcel); }', but not the descriptor class 'androidx.versionedparcelable.VersionedParcel'
00:20:09.955 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.core.graphics.drawable.IconCompatParcelizer { void write(android.support.v4.graphics.drawable.IconCompat,androidx.versionedparcelable.VersionedParcel); }', but not the descriptor class 'androidx.versionedparcelable.VersionedParcel'
su...@google.com <su...@google.com> #23
These aren't failures (unless your configuration has a problem). As you can see, you have things listed from other libraries like okhttp as well.
to...@googlemail.com <to...@googlemail.com> #24
Maybe, I missing the specific part in the output. I pasted a large part of the lower end here: http://pastebin.de/8421/
ra...@google.com <ra...@google.com> #25
You need to add:
-dontwarn sun.misc.Unsafe
-dontwarn sun.misc.Unsafe
to...@googlemail.com <to...@googlemail.com> #26
Thank you. This made the release build succeed.
Can you please explain which library (version) introduces the Unsafe class?
Can you please explain which library (version) introduces the Unsafe class?
ri...@googlemail.com <ri...@googlemail.com> #27
I am still facing this issue with WorkManager-1.0.0-beta01
2018-12-31 01:40:32.701 2947-2977/de.aurora.mggvertretungsplan.debug E/WM-WorkerFactory: Could not instantiate de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker
java.lang.IllegalAccessException: Class java.lang.Class<androidx.work.WorkerFactory> cannot access method void de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker.<init>(android.content.Context, androidx.work.WorkerParameters) of class java.lang.Class<de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker>
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:92)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:191)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:125)
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:764)
2018-12-31 01:40:32.701 2947-2977/de.aurora.mggvertretungsplan.debug E/WM-WorkerWrapper: Could not create Worker de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker
My code can be found athttps://github.com/d-Rickyy-b/MGGVertretungsplan .
I'd be very grateful for any kind of support.
2018-12-31 01:40:32.701 2947-2977/de.aurora.mggvertretungsplan.debug E/WM-WorkerFactory: Could not instantiate de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker
java.lang.IllegalAccessException: Class java.lang.Class<androidx.work.WorkerFactory> cannot access method void de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker.<init>(android.content.Context, androidx.work.WorkerParameters) of class java.lang.Class<de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker>
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:92)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:191)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:125)
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:764)
2018-12-31 01:40:32.701 2947-2977/de.aurora.mggvertretungsplan.debug E/WM-WorkerWrapper: Could not create Worker de.aurora.mggvertretungsplan.services.DownloadTimeTableWorker
My code can be found at
I'd be very grateful for any kind of support.
ri...@googlemail.com <ri...@googlemail.com> #28
Okay... I feel pretty stupid now - it seems that my constructor was package-private and for workmanager to work, it needed to be public. Maybe the exception could point to that issue?
ra...@google.com <ra...@google.com> #29
That is correct. Worker must have a public constructor unless you instantiate it via your own WorkerFactory.
Description
Version used: 1.0.0-alpha09
When using ProGuard, the Worker(Context context, WorkerParameters) constructor isn't kept, leading to Workers being unable to be created:
DefaultWorkerFactory: Could not instantiate com.google.android.apps.muzei.sync.ProviderChangedWorker
DefaultWorkerFactory: java.lang.NoSuchMethodException: <init> []
DefaultWorkerFactory: at java.lang.Class.getConstructor0(Class.java:2327)
DefaultWorkerFactory: at java.lang.Class.getDeclaredConstructor(Class.java:2166)
DefaultWorkerFactory: at androidx.work.DefaultWorkerFactory.createWorker(DefaultWorkerFactory.java:58)
DefaultWorkerFactory: at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:180)
DefaultWorkerFactory: at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:117)
DefaultWorkerFactory: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
DefaultWorkerFactory: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
DefaultWorkerFactory: at java.lang.Thread.run(Thread.java:764)
WorkerWrapper: Could for create Worker com.google.android.apps.muzei.sync.ProviderChangedWorker
I had to manually add the ProGuard rule:
-keepclassmembers class * extends androidx.work.Worker {
public <init>(android.content.Context,androidx.work.WorkerParameters);
}