Code Monkey home page Code Monkey logo

biometric_storage's Introduction

Contribute Contribute

AuthPass.app

AuthPass.app - Open Source Password Manager for mobile and desktop

AuthPass - Password Manager based on Flutter for all platforms. Keepass 2.x (kdbx 3.x) compatible.

Mac OS, iOS and Android Screenshot

Contribute to AuthPass

Need ideas how to contribute? Visit the forum for many different ways to contribute. Contribute

If you like AuthPass, and want to contribute. First, spread the word ;-) Writing reviews, vote or share AuthPass on twitter, reddit, etc.

Roadmap/TODOs

see also https://github.com/authpass/authpass/issues

GitHub issues

  • Read/Decrypt kdbx 3.x using password
  • Download of kdbx files through url
  • Parse decrypted XML/handle protected values
  • Flutter scaffold for mobile (ios/android)
  • Platforms πŸŽ‰οΈπŸ‘οΈβœ…οΈ
  • Decrypt with keyfile #3
  • List of password entries
  • πŸ‘†οΈ Search through entries
  • πŸ‘†οΈ Entry details
  • πŸ‘†οΈ mobile: copy usernames, passwords
  • mobile: integrate with biometrics (fingerprint)
  • mac: Auto-Type #13
  • πŸ‘†οΈ Auto-lock after x minutes of inactivity. #14
  • Editing existing entries
  • Saving of changes into kdbx file.
  • Creating of new kdbx files.
  • Syncing of kdbx files via custom cloud service and QR codes. #29
  • Syncing with cloud services like dropbox or google drive?
  • πŸ‘†οΈ CI pipeline/continous builds, releases
  • kdbx 4 support (missing argon2) compatibility #4
  • Android: Auto Fill #30
  • iOS: Auto Fill #31

Donations

If you like AuthPass check out the website for ways to support us.

License

AuthPass - Password Manager [email protected]

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3 of the License.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Contributors must agree to our CLA.

biometric_storage's People

Contributors

ahmadre avatar brianblanchard-wf avatar hpoul avatar luckyrat avatar martingeorgiu avatar patrickhammond avatar radvansky-tomas avatar stephg avatar thomaslamprecht avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

biometric_storage's Issues

MacOS Password popup

Is this required to have a password entered to save stuff to the keychain? flutter_secure_storage Doesn't cause this popup.

Screen Shot 2022-06-14 at 8 29 02 PM

fatal error: 'biometric_storage/biometric_storage-Swift.h' file not found

(Android is working ok)
I'm following the whole documentation, and for iOS I'm getting:

/Users/gitlab/development/flutter/.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.1/ios/Classes/BiometricStoragePlugin.m:2:9: fatal error: 'biometric_storage/biometric_storage-Swift.h' file not found

Flutter version:

Flutter 2.5.3 β€’ channel stable β€’ https://github.com/flutter/flutter.git
Framework β€’ revision 18116933e7 (9 weeks ago) β€’ 2021-10-15 10:46:35 -0700
Engine β€’ revision d3ea636dc5
Tools β€’ Dart 2.14.4

Flutter doctor:

[βœ“] Flutter (Channel stable, 2.5.3, on macOS 11.2 20D64 darwin-x64, locale en-GB)
[!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    βœ— cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    βœ— Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[βœ“] Xcode - develop for iOS and macOS
[βœ“] Chrome - develop for the web
[βœ“] Android Studio (version 2020.3)
[βœ“] IntelliJ IDEA Community Edition (version 2020.3.1)
[βœ“] VS Code (version 1.61.0)
[βœ“] Connected device (2 available)

FaceId popup not show when call read()

Hi

I'm build on real iOS device. I can see FaceId popup when i call storage.read() at first time. But i call storage.read() at second times it auto return value from storage without FaceId verification.

So can i force FaceId verification when i call storage.read()

There is no option for get All Supported bio-metric.

i test this in Ios devices. which app need to show the user authentication image as per his device Supported.
like Iphone XR support face lock(not fingerprint)
and
iPhone 5s support fingerprint(not face lock).
so,
As per his device i need to show button text and image there for authentication.

[android] Crash for failed fingerprint authentication

This plugin crash any app, as it sends multiple replies.
Main BiometricPrompt dialog is control via Android, and each reply from this dialog is forwarded to plugin, which then cause app crash!

Steps to reproduce (in your example)

  1. init
  2. write
  3. use other finger than usual
  4. press cancel or correct finger

APP CRASH, as in 3.step, your plugin send result.error (but dialog is not dismissed)

To fix it you either have to dismiss dialog on any outcome and call it again, to keep architecture request-response. (which might be problem, as you want to support AndroidX API23, which does not have cancellation request I think)

OR

Use streams, and listen to every reply

Authorization via password

In addition to biometric authorization, we need the user to be able to protect data with a password. Is it technically possible to make the OS check the password from a storage?

Question: How to use "authenticationValidityDurationSeconds"?

Hi,

Thank you for making this package.

StorageFileInitOptions( authenticationValidityDurationSeconds: 30, ),

As far as I understand, when I set authenticationValidityDurationSeconds to 30, the storage file should not require authentication for 30 seconds for any read or write actions.

But my working sample with Samsung Galaxy Note 10 asks authentication per every actions (read and write).
(no matter how long I set the validity duration).

Thank for your help!

Wonmo

failed to build on kotlin 1.6 / java 17 / agp 7

After upgrading our Flutter gradle-build to kotlin 1.6 (along with android-gradle-plugin 7.0+ and openjdk 17), assembling the app fails with this error:

* What went wrong:
Execution failed for task ':biometric_storage:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':biometric_storage:kaptDebugKotlin'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:143)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
        at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:342)
        at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:142)
        at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:94)
        at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForAll(DefaultAsyncWorkTracker.java:80)
        at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForCompletion(DefaultAsyncWorkTracker.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:247)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:168)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:188)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:38)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:27)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:109)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.withWorkspace(TaskExecution.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.jetbrains.kotlin.gradle.internal.KaptExecution.run(KaptWithoutKotlincTask.kt:285)
        at org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction.execute(KaptWithoutKotlincTask.kt:240)
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
        at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:206)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:214)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
        ... 3 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:90)
        at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:31)
        at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:47)
        ... 29 more
Caused by: com.sun.tools.javac.processing.AnnotationProcessingError: java.lang.IllegalStateException: Could not parse metadata! This should only happen if you're using Kotlin <1.1.
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1035)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:939)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1267)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1382)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1234)
        ... 35 more
Caused by: java.lang.IllegalStateException: Could not parse metadata! This should only happen if you're using Kotlin <1.1.
        at com.squareup.moshi.kotlinpoet.metadata.KotlinPoetMetadata.readKotlinClassMetadata(KotlinPoetMetadata.kt:89)
        at com.squareup.moshi.kotlinpoet.metadata.KotlinPoetMetadata.toImmutableKmClass(KotlinPoetMetadata.kt:119)
        at com.squareup.moshi.kotlin.codegen.MoshiCachedClassInspector.toImmutableKmClass(MoshiCachedClassInspector.kt:37)
        at com.squareup.moshi.kotlin.codegen.MetadataKt.targetType(metadata.kt:139)
        at com.squareup.moshi.kotlin.codegen.JsonClassCodegenProcessor.adapterGenerator(JsonClassCodegenProcessor.kt:148)
        at com.squareup.moshi.kotlin.codegen.JsonClassCodegenProcessor.process(JsonClassCodegenProcessor.kt:114)
        at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt:90)
        at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:188)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1023)
        ... 39 more

After some googling, the upstream issue is this: square/moshi#1433
So I updated moshi to 1.13.0 and verified the issue is solved.

Clear keys on macOS

How do I see all the keys my app has created in macOS? I've looked in the "Keychain Access" but I can't see anything obvious that has been created.

Unlike android where you can clear the cache/delete the app, on macOS I have yet to find a way to reset everything.

Thanks in advance

[web]: cannot build web

Since v. 3 or so I cannot compile my projects for Web.

Bildschirmfoto 2022-01-17 um 18 14 39

Bildschirmfoto 2022-01-17 um 18 14 50

It's the win32 package that collides here.

Why is win32 beeing compiled for web?

Getting unknown exception on android

After the read function and the fingerprint conformation i get -
AuthException{code: AuthExceptionCode.unknown, message: Unexpected authentication error. null}
(Andorid)
This occurs on 3.0.0.
Will test it on 3.0.1 to tell if something changed.
Biometric defined as -

BiometricStorage().getStorage('safe_token_repo', options: StorageFileInitOptions(authenticationValidityDurationSeconds: -1), promptInfo: const PromptInfo( androidPromptInfo: AndroidPromptInfo( title: 'Authentication', subtitle: '', description: 'Touch the fingerprint sensor', negativeButton: 'Use password', ), iosPromptInfo: IosPromptInfo( saveTitle: 'Custom save title', accessTitle: 'Enter password.', ), ));

Build Failure on Android


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':biometric_storage:kaptGenerateStubsDebugKotlin'.
> Could not resolve all files for configuration ':biometric_storage:debugCompileClasspath'.
   > Failed to transform moshi-1.13.0.jar (com.squareup.moshi:moshi:1.13.0) to match attributes {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api, org.jetbrains.kotlin.platform.type=jvm}.
      > Execution failed for JetifyTransform: C:\Users\xeine\.gradle\caches\modules-2\files-2.1\com.squareup.moshi\moshi\1.13.0\da685586facab9eb5c4fb630ce248be14e7da21b\moshi-1.13.0.jar.
         > Failed to transform 'C:\Users\xeine\.gradle\caches\modules-2\files-2.1\com.squareup.moshi\moshi\1.13.0\da685586facab9eb5c4fb630ce248be14e7da21b\moshi-1.13.0.jar' using Jetifier. Reason: IllegalArgumentException, message: Unsupported class file major version 60. (Run with --stacktrace for more details.)
           Suggestions:
            - Check out existing issues at https://issuetracker.google.com/issues?q=componentid:460323&s=modified_time:desc, it's possible that this issue has already been filed there.
            - If this issue has not been filed, please report it at https://issuetracker.google.com/issues/new?component=460323 (run with --stacktrace and provide a stack trace if possible).

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 23s
Exception: Gradle task assembleDebug failed with exit code 1


Flutter Doctor


[√] Flutter (Channel stable, 2.10.3, on Microsoft Windows [Version 10.0.22000.588], locale en-DE)
    β€’ Flutter version 2.10.3 at C:\tools\flutter
    β€’ Upstream repository https://github.com/flutter/flutter.git
    β€’ Framework revision 7e9793dee1 (3 weeks ago), 2022-03-02 11:23:12 -0600
    β€’ Engine revision bd539267b4
    β€’ Dart version 2.16.1
    β€’ DevTools version 2.9.2

[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    β€’ Android SDK at C:\Users\xeine\AppData\Local\Android\Sdk
    β€’ Platform android-31, build-tools 31.0.0
    β€’ ANDROID_SDK_ROOT = C:\Users\xeine\AppData\Local\Android\Sdk
    β€’ Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    β€’ Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)
    β€’ All Android licenses accepted.

[√] Chrome - develop for the web
    β€’ Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[X] Visual Studio - develop for Windows
    X Visual Studio not installed; this is necessary for Windows development.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components

[√] Android Studio (version 2021.1)
    β€’ Android Studio at C:\Program Files\Android\Android Studio
    β€’ Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    β€’ Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    β€’ Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)

[√] Connected device (3 available)
    β€’ Windows (desktop) β€’ windows β€’ windows-x64    β€’ Microsoft Windows [Version 10.0.22000.588]
    β€’ Chrome (web)      β€’ chrome  β€’ web-javascript β€’ Google Chrome 99.0.4844.74
    β€’ Edge (web)        β€’ edge    β€’ web-javascript β€’ Microsoft Edge 97.0.1072.69

[√] HTTP Host Availability
    β€’ All required HTTP hosts are available

Android: PlatformException (PlatformException(AuthError:Failed, Plugin not attached to any activity., null))

Can't seem to write to storage with Android, I'm getting the error:

Exception has occurred.
PlatformException (PlatformException(AuthError:Failed, Plugin not attached to any activity., null))

Here's how I'm calling it (followed how it was done in the example):

    var b = await BiometricStorage().getStorage('li.my.app',
        options: StorageFileInitOptions(authenticationRequired: true));
    await b.write('some new data');

Flutter information:

Flutter 1.12.13+hotfix.7 β€’ channel stable β€’ https://github.com/flutter/flutter.git
Framework β€’ revision 9f5ff2306b (2 weeks ago) β€’ 2020-01-26 22:38:26 -0800
Engine β€’ revision a67792536c
Tools β€’ Dart 2.7.0

Minimum supported Gradle version is 6.5

Hi there,

Thanks for your library!
Lately I upgraded my project flutter and Android, and when building for release I'm getting this error:

`Build file '/.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.0-rc.2/android/build.gradle' line: 24

What went wrong:
A problem occurred evaluating root project 'biometric_storage'.

Failed to apply plugin [id 'com.android.internal.version-check']
Minimum supported Gradle version is 6.5. Current version is 5.4.1. If using the gradle wrapper, try editing the distributionUrl in /.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.0-rc.2/android/gradle/wrapper/gradle-wrapper.properties to gradle-6.5-all.zip`

Question - android prompt

Hi, is it possible to move the fingerprint prompt to the center of the screen like in the image attached?
Can we style the prompt?
Screenshot_20210824-223626

Does not work in iOS

Tried the following code, it write and read data, but it didn't ask use to do the touch ID
void _biometricHandler(BuildContext context) async {

final response = await BiometricStorage().canAuthenticate();
if (response == CanAuthenticateResponse.unsupported) {
  print("rip");
  errDialog(context, "This device do not support biometric");
  return;
} else {
  print("should support");
  print(response.toString());
}
_pkStorage = await BiometricStorage().getStorage(
  'pk',
  options: StorageFileInitOptions(
    authenticationValidityDurationSeconds: 30,
    authenticationRequired: true,
  ),
  promptInfo: const PromptInfo(
    iosPromptInfo: IosPromptInfo(
      saveTitle: 'Custom save title',
      accessTitle: 'Custom access title.',
    ),
  ),
);
await _pkStorage!.write("test1");
_getPk(_pkStorage!);

}

void _getPk(BiometricStorageFile bs) async {
// print("hi");

String? test = await bs.read();
print(test);

}

Error on Android build

Trying to build on Android and getting

e: /Users/marcogaletta/.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.0/android/src/main/kotlin/design/codeux/biometric_storage/BiometricStoragePlugin.kt: (275, 89): Unresolved reference: R
e: /Users/marcogaletta/.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.0/android/src/main/kotlin/design/codeux/biometric_storage/BiometricStoragePlugin.kt: (280, 51): Unresolved reference: R

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':biometric_storage:compileDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 59s
Exception: Gradle task assembleDevelopmentDebug failed with exit code 1

used ext.kotlin_version = '1.4.31' in build.gradle and added biometric_storage: ^3.0.0 to pubspec.
It builds on ios simulator but never prompt me the faceID popup.

Do you have any guess?

[android] - Problems with Android devices with face recognition

The _storageFile.write(...) method works perfectly for iOS and Android (with fingerprint), but on Android devices with face recognition I am getting this, when trying to write to store:

W/BiometricPrompt(19463): semSetExtraInfo: Tried to obtain display from a Context not associated with  one. Only visual Contexts (such as Activity or one created with Context#createWindowContext) or ones created with Context#createDisplayContext are associated with displays. Other types of Contexts are typically related to background entities and may return an arbitrary display.
I/BiometricPrompt(19463): onError: 12, 0
E/flutter (19463): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: AuthException{code: AuthExceptionCode.unknown, message: }
E/flutter (19463): #0      StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:597
E/flutter (19463): #1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:156
E/flutter (19463): <asynchronous suspension>
E/flutter (19463): #2      BiometricsController.setBiometricInformations
package:app/…/controller/biometrics_controller.dart:41
E/flutter (19463): <asynchronous suspension>
E/flutter (19463): #3      AuthFormState.saveBiometrics
package:app/…/widgets/auth_form.dart:77
E/flutter (19463): <asynchronous suspension>
E/flutter (19463): #4      AuthFormState.onSubmitButtonPressed.<anonymous closure>
package:app/…/widgets/auth_form.dart:134
E/flutter (19463): <asynchronous suspension>
E/flutter (19463):

Environment:

  • Android 11 (API 30)
  • Samsung Tab A7
  • Flutter Beta: 2.4.0*
  • biometric_storage: 2.0.3

Linux unauthenticated storage

[ERROR:flutter/lib/ui/ui_dart_state.cc(213)] Unhandled Exception: PlatformException(Bad Arguments, Linux plugin only supports non-authenticated secure storage, null, null)
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
<asynchronous suspension>
#2      MethodChannelBiometricStorage.getStorage (package:biometric_storage/src/biometric_storage.dart:271:22)
<asynchronous suspension>
#3      main (package:flow_app/main.dart:21:26)
<asynchronous suspension>

I get this error if I use await BiometricStorage().getStorage('key'). In the readme, there is No biometric authentication support. How can I get the storage without biometric authentication?

Enable setInvalidatedByBiometricEnrollment

Hello, I have a question, it is possible to enable setInvalidatedByBiometricEnrollment?

I need to use setInvalidatedByBiometricEnrollment(true) while generating key and the key gets invalidated on any new biometric enrollment. An exception is thrown when you try to use the same key. In this situation, you can reset the biometric app settings inside your app and start the process of enabling biometrics again.

protobuff exception on 0.3.4+4

Since I upgraded from 0.3.4 to 0.3.4+4 the following error began to appear during an android build.

So It's quite strange that in the changelog issue like this marked as fixed exact in the version 0.3.4+4.

[+8492 ms] FAILURE: Build failed with an exception.
[   +3 ms] * What went wrong:
[        ] Execution failed for task ':app:checkDevDebugDuplicateClasses'.
[        ] > 1 exception was raised by workers:
[        ]   java.lang.RuntimeException: Duplicate class com.google.protobuf.AbstractMessageLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.AbstractMessageLite$Builder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.AbstractMessageLite$Builder$LimitedInputStream found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.AbstractParser found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.AbstractProtobufList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.BooleanArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteBufferWriter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteOutput found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$ArraysByteArrayCopier found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$BoundedByteString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$ByteArrayCopier found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$ByteIterator found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$CodedBuilder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$LeafByteString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$LiteralByteString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$Output found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ByteString$SystemByteArrayCopier found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedInputStream found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream$AbstractBufferedEncoder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream$ArrayEncoder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream$ByteOutputEncoder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream$OutOfSpaceException found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.CodedOutputStream$OutputStreamEncoder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.DoubleArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ExperimentalApi found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ExtensionLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ExtensionRegistryFactory found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ExtensionRegistryLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ExtensionRegistryLite$ObjectIntPair found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.FieldSet found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.FieldSet$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.FieldSet$FieldDescriptorLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.FloatArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[   +1 ms]   Duplicate class com.google.protobuf.GeneratedMessageLite$Builder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$DefaultInstanceBasedParser found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableBuilder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableMessage found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableMessage$ExtensionWriter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableMessageOrBuilder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$ExtensionDescriptor found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$GeneratedExtension found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$MethodToInvoke found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.GeneratedMessageLite$SerializedForm found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.IntArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$BooleanList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$DoubleList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$EnumLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$EnumLiteMap found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$FloatList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$IntList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$ListAdapter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$ListAdapter$Converter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$LongList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$MapAdapter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$MapAdapter$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$MapAdapter$Converter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$MapAdapter$EntryAdapter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$MapAdapter$IteratorAdapter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$MapAdapter$SetAdapter found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Internal$ProtobufList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.InvalidProtocolBufferException found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyField found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyField$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyField$LazyEntry found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyField$LazyIterator found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyFieldLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyStringArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyStringArrayList$ByteArrayListView found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LazyStringArrayList$ByteStringListView found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[   +1 ms]   Duplicate class com.google.protobuf.LazyStringList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.LongArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MapEntryLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MapEntryLite$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MapEntryLite$Metadata found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MapFieldLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MessageLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MessageLite$Builder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MessageLiteOrBuilder found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MessageLiteToString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MutabilityOracle found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.MutabilityOracle$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.NioByteString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.NioByteString$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Parser found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ProtobufArrayList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.ProtocolStringList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.RopeByteString found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.RopeByteString$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.RopeByteString$Balancer found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.RopeByteString$PieceIterator found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.RopeByteString$RopeInputStream found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$EmptySet found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$EmptySet$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$EmptySet$2 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$Entry found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$EntryIterator found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.SmallSortedMap$EntrySet found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.TextFormatEscaper found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.TextFormatEscaper$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.TextFormatEscaper$2 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.TextFormatEscaper$ByteSequence found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UninitializedMessageException found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UnknownFieldSetLite found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UnmodifiableLazyStringList found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UnmodifiableLazyStringList$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UnmodifiableLazyStringList$2 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UnsafeUtil found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.UnsafeUtil$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Utf8 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Utf8$Processor found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Utf8$SafeProcessor found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Utf8$UnpairedSurrogateException found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.Utf8$UnsafeProcessor found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$FieldType found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$FieldType$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$FieldType$2 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$FieldType$3 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$FieldType$4 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$JavaType found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$Utf8Validation found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$Utf8Validation$1 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$Utf8Validation$2 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Duplicate class com.google.protobuf.WireFormat$Utf8Validation$3 found in modules protobuf-javalite-3.11.1.jar (com.google.protobuf:protobuf-javalite:3.11.1) and protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
[        ]   Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.
[        ] * Try:
[        ] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[        ] * Get more help at https://help.gradle.org
[        ] BUILD FAILED in 2m 2s

iOS Simulator FaceID never popups

FaceID is enrolled in Simulator settings

Code

final storage = await BiometricStorage().getStorage('test');

try {
  await storage.write('value');
} catch (e) {
  return console.error('biometric error: $e');
}

Error
PlatformException(SecurityError, Error while writing data: -25293: The user name or passphrase you entered is not correct., null, null)

[iOS] Plugin returns `success` when no biometric is set up

I am using the canAuthenticate method from this plugin to check whether any biometric security mechanism is enabled and setup. Despite the device only having a pin code setup, I still get a success back.

HOW TO REPRODUCE

  • Enable PIN code
  • Make sure that no biometric mechanism is enabled (e.g. FaceID)

I am then calling BiometricStorage::canAuthenticate.
I would expect to get back CanAuthenticateResponse.errorNoBiometricEnrolled but I am, instead, getting back CanAuthenticateResponse.success.

As far as I know, PIN code should not be considered a biometric security mechanism, hence the current behaviour could represent a bug.

DETAILS
Device: iPhone 12 mini
OS: iOS 14.8

Authenticated Option on Samsung device throws Exception

Greetings and thank you for creating this plugin!

I was able to get your example working (v1.1.0+1) while using the Biometric Authenticated option on my iPhone X (14.2) and my Pixel 3 (Android 11) just fine but on my Samsung S8+ (Android 9, One UI 1.0) when I write, it throws the following exception:

java.security.KeyStoreException: the master key android-keystore://default_authenticated_master_key exists but is unusable
java.security.KeyStoreException: the master key android-keystore://default_authenticated_master_key exists but is unusable
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:268)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:228)
at androidx.security.crypto.EncryptedFile$Builder.build(EncryptedFile.java:200)
at design.codeux.biometric_storage.BiometricStorageFile.buildEncryptedFile(BiometricStorageFile.kt:67)
at design.codeux.biometric_storage.BiometricStorageFile.writeFile(BiometricStorageFile.kt:73)
at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8$1.invoke(BiometricStoragePlugin.kt:195)
at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8$1.invoke(BiometricStoragePlugin.kt:76)
at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$4$1.invoke(BiometricStoragePlugin.kt:159)
at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$4$1.invoke(BiometricStoragePlugin.kt:76)
at design.codeux.biometric_storage.BiometricStoragePlugin$authenticate$prompt$1$onAuthenticationSucceeded$$inlined$ui$1.run(BiometricStoragePlugin.kt:290)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by: android.security.keystore.UserNotAuthenticatedException: User not authenticated
at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1233)
at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1331)
at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54)
at android.security.keystore.KeyStoreCryptoOperationUtils.getExceptionForCipherInit(KeyStoreCryptoOperationUtils.java:89)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:265)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109)
at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2984)
at javax.crypto.Cipher.tryCombinations(Cipher.java:2891)
at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2796)
at javax.crypto.Cipher.chooseProvider(Cipher.java:773)
at javax.crypto.Cipher.init(Cipher.java:1143)
at javax.crypto.Cipher.init(Cipher.java:1084)
at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt(AndroidKeystoreAesGcm.java:69)
at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead(AndroidKeystoreKmsClient.java:226)
at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead(AndroidKeystoreKmsClient.java:160)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:259)
... 16 more

Please advise.

Default Prompt Text

Hello,

It's possible to change the default prompt text? Current it's "Authenticate to Unlock Data".

Thanks

Android/iOS: Secure data still accesible after fingerprint added

Current behavior is that on adding/changing fingerprint/faceId the data securely stored is not deleted/invalidated. So basically anyone knows phone password can use app developed with this plugin, but it is not the same as knowing password/secret of the user of the app.

On new fingerprint added data securely stored must not be accessible (key invalidated).

Please fix, because of this issue I cannot see real difference between this Plugin and local_auth.

Latest 3.0.0 version fails on android

Latest version is throwing BiometricStoragePlugin.kt: (265, 21): Unresolved reference: androidBiometricOnly, which is probably just caused by this commit 48a0182f3bfea2a7e9c96bbdb1d027371c3449f1

Compiling on linux fails

Compiling an app that depends on biometric_storage fails on the latest master channel stable release with the following error message (on linux and I'd guess on macos as well):

dart_tool/flutter_build/generated_main.dart:47:9: Error: Undefined name 'Win32BiometricStoragePlugin'.
        Win32BiometricStoragePlugin.registerWith();
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^

I think this might be related to recent changes to dartPluginClass by flutter, so if you think this is flutter's bug and not yours feel free to close this issue :)

Exception when using pre release version - 3.0.0-rc.6

I/flutter (25078): login error: PlatformException(Unexpected Error, User not authenticated, android.security.keystore.UserNotAuthenticatedException: User not authenticated
I/flutter (25078): android.security.keystore.UserNotAuthenticatedException: User not authenticated
I/flutter (25078): at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1497)
I/flutter (25078): at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1539)
I/flutter (25078): at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54)
I/flutter (25078): at android.security.keystore.KeyStoreCryptoOperationUtils.getExceptionForCipherInit(KeyStoreCryptoOperationUtils.java:89)
I/flutter (25078): at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:265)
I/flutter (25078): at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109)
I/flutter (25078): at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2984)
I/flutter (25078): at javax.crypto.Cipher.tryCombinations(Cipher.java:2891)
I/flutter (25078): at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2796)
I/flutter (25078): at javax.crypto.Cipher.chooseProvider(Cipher.java:773)
I/flutter (25078): at javax.crypto.Cipher.init(Cipher.java:1143)
I/flutter (25078): at javax.crypto.Cipher.init(Cipher.java:1084)
I/flutter (25078): at design.codeux.biometric_storage.CryptographyManagerImpl.getInitializedCipherForEncryption(CryptographyManager.kt:94)
I/flutter (25078): at design.codeux.biometric_storage.BiometricStorageFile.cipherForEncrypt(BiometricStorageFile.kt:68)
I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$4.invoke(BiometricStoragePlugin.kt:154)
I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8.invoke(BiometricStoragePlugin.kt:198)
I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8.invoke(BiometricStoragePlugin.kt:88)
I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$3.invoke(BiometricStoragePlugin.kt:146)
I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin.onMethodCall(BiometricStoragePlugin.kt:198)
I/flutter (25078): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
I/flutter (25078): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
I/flutter (25078): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
I/flutter (25078): at android.os.MessageQueue.nativePollOnce(Native Method)
I/flutter (25078): at android.os.MessageQueue.next(MessageQueue.java:335)
I/flutter (25078): at android.os.Looper.loop(Looper.java:206)
I/flutter (25078): at android.app.ActivityThread.main(ActivityThread.java:8528)
I/flutter (25078): at java.lang.reflect.Method.invoke(Native Method)
I/flutter (25078): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
I/flutter (25078): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
I/flutter (25078): , null) - stack: #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7)
I/flutter (25078): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18)

Android build fails

Hi,

my build for android fails, I get the following output, do you have any ideas?

D:\work\flutter_leakagePro\android>gradlew clean build

Welcome to Gradle 6.7!

Here are the highlights of this release:

  • File system watching is ready for production use
  • Declare the version of Java your build requires
  • Java 15 support

For more details see https://docs.gradle.org/6.7/release-notes.html

Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details

Task :app:processDebugMainManifest
[androidx.test.espresso:espresso-core:3.2.0] C:\Users\marku.gradle\caches\transforms-2\files-2.1\b57e330d5fcdd60ce3b36badc90dc06f\espresso-core-3.2.0\AndroidManifest.xml Warning:
Package name 'androidx.test.espresso' used in: androidx.test.espresso:espresso-core:3.2.0, androidx.test.espresso:espresso-idling-resource:3.2.0.

Task :biometric_storage:kaptGenerateStubsDebugKotlin
w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/d22d204f3e998a9e7c9d88e394ac0ba5/jetified-kotlin-stdlib-jdk7-1.3.72.jar (version 1.3)
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/65c169ff90c96e3f402cb10ee8492979/jetified-kotlin-reflect-1.4.10.jar (version 1.4)
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/36887588733dfdc92602d11f3e7f2d2b/jetified-kotlin-stdlib-1.4.10.jar (version 1.4)
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/4abdcab0f6108d9fa2aabea9c8a14bec/jetified-kotlin-stdlib-common-1.4.10.jar (version 1.4)
w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath

Task :biometric_storage:kaptDebugKotlin FAILED
w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/d22d204f3e998a9e7c9d88e394ac0ba5/jetified-kotlin-stdlib-jdk7-1.3.72.jar (version 1.3)
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/65c169ff90c96e3f402cb10ee8492979/jetified-kotlin-reflect-1.4.10.jar (version 1.4)
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/36887588733dfdc92602d11f3e7f2d2b/jetified-kotlin-stdlib-1.4.10.jar (version 1.4)
C:/Users/marku/.gradle/caches/transforms-2/files-2.1/4abdcab0f6108d9fa2aabea9c8a14bec/jetified-kotlin-stdlib-common-1.4.10.jar (version 1.4)
w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath
e: [kapt] An exception occurred: java.lang.NoSuchMethodError: kotlin.jvm.internal.FunctionReferenceImpl.(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
at com.squareup.moshi.kotlin.codegen.api.ProguardConfig$writeTo$2$2.(ProguardRules.kt)
at com.squareup.moshi.kotlin.codegen.api.ProguardConfig$writeTo$2$2.(ProguardRules.kt)
at com.squareup.moshi.kotlin.codegen.api.ProguardConfig.writeTo(ProguardRules.kt:83)
at com.squareup.moshi.kotlin.codegen.api.ProguardConfig.writeTo(ProguardRules.kt:51)
at com.squareup.moshi.kotlin.codegen.JsonClassCodegenProcessor.process(JsonClassCodegenProcessor.kt:137)
at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:147)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:802)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:713)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1043)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1184)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:79)
at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:35)
at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:230)
at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:188)
at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:99)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:96)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:106)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:81)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:555)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:82)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:546)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:177)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:164)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:54)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:84)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:42)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1558)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':biometric_storage:kaptDebugKotlin'.

Compilation error. See log for more details

[iOS]: Can't build release app for iOS (with flavors)

v.4.0.0

When I build a release app without flavors it's working, but when i build an iOS Flutter App which is flavored, I cannot build my app.

The same flavors are also applied to another app with more complex structures like Unity and it's working πŸ˜…

Output:

Running pod install...                                             10,8s
Running Xcode build...                                                  
 └─Compiling, linking and signing...                         3,4s
Xcode build done.                                           49,0s
Failed to build iOS app
Error output from Xcode build:
↳
    objc[37535]: Class AMSupportURLConnectionDelegate is implemented in both /usr/lib/libamsupport.dylib (0x218ea3130) and
    /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x103a2c2c8). One of the two will be used. Which
    one is undefined.
    objc[37535]: Class AMSupportURLSession is implemented in both /usr/lib/libamsupport.dylib (0x218ea3180) and
    /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x103a2c318). One of the two will be used. Which
    one is undefined.
    ** BUILD FAILED **


Xcode's output:
↳
    /Users/rebar/Development/berformance/berformence-app/ios/Runner/GeneratedPluginRegistrant.m:12:9: fatal error: module 'biometric_storage' not
    found
    @import biometric_storage;
     ~~~~~~~^~~~~~~~~~~~~~~~~
    1 error generated.
    note: Using new build system
    note: Planning
    note: Build preparation complete
    note: Building targets in dependency order

Encountered error while building for device.

Is there anything to do for podspec file or so?

Permission error in linux

When I use flutter run -d linux -v, this error appears:

[        ] CMake Error at cmake_install.cmake:66 (file):
[   +1 ms]   file INSTALL cannot copy file
[        ]   "/home/codedoctor/Dokumente/Flow/app/build/linux/x64/debug/intermediates_do_not_run/app"
[        ]   to "/usr/local/app": Permission denied.

I use fedora on my machine

Mention required proguard configuration in README

Hi all,

I just tried to integrate this great package in freshly created flutter app with no other content.

I faced quite some problems getting it to build due to some java.lang.NoSuchMethodError: kotlin.jvm.internal.FunctionReferenceImpl.<init> exceptions during the build.

Gladly I remembered a similar problem I had that required to enable Proguard.

I saw that you have enabled Proguard as well in this commit:
b37f0d7

Maybe this information should be added to the README.

Looking forward to your comments.

Benjamin

When restarting got a Storage xxxxx was not initialized

Hello there,

I can create a storage on android emulator. Write/read on it.

I then restart the application and want to read from the storage but get a storage not initialized error.

Did someone else experience this ?


flutter doctor -v
[βœ“] Flutter (Channel stable, 3.0.3, on macOS 12.4 21F79 darwin-arm, locale en-FR)
β€’ Flutter version 3.0.3 at /opt/homebrew/Caskroom/flutter/3.0.3/flutter
β€’ Upstream repository https://github.com/flutter/flutter.git
β€’ Framework revision 676cefaaff (9 days ago), 2022-06-22 11:34:49 -0700
β€’ Engine revision ffe7b86a1e
β€’ Dart version 2.17.5
β€’ DevTools version 2.12.2

[βœ“] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc1)
β€’ Android SDK at /Users/nicolasthomas/Library/Android/sdk
β€’ Platform android-33, build-tools 33.0.0-rc1
β€’ Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
β€’ Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
β€’ All Android licenses accepted.

[βœ“] Xcode - develop for iOS and macOS (Xcode 13.4.1)
β€’ Xcode at /Applications/Xcode.app/Contents/Developer
β€’ CocoaPods version 1.11.3

[βœ“] Chrome - develop for the web
β€’ Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[βœ“] Android Studio (version 2021.2)
β€’ Android Studio at /Applications/Android Studio.app/Contents
β€’ Flutter plugin can be installed from:
πŸ”¨ https://plugins.jetbrains.com/plugin/9212-flutter
β€’ Dart plugin can be installed from:
πŸ”¨ https://plugins.jetbrains.com/plugin/6351-dart
β€’ Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[βœ“] VS Code (version 1.68.1)
β€’ VS Code at /Applications/Visual Studio Code.app/Contents
β€’ Flutter extension version 3.42.0

[βœ“] Connected device (3 available)
β€’ sdk gphone64 arm64 (mobile) β€’ emulator-5554 β€’ android-arm64 β€’ Android 12 (API 32) (emulator)
β€’ macOS (desktop) β€’ macos β€’ darwin-arm64 β€’ macOS 12.4 21F79 darwin-arm
β€’ Chrome (web) β€’ chrome β€’ web-javascript β€’ Google Chrome 103.0.5060.53

[βœ“] HTTP Host Availability
β€’ All required HTTP hosts are available

Clarify what "not massive amounts of data" means

This is kind of vague on what you mean by this. Does this mean you shouldn't treat it as a database? Does this mean you shouldn't store large files? What does this mean exactly and why.

Thanks

Unable to delete storage without biometric

Hi there,
I'm not sure if it's a bug or feature but when I create a secure storage like:

_customPrompt = await BiometricStorage().getStorage( '${baseName}_customPrompt', options: StorageFileInitOptions( authenticationValidityDurationSeconds: 30), androidPromptInfo: const AndroidPromptInfo( title: 'Custom title', subtitle: 'Custom subtitle', description: 'Custom description', negativeButton: 'Nope!', ));

I wish to write and read with the fingerprint ofcourse, but when I log out from my app, I wish to delete the token I saved, and then I call _customPrompt.delete(), but the fingerprint is not necessary, but it still pops up, which doesn't make any sense in that case.
What should I do?

Documentation missing

At first: thank you for your plugin and your work here! Awesome!

But you're totally lost, if you want to integrate this plugin into your project!

The example is too much and too specific!

There's no proper documentation in the readme on how to easily use this package!

What are the API's? What are the important functions and what do they do?

It would be great if we have a documentation here, because honestly: I don't know how to start with this plugin.

For example see: https://pub.dev/packages/local_auth

Android Lock Code with no fingerprint

Hi, first of all thanks for your effort, I am using this package in my production app.

I have a question, would it be possible to authenticate user on Android when there is no fingerprint but the pass code/ pattern is set?

I am currently getting CanAuthenticateResponse.errorNoBiometricEnrolled

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.