Skip to content

[Bug]: share_plus performs disk writes on main thread in Android implementation #3770

@alverone

Description

@alverone

Platform

Android 16

Plugin

share_plus

Version

12.0.1

Flutter SDK

3.41.2

Steps to reproduce

Native Android implementation of share_plus is performing IO operations on main thread, which is consequently flagged when running with a StrictMode.ThreadPolicy set.

This issue can be reproduced by executing any call to SharePlus.instance.share even when supplying non-file parameters since native implementation always starts with clearing share cache folder.

A demo with enabled StrictMode is available at https://github.com/alverone/share_plus_main_thread_io.

Steps to reproduce:

  1. Enable StrictPolicy in native FlutterActivity or Application classes.
  2. Run the application in debug mode.
  3. Enter text into the 'Share text' field.
  4. Tap the 'Share' button.
  5. Inspect logs for StrictMode violations.

Logs

Example of the warning and an offending stack trace produced by StrictMode:

D/StrictMode(23831): StrictMode policy violation; ~duration=27 ms: android.os.strictmode.DiskReadViolation
D/StrictMode(23831): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1728)
D/StrictMode(23831): 	at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
D/StrictMode(23831): 	at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
D/StrictMode(23831): 	at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:8944)
D/StrictMode(23831): 	at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:332)
D/StrictMode(23831): 	at java.io.File.exists(File.java:829)
D/StrictMode(23831): 	at android.app.ContextImpl.getDataDir(ContextImpl.java:3347)
D/StrictMode(23831): 	at android.app.ContextImpl.getCacheDir(ContextImpl.java:923)
D/StrictMode(23831): 	at android.content.ContextWrapper.getCacheDir(ContextWrapper.java:328)
D/StrictMode(23831): 	at dev.fluttercommunity.plus.share.Share.getShareCacheFolder(Share.kt:29)
D/StrictMode(23831): 	at dev.fluttercommunity.plus.share.Share.clearShareCacheFolder(Share.kt:230)
D/StrictMode(23831): 	at dev.fluttercommunity.plus.share.Share.share(Share.kt:60)
D/StrictMode(23831): 	at dev.fluttercommunity.plus.share.MethodCallHandler.onMethodCall(MethodCallHandler.kt:26)
D/StrictMode(23831): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267)
D/StrictMode(23831): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:286)
D/StrictMode(23831): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:313)
D/StrictMode(23831): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
D/StrictMode(23831): 	at android.os.Handler.handleCallback(Handler.java:995)
D/StrictMode(23831): 	at android.os.Handler.dispatchMessage(Handler.java:103)
D/StrictMode(23831): 	at android.os.Looper.loopOnce(Looper.java:248)
D/StrictMode(23831): 	at android.os.Looper.loop(Looper.java:338)
D/StrictMode(23831): 	at android.app.ActivityThread.main(ActivityThread.java:9067)
D/StrictMode(23831): 	at java.lang.reflect.Method.invoke(Native Method)
D/StrictMode(23831): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
D/StrictMode(23831): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)

Flutter Doctor

fvm flutter doctor -v
[✓] Flutter (Channel stable, 3.41.2, on macOS 26.3 25D125 darwin-arm64, locale en-GB) [1,051ms]
    • Flutter version 3.41.2 on channel stable at /Users/artem/fvm/versions/3.41.2
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 90673a4eef (2 weeks ago), 2026-02-18 13:54:59 -0800
    • Engine revision 6c0baaebf7
    • Dart version 3.11.0
    • DevTools version 2.54.1
    • Feature flags: no-enable-web, no-enable-linux-desktop, no-enable-macos-desktop,
      no-enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets,
      omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration

[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0-rc1) [2.4s]
    • Android SDK at /Users/artem/Library/Android/sdk
    • Emulator version 36.4.9.0 (build_id 14788078) (CL:N/A)
    • Platform android-36.1, build-tools 36.1.0-rc1
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
      This JDK is specified in your Flutter configuration.
      To change the current JDK, run: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 21.0.9+-14649483-b1163.86)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 26.3) [2.4s]
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 17C529
    • CocoaPods version 1.16.2

[✓] Connected device (1 available) [6.4s]
    • sdk gphone64 arm64 (mobile)            • emulator-5554             • android-arm64 • Android
      16 (API 36) (emulator)

[✓] Network resources [220ms]
    • All expected network resources are available.

• No issues found!

Checklist before submitting a bug

  • I searched issues in this repository and couldn't find such bug/problem
  • I Google'd a solution and I couldn't find it
  • I searched on StackOverflow for a solution and I couldn't find it
  • I read the README.md file of the plugin
  • I'm using the latest version of the plugin
  • All dependencies are up to date with flutter pub upgrade
  • I did a flutter clean
  • I tried running the example project

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions