moberwasserlechner / capacitor-filesharer Goto Github PK
View Code? Open in Web Editor NEWCapacitor plugin to download and share files for the Web, Android and iOS! Stop the war in Ukraine!
License: MIT License
Capacitor plugin to download and share files for the Web, Android and iOS! Stop the war in Ukraine!
License: MIT License
After upgrading this happens in Android Studio when trying to generate the APK.
Executing tasks: [:app:bundleRelease]
> Configure project :app
google-services.json not found, google-services plugin not applied. Push Notifications won't work
> Configure project :capacitor-android
WARNING: API 'variant.getJavaCompiler()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variant.getJavaCompiler(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variantOutput.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
> Task :app:preBuild UP-TO-DATE
> Task :byteowls-capacitor-filesharer:preBuild UP-TO-DATE
> Task :byteowls-capacitor-filesharer:preReleaseBuild UP-TO-DATE
> Task :byteowls-capacitor-filesharer:checkReleaseManifest
> Task :byteowls-capacitor-filesharer:processReleaseManifest
> Task :capacitor-android:preBuild UP-TO-DATE
> Task :capacitor-android:preReleaseBuild UP-TO-DATE
> Task :capacitor-android:checkReleaseManifest
> Task :capacitor-android:processReleaseManifest
> Task :capacitor-cordova-android-plugins:preBuild UP-TO-DATE
> Task :capacitor-cordova-android-plugins:preReleaseBuild UP-TO-DATE
> Task :capacitor-cordova-android-plugins:checkReleaseManifest
> Task :capacitor-cordova-android-plugins:processReleaseManifest
> Task :app:preReleaseBuild
> Task :byteowls-capacitor-filesharer:packageReleaseRenderscript NO-SOURCE
> Task :capacitor-cordova-android-plugins:packageReleaseRenderscript NO-SOURCE
> Task :app:compileReleaseRenderscript
> Task :app:generateReleaseResValues
> Task :app:generateReleaseResources
> Task :capacitor-android:packageReleaseRenderscript NO-SOURCE
> Task :byteowls-capacitor-filesharer:compileReleaseRenderscript
> Task :byteowls-capacitor-filesharer:generateReleaseResValues
> Task :byteowls-capacitor-filesharer:generateReleaseResources
> Task :byteowls-capacitor-filesharer:packageReleaseResources
> Task :capacitor-android:compileReleaseRenderscript
> Task :capacitor-android:generateReleaseResValues
> Task :capacitor-android:generateReleaseResources
> Task :capacitor-android:packageReleaseResources
> Task :capacitor-cordova-android-plugins:compileReleaseRenderscript
> Task :capacitor-cordova-android-plugins:generateReleaseResValues
> Task :capacitor-cordova-android-plugins:generateReleaseResources
> Task :capacitor-cordova-android-plugins:packageReleaseResources
> Task :app:mergeReleaseResources
> Task :app:checkReleaseManifest
> Task :app:createReleaseCompatibleScreenManifests
> Task :app:mainApkListPersistenceRelease
> Task :app:processReleaseManifest
> Task :app:bundleReleaseResources
> Task :app:mergeReleaseShaders
> Task :app:compileReleaseShaders
> Task :app:generateReleaseAssets
> Task :byteowls-capacitor-filesharer:mergeReleaseShaders
> Task :byteowls-capacitor-filesharer:compileReleaseShaders
> Task :byteowls-capacitor-filesharer:generateReleaseAssets
> Task :byteowls-capacitor-filesharer:packageReleaseAssets
> Task :capacitor-android:mergeReleaseShaders
> Task :capacitor-android:compileReleaseShaders
> Task :capacitor-android:generateReleaseAssets
> Task :capacitor-android:packageReleaseAssets
> Task :capacitor-cordova-android-plugins:mergeReleaseShaders
> Task :capacitor-cordova-android-plugins:compileReleaseShaders
> Task :capacitor-cordova-android-plugins:generateReleaseAssets
> Task :capacitor-cordova-android-plugins:packageReleaseAssets
> Task :app:mergeReleaseAssets
> Task :capacitor-android:compileReleaseAidl NO-SOURCE
> Task :byteowls-capacitor-filesharer:compileReleaseAidl NO-SOURCE
> Task :capacitor-cordova-android-plugins:compileReleaseAidl NO-SOURCE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :app:generateReleaseBuildConfig
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:generateReleaseSources
> Task :byteowls-capacitor-filesharer:generateReleaseBuildConfig
> Task :capacitor-android:generateReleaseRFile
> Task :byteowls-capacitor-filesharer:generateReleaseRFile
> Task :byteowls-capacitor-filesharer:prepareLintJar UP-TO-DATE
> Task :byteowls-capacitor-filesharer:generateReleaseSources
> Task :capacitor-android:generateReleaseBuildConfig
> Task :capacitor-android:prepareLintJar UP-TO-DATE
> Task :capacitor-android:generateReleaseSources
> Task :capacitor-android:javaPreCompileRelease
> Task :capacitor-android:compileReleaseJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
> Task :capacitor-android:processReleaseJavaRes NO-SOURCE
> Task :capacitor-android:transformClassesAndResourcesWithPrepareIntermediateJarsForRelease
> Task :byteowls-capacitor-filesharer:javaPreCompileRelease
> Task :byteowls-capacitor-filesharer:compileReleaseJavaWithJavac
Note: /Users/yser/Code/foobar/app/node_modules/@byteowls/capacitor-filesharer/android/src/main/java/com/byteowls/capacitor/filesharer/ConfigUtils.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :byteowls-capacitor-filesharer:processReleaseJavaRes NO-SOURCE
> Task :byteowls-capacitor-filesharer:transformClassesAndResourcesWithPrepareIntermediateJarsForRelease
> Task :capacitor-cordova-android-plugins:generateReleaseBuildConfig
> Task :capacitor-cordova-android-plugins:generateReleaseRFile
> Task :capacitor-cordova-android-plugins:prepareLintJar UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateReleaseSources
> Task :capacitor-cordova-android-plugins:javaPreCompileRelease
> Task :capacitor-cordova-android-plugins:compileReleaseJavaWithJavac
> Task :capacitor-cordova-android-plugins:processReleaseJavaRes NO-SOURCE
> Task :capacitor-cordova-android-plugins:transformClassesAndResourcesWithPrepareIntermediateJarsForRelease
> Task :app:javaPreCompileRelease
> Task :app:processReleaseResources
> Task :app:compileReleaseJavaWithJavac
> Task :app:transformClassesWithDexBuilderForRelease
> Task :app:transformDexArchiveWithExternalLibsDexMergerForRelease
AGPBI: {"kind":"error","text":"Program type already present: com.getcapacitor.AndroidProtocolHandler","sources":[{}],"tool":"D8"}
> Task :app:transformDexArchiveWithDexMergerForRelease FAILED
java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.getcapacitor.AndroidProtocolHandler
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:407)
at com.android.build.gradle.internal.transforms.DexMergerTransform.transform(DexMergerTransform.java:240)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
at sun.reflect.GeneratedMethodAccessor328.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.getcapacitor.AndroidProtocolHandler
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1431)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.getcapacitor.AndroidProtocolHandler
at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:131)
at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:118)
at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:102)
at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:37)
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
... 4 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:70)
at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:43)
at com.android.tools.r8.D8.run(D8.java:94)
at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:116)
... 7 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Program type already present: com.getcapacitor.AndroidProtocolHandler
at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:89)
at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:60)
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:64)
... 10 more
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformDexArchiveWithDexMergerForRelease'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.getcapacitor.AndroidProtocolHandler
* 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
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 9s
62 actionable tasks: 58 executed, 4 up-to-date
I have blob zip file, which I want to share , but I don't know how to convert the blob file into a base64 data.
is it possible in Filesharer to send files directly and not as a base 64 Data. ???
From the crash reports in Google Play Console, I regularly see a NullPointerException in this Plugin.
@capacitor/cli 2.3.0
@capacitor/android 2.3.0
@capacitor/core 2.3.0
@capacitor/ios 2.3.0
@capacitor/electron not installed
java.lang.RuntimeException:
at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4053)
at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:4085)
at android.app.servertransaction.ResumeActivityItem.execute (ResumeActivityItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1984)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:216)
at android.app.ActivityThread.main (ActivityThread.java:7211)
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:975)
Caused by: java.lang.RuntimeException:
at android.app.ActivityThread.deliverResults (ActivityThread.java:4683)
at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4042)
Caused by: java.lang.NullPointerException:
at com.byteowls.capacitor.filesharer.FileSharerPlugin.handleOnActivityResult (FileSharerPlugin.java:110)
at com.getcapacitor.Bridge.onActivityResult (Bridge.java:771)
at com.getcapacitor.BridgeActivity.onActivityResult (BridgeActivity.java:216)
at android.app.Activity.dispatchActivityResult (Activity.java:7806)
at android.app.ActivityThread.deliverResults (ActivityThread.java:4676)
It seems like the PluginCall returned from getSavedCall() can be null. Is this a known issue? Do you know how this situation can occur?
{
import {Plugins} from '@capacitor/core';
const {Share} = Plugins;
Plugins.FileSharer.share({
filename: "mindlib-export.opml",
base64Data: btoa(unescape(encodeURIComponent(result))),
contentType: "text/plain",
}) ...
}
I am testing on Android 10 and I don't see the option to Save or Download the shared photo to my photo library. It is available in iOS though.
Is it related to permission?
FYI, I have granted Camera and Photos permissions using the Capacitor Camera plugin and have the READ_EXTERNAL_STORAGE & WRITE_EXTERNAL_STORAGE lines in AndroidManifest.xml.
Run npx cap doctor
:
@capacitor/cli: 4.7.0
@capacitor/core: 4.7.1
@capacitor/android: 4.7.1
@capacitor/ios: 4.7.1
{
filename: `photo-${this.activePhoto.id}.jpg`,
base64Data: this.activePhotoBase64,
contentType: "image/jpg",
}
Currently the plugin is not usable with Capacitor 2.x, if only transitive dependencies from Cap are used because of AndroidX.
Plus migration to Swift 5.
Run npx cap doctor
:
@capacitor/cli 2.4.2
@capacitor/core 2.4.2
@capacitor/android 2.4.2
{
"name": "dilemma",
"version": "0.0.1",
"author": "Ionic Framework",
"homepage": "https://ionicframework.com/",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/common": "~10.0.0",
"@angular/core": "~10.0.0",
"@angular/fire": "^6.0.3",
"@angular/forms": "~10.0.0",
"@angular/platform-browser": "~10.0.0",
"@angular/platform-browser-dynamic": "~10.0.0",
"@angular/router": "~10.0.0",
"@byteowls/capacitor-filesharer": "^2.0.0",
"@capacitor/android": "^2.4.2",
"@capacitor/core": "2.4.2",
"@codetrix-studio/capacitor-google-auth": "^2.1.1",
"@ionic-native/core": "^5.0.0",
"@ionic-native/google-plus": "^5.28.0",
"@ionic-native/social-sharing": "^5.28.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^5.0.0",
"angularfire2": "^5.4.2",
"axios": "^0.20.0",
"capacitor-firebase-auth": "^2.3.2",
"cordova-plugin-x-socialsharing": "^6.0.2",
"es6-promise-plugin": "^4.2.2",
"firebase": "^7.22.1",
"rxjs": "~6.5.5",
"tslib": "^2.0.0",
"zone.js": "~0.10.3"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.1000.0",
"@angular/cli": "~10.0.5",
"@angular/compiler": "~10.0.0",
"@angular/compiler-cli": "~10.0.0",
"@angular/language-service": "~10.0.0",
"@capacitor/cli": "2.4.2",
"@ionic/angular-toolkit": "^2.3.0",
"@types/jasmine": "~3.5.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.5.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~3.3.0",
"karma-jasmine-html-reporter": "^1.5.0",
"protractor": "~7.0.0",
"ts-node": "~8.3.0",
"tslint": "~6.1.0",
"typescript": "~3.9.5"
},
"description": "An Ionic project",
"browser": {
"fs": false,
"path": false,
"os": false
}
}
I am able to share files on WhatsApp without any problems except that after sharing the file if you press back, you don't get back to the app. The app has to be restarted.
Upon successful sharing of file on whatApp and then clicking on android back button , user should get back to the app. The app shouldnt crash and should be have to be started again.
Plugins.FileSharer.share({
filename: "test2.jpg",
text:"www.xyz.com",
base64Data: imageBase64 ,
contentType: "image/jpeg",
}).then(() => {
// empty
}).catch(error => {
console.error("File sharing failed", error.message);
});
Just share a picture via whatsapp and then get back to the app. You would find that it gets restarted.
The following error gets logged in android studio console as soon as you click share:
E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.byteowls.capacitor.filesharer.FileSharerProvider uri content://io.ionic.starter.filesharer.fileprovider/capfilesharer/test2.jpg from pid=14504, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:820)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:684)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:674)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:548)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:327)
at android.os.Binder.execTransactInternal(Binder.java:1154)
at android.os.Binder.execTransact(Binder.java:1123)
Create a next version for use it in next Capacitor 3.0.0
I had issues with the android app crashing once the target app was chosen, with an error like this, even though the target app successfully got the image:
2019-09-22 15:11:26.442 5306-5306/com.ktrajkovski.gifer E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 4346876)
...
2019-09-22 15:11:27.822 5306-5306/com.ktrajkovski.gifer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ktrajkovski.gifer, PID: 5306
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 4346876 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3950)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: android.os.TransactionTooLargeException: data parcel size 4346876 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:764)
at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4623)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934)
Solved it by adding:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.clear();
}
to the main activity.
Hope someone with the same issue finds this useful. Perhaps this should also be added to the readme
Using capacitor-filesharer in an Angular application produces the following output during the building process:
...\@byteowls\capacitor-filesharer\dist\esm\web.js depends on 'file-saver'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies
This is because there is a dependency on file-sharer which uses the CommonJS syntax.
Replace the dependency of file-sharer to file-sharer-es in order to use ES modules syntax.
None
None
None
Run npx cap doctor
:
๐ Capacitor Doctor ๐
Latest Dependencies:
@capacitor/cli: 4.1.0
@capacitor/core: 4.1.0
@capacitor/android: 4.1.0
@capacitor/ios: 4.1.0
Installed Dependencies:
@capacitor/ios: not installed
@capacitor/cli: 3.6.0
@capacitor/core: 3.6.0
@capacitor/android: 3.6.0
[success] iOS looking great! ๐
[success] Android looking great! ๐
App crashes with Java error while trying to open the FileShare popup on a native device or AVD.
This is before being able to choose the app to share the file with, the dialog simply won't open.
In Android Studio + the web console, the only error that's being shown is as follows:
E/Capacitor/Console: File: http://localhost/ - Line 316 - Msg: Error: Java exception was raised during method invocation
There doesn't seem to be more info than this, or it's just me not knowing how to get to that point.
The dialog to open.
Try sharing this large PDF while on a device or AVD.
Android:
When sharing screen appears:
Share to ex Whatsapp, it opens whatsapp, after getting back to app it restarts ( crash)
ionic 6, latest Capacitor
-- Update:
I use Base64 Data. with a small PDF file it seems to work OK. < 50 kb. But larger get these error:
Shutting down VM
2022-10-17 15:20:19.868 13960-13960/com.ip.infraphoto E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ip.infraphoto, PID: 13960
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1639160 bytes
at android.app.ActivityClient.activityStopped(ActivityClient.java:86)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:143)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: android.os.TransactionTooLargeException: data parcel size 1639160 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:635)
at android.app.IActivityClientController$Stub$Proxy.activityStopped(IActivityClientController.java:1358)
at android.app.ActivityClient.activityStopped(ActivityClient.java:83)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:143)ย
at android.os.Handler.handleCallback(Handler.java:938)ย
at android.os.Handler.dispatchMessage(Handler.java:99)ย
at android.os.Looper.loopOnce(Looper.java:226)ย
at android.os.Looper.loop(Looper.java:313)ย
at android.app.ActivityThread.main(ActivityThread.java:8663)ย
at java.lang.reflect.Method.invoke(Native Method)ย
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)ย
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)ย
2022-10-17 15:20:19.905 13960-13960/com.ip.infraphoto I/Process: Sending signal. PID: 13960 SIG: 9
2022-10-17 15:20:28.797 15769-15769/? I/m.ip.infraphot: Late-enabling -Xcheck:jni
2022-10-17 15:20:28.973 15769-15769/? E/USNET: USNET: appName: com.ip.infraphoto
2022-10-17 15:20:28.976 15769-15769/? D/ProcessState: Binder ioctl to enable oneway sp
I am using Filesharer in my Ionic 5 app. But It is not working.
I have used breakpoints in the code and found out that, the code is not able to reach after Filereader.onloadend =() => {
and after. This is the reason I am not able to use the plugin in my app.
Please help.
Latest Dependencies:
@capacitor/cli: 2.2.1
@capacitor/core: 2.2.1
@capacitor/android: 2.2.1
@capacitor/electron: 2.2.1
@capacitor/ios: 2.2.1
Installed Dependencies:
@capacitor/electron not installed
@capacitor/cli 2.0.2
@capacitor/android 2.0.2
@capacitor/ios 2.0.2
@capacitor/core 2.0.2
[success] Android looking great! ๐
Found 5 Capacitor plugins for ios:
@byteowls/capacitor-filesharer (2.0.0)
cordova-plugin-actionsheet (2.3.3)
cordova-plugin-badge (0.8.8)
cordova-plugin-dialogs (2.0.2)
uk.co.workingedge.phonegap.plugin.launchnavigator (5.0.4)
[success] iOS looking great! ๐
FileSharer.share({
filename: file.name, // contains "invoice_0002.pdf"
base64Data: base64, // verified that this contains valid base64 encoded data
contentType: file.type, // contains "application/pdf"
}).catch(error => {
console.error('File sharing failed', error.message);
});
When I invoke the plugin, the PDF file gets displayed in some sort of PDF preview UI instead of the Share activity modal.
The PDF renders as expected, which means the data itself is OK but somehow there's no Share modal at all and there's also no way to close that preview panel.
I would have expected the Share modal to be displayed as such: https://youtu.be/p7f6yamZxCk?t=762
See above.
The iOS logs are only showing this:
WebView loaded
Capacitor Doctor
Latest Dependencies:
@capacitor/cli: 5.6.0
@capacitor/core: 5.6.0
@capacitor/android: 5.6.0
@capacitor/ios: 5.6.0
Installed Dependencies:
@capacitor/cli: 4.6.1
@capacitor/core: 4.7.1
@capacitor/android: 4.8.0
@capacitor/ios: 4.6.1
[success] Android looking great! ๐
[error] Xcode is not installed
{
import { FileSharer, type ShareFileOptions } from '@byteowls/capacitor-filesharer';
public async shareFile(fileUrl:string, shareFilename:string, contentType: string) {
try {
const copyOfSharedFile = await Filesystem.copy({
from: fileUrl!,
to: shareFilename,
toDirectory: Directory.Data
});
const base64FileContents = await this.readFileAsBase64(copyOfSharedFile );
if(base64FileContents === null || base64FileContents.length === 0){
throw new Error('Error sharing file. Unable to readFileAsBase64');
}
const shareOptions: ShareFileOptions = {filename: shareFilename, contentType:contentType, path:copyOfSharedFile.uri, base64Data:base64FileContents};
await FileSharer.share(shareOptions);
await Filesystem.deleteFile({path: copyOfSharedFile.uri, directory:Directory.Data});
} catch (error) {
const errMsg = <string> error;
if(errMsg == 'USER_CANCELLED'){
toastr.info('Cancelled');
return;
}
throw new Error('Error sharing log file:' + <string> error);
}
}
async readFileAsBase64(file: CopyResult): Promise<string> {
try {
const fileStat = await Filesystem.stat({
path: file.uri,
});
if (!fileStat || !fileStat.size) {
throw new Error ('Error sharing file: file does not exist or is empty.');
}
const fileData = await Filesystem.readFile({ path: file.uri });
if (!fileData || !fileData.data) {
throw new Error('Error sharing file: Unable to read file data.');
}
return fileData.data;//base64
} catch (error) {
const errMsg = <string> error;
throw new Error(errMsg);
}
}
}
A sqlite db is copied to a backup file and the backup file is shared. This works. However, when reviewing the Android LogCat is see:
Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.byteowls.capacitor.filesharer.FileSharerProvider uri content://com.xxx.yyy.zzz.filesharer.fileprovider/capfilesharer/myLog-20231227-093441.db from pid=14783, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:918)
at android.content.ContentProvider.semEnforceReadPermission(ContentProvider.java:836)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:712)
at android.content.ContentProvider$Transport.query(ContentProvider.java:251)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:107)
at android.os.Binder.execTransactInternal(Binder.java:1316)
at android.os.Binder.execTransact(Binder.java:1280)
2023-12-27 09:34:43.039 14783-14783 ChooserActivity android:ui W Could not load (content://com.xxx.yyy.zzz.filesharer.fileprovider/capfilesharer/myLog-20231227-093441.db) thumbnail/name for preview. If desired, consider using Intent#createChooser to launch the ChooserActivity, and set your Intent's clipData and flags in accordance with that method's documentation
2023-12-27 09:34:43.044 14502-14521 DatabaseUtils com.xxx.yyy.zzz E Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.byteowls.capacitor.filesharer.FileSharerProvider uri content://com.xxx.yyy.zzz.filesharer.fileprovider/capfilesharer/myLog-20231227-093441.db from pid=14783, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:918)
at android.content.ContentProvider.semEnforceReadPermission(ContentProvider.java:836)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:712)
at android.content.ContentProvider$Transport.query(ContentProvider.java:251)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:107)
at android.os.Binder.execTransactInternal(Binder.java:1316)
at android.os.Binder.execTransact(Binder.java:1280)
No errors in logcat.
see above
share a file on Android, review the logcat in Android Studio.
I dont think I need to add grantUriPermission in my app... but maybe.
I'd like to be able to share a text, csv and/or json file, but that currently doesn't look possible.
The ability to also share text, csv and/or json files.
Since I'm already using your plugin to share images, I'd prefer to use it to share/export text files as well. I know there are ways to get this done with similar plugins, but I'd rather use yours.
FileSharer.share({
filename: 'filename.txt',
base64Data: 'file content',
contentType: 'text',
});
I'm currently using capacitor 2
Hello @moberwasserlechner ,
I have a bug with PushNotifications on Android, when I receive a notification, the app detect it and go inside of the listener, but it's empty (data field is empty).
The problem appears when capacitor-filesharer is installed (just installed with npm, not used).
If I remove "@byteowls/capacitor-filesharer": "^1.0.0-beta.1" from package.json, it fixes the bug.
This includes upgrading the plugin to the latest structure as well:
By looking at a newly generated plugin there where a few changes.
Core:
capacitor/core
with capacitor/android
and capacitor/ios
import { registerWebPlugin } from '@capacitor/core';
registerWebPlugin(FileSharer);
This did not work in the betas but should be fixed now. The workaround in the app.component.ts can be removed because the plugin is already registered.
Android:
/android/
and remove subfolders @byteowls/capacitor-.../
. The subfolders were needed in the past but not anymoresettings.gradle
from the generated project because the capacitor/android from node_modules is usedimplementation 'ionic-team:capacitor-android:1.0.0-beta.17' with a project dependeny
implementation project(':capacitor-android')`android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Run npx cap doctor
:
Latest Dependencies:
@capacitor/cli: 4.7.1
@capacitor/core: 4.7.1
@capacitor/android: 4.7.1
@capacitor/ios: 4.7.1
Installed Dependencies:
@capacitor/cli: 4.7.0
@capacitor/core: 4.7.0
@capacitor/android: 4.7.0
@capacitor/ios: 4.7.0
Share dialog won't show Instagram , but shows WhatsApp , when I try to share the same image from withing email or WhatsApp instagram appears normally
Instagram should be displayed on the share dialog
Everything is default
call the share dialog in a phone with instagram installed
const handleShare = (m) => {
async function share() {
if (!url.match(/^[a-zA-Z]+:\/\//)) {
url = "http://" + url;
}
let nurl = url.replace(/^(https?:\/\/)?(www\.)?/i, "$1www.") ;
await fetch(nurl)
.then(res => {
return res.blob()
})
.then(blob => {
return blob.arrayBuffer();
})
.then(ab => {
const uint8Array = new Uint8Array(ab);
var chunkSize = 1024;
var str = '';
for (var i = 0; i < uint8Array.length; i += chunkSize) {
var chunk = uint8Array.subarray(i, i + chunkSize);
str += String.fromCharCode.apply(null, chunk);
}
var base64String = btoa(str);
FileSharer.share({
filename: name,
contentType: "application/png",
base64Data: base64String,
}).catch(error => {
//alert("File sharing failed" + error.message);
console.error("File sharing failed", error.message);
});
})
.catch((error) => {
alert(error);
});
}
share();
}
Hi,
I'm trying the following code on iOS:
sharePhoto() {
var self = this;
var img = document.getElementById('photo').attr('src');
FileSharer.share({
filename: Math.random()+"_pic.png",
base64Data: img.replace('data:image/png;base64', '').replace('image/png;base64', ''),
contentType: "image/png",
}).then(() => {
alert('DONE');
}).catch(error => {
console.error("File sharing failed:", error.message);
});
},
I'm 100% the picture is correct, because it's shown correctly on the image src.
But it always gives me: โก๏ธ [error] - File sharing failed: The string contains invalid characters.
And when I do:
base64Data: img.replace('data:image/png;base64', '').replace('image/png;base64', '').replace(/\s/g, ''),
It gives me: ERR_PARAM_DATA_INVALID
Failure [INSTALL_FAILED_CONFLICTING_PROVIDER: Scanning Failed.: Can't install because provider name com.byteowls.capacitor.filesharer.fileprovider (in package com.example.app) is already used by com.example.app.dev]
maybe this fork has resolved this issue, can it be merged? jpxd@87c3c48
This is a problem of file-saver and Safari but maybe I can workaround that by storing the file locally and download it afterwards.
The dialog is not shown any more on at least IOS 13.2.1 and 13.3.
XCode Debug output
2020-01-04 19:49:21.209085+0100 App[297:5948] [Process] kill() returned unexpected error 1
2020-01-04 19:49:21.371510+0100 App[297:5948] [Process] kill() returned unexpected error 1
2020-01-04 19:49:21.854794+0100 App[297:5948] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x28177cf00 LPLinkView:0x105209ac0.leading == UILayoutGuide:0x280d37020'UIViewLayoutMarginsGuide'.leading (active)>",
"<NSLayoutConstraint:0x28177d770 H:[LPLinkView:0x105209ac0]-(59)-| (active, names: '|':_UIActivityContentTitleView:0x1053d18b0 )>",
"<NSLayoutConstraint:0x28170f840 H:|-(0)-[_UIActivityContentTitleView:0x1053d18b0] (active, names: '|':_UINavigationBarContentView:0x105277860 )>",
"<NSLayoutConstraint:0x28170def0 _UIActivityContentTitleView:0x1053d18b0.trailing == _UINavigationBarContentView:0x105277860.trailing (active)>",
"<NSLayoutConstraint:0x28177b7f0 'UIView-Encapsulated-Layout-Width' _UINavigationBarContentView:0x105277860.width == 6 (active)>",
"<NSLayoutConstraint:0x28177d1d0 'UIView-leftMargin-guide-constraint' H:|-(16)-[UILayoutGuide:0x280d37020'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UIActivityContentTitleView:0x1053d18b0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x28177cf00 LPLinkView:0x105209ac0.leading == UILayoutGuide:0x280d37020'UIViewLayoutMarginsGuide'.leading (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
โก๏ธ TO JS {}
2020-01-04 19:49:22.858654+0100 App[297:5948] [Process] kill() returned unexpected error 1
I'm using the code below and on my computer's web browser it just downloads the image (I assume that's fine, idk) but on my android device, nothing happens. I've used the device inspector and checked the console log, I see the console.log() messages all showing up fine and it does end up showing the final "test" meaning there was no error, however no share menu pops up at all. Any idea what I'm doing wrong here?
shareBlog: async function(){
const imageUrl = "https://i.imgur.com/hrpUdJp.jpeg";
const b64data = await this.getBase64FromUrl(imageUrl);
const fb64 = b64data.replace(/^data:image\/[a-z]+;base64,/, "");
console.log(fb64);
const contentType = b64data.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/)[0];
console.log(contentType);
const resp = await FileSharer.share({
filename: "test.jpeg",
base64Data: fb64,
contentType: contentType,
}).then(() => {
console.log("test");
}).catch(error => {
console.error("File sharing failed", error.message);
});
console.log(resp);
}
Run npx cap doctor
:
Latest Dependencies:
@capacitor/cli: 3.2.0
@capacitor/core: 3.2.0
@capacitor/android: 3.2.0
@capacitor/ios: 3.2.0
Installed Dependencies:
@capacitor/ios: not installed
@capacitor/cli: 3.1.2
@capacitor/core: 3.2.0
@capacitor/android: 3.2.0
[success] Android looking great! ๐
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": false,
"jsx": "preserve",
"importHelpers": true,
"moduleResolution": "node",
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"baseUrl": ".",
"types": [
"webpack-env",
"jest"
],
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx"
],
"exclude": [
"node_modules"
]
}
Hi,
I wanted to send a file with some text associated (e.g Title, description) with it using Filesharer,
Is it possible to do it with this plugin ?
If yes, can you tell me how .
Thankyou !
org.gradle.execution.MultipleBuildFailures: Build completed with 1 failures.
at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:386)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:247)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:159)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:134)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:58)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:55)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:75)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:75)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:55)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:54)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:58)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:49)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:46)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':byteowls-capacitor-filesharer:compileReleaseJavaWithJavac'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:95)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:119)
at org.gradle.api.internal.tasks.execution.ResolvePreviousStateExecuter.execute(ResolvePreviousStateExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:93)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:45)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:94)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:56)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
... 6 more
Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:52)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:36)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:100)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:39)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory$2.execute(IncrementalCompilerFactory.java:110)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory$2.execute(IncrementalCompilerFactory.java:106)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:59)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:43)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:51)
at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:154)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:122)
at com.android.build.gradle.tasks.AndroidJavaCompile.compile(AndroidJavaCompile.kt:214)
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 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:47)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:284)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:273)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:258)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:145)
at org.gradle.internal.execution.impl.steps.ExecuteStep.execute(ExecuteStep.java:49)
at org.gradle.internal.execution.impl.steps.CancelExecutionStep.execute(CancelExecutionStep.java:34)
at org.gradle.internal.execution.impl.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:69)
at org.gradle.internal.execution.impl.steps.TimeoutStep.execute(TimeoutStep.java:49)
at org.gradle.internal.execution.impl.steps.CatchExceptionStep.execute(CatchExceptionStep.java:33)
at org.gradle.internal.execution.impl.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50)
at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:43)
at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:29)
at org.gradle.internal.execution.impl.steps.CacheStep.executeWithoutCache(CacheStep.java:134)
at org.gradle.internal.execution.impl.steps.CacheStep.lambda$execute$3(CacheStep.java:83)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:82)
at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:36)
at org.gradle.internal.execution.impl.steps.PrepareCachingStep.execute(PrepareCachingStep.java:33)
at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:38)
at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:23)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:34)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:91)
... 35 more
I have it in the MainActiviy.java:
package foo.bar.app
import android.os.Bundle;
import com.getcapacitor.BridgeActivity;
import com.getcapacitor.Plugin;
import java.util.ArrayList;
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initializes the Bridge
this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
// Additional plugins you've installed go here
// Ex: add(TotallyAwesomePlugin.class);
add(FileSharerPlugin.class);
}});
}
}
Hi, we would appreciate any guidance on below issue:
When trying to use the plugin to share/download images on android, we always get the below error message:
java.lang.SecurityException: Permission Denial: reading com.byteowls.capacitor.filesharer.FileSharerProvider URI content://com.xxx.app.filesharer.fileprovider/capfilesharer/share.png from pid=9439, uid=1000 requires the provider to be exported, or grantUriPermission()
We made the below attempts to fix it
1: Adjusting the configurations in manifestxml and paths, but it wasn't successful.
2: Added active permission acquisition with getContext().grantUriPermission(getContext().getPackageName(), contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); but it wasn't successful.
3: The source code uses startActivity(Intent.createChooser(sendIntent, title)). If changed to startActivity(sendIntent), the error won't occur.
Chrome 72 and Safari included in ios 12.2 will support this web api.
I want to set language for my app,how to config share item like:
FileSharer.share({
filename: "test.pdf",
contentType: "application/pdf",
// If you want to save base64:
base64Data: "...",
// If you want to save a file from a path:
path: "../../file.pdf",
}).then(() => {
// do sth
}).catch(error => {
console.error("File sharing failed", error.message);
});
Terminating app due to uncaught exception 'NSGenericException', reason: 'Your application has presented a UIActivityViewController (<UIActivityViewController: 0x7fc8120f2800>). In its current trait environment, the modalPresentationStyle of a UIActivityViewController with this style is UIModalPresentationPopover. You must provide location information for this popover through the view controller's popoverPresentationController. You must provide either a sourceView and sourceRect or a barButtonItem. If this information is not known when you present the view controller, you may provide it in the UIPopoverPresentationControllerDelegate method -prepareForPopoverPresentation.'
*** First throw call stack:
(
0 CoreFoundation 0x00000001115f41bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010f83d735 objc_exception_throw + 48
2 UIKitCore 0x00000001171f9ed1 -[UIPopoverPresentationController presentationTransitionWillBegin] + 3168
3 UIKitCore 0x000000011720387b __71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke + 2495
4 UIKitCore 0x0000000117200e6b __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 468
5 UIKitCore 0x00000001179110d2 _runAfterCACommitDeferredBlocks + 318
6 UIKitCore 0x00000001178ffb2c _cleanUpAfterCAFlushAndRunDeferredBlocks + 384
7 UIKitCore 0x000000011792eefc _afterCACommitHandler + 135
8 CoreFoundation 0x0000000111558c27 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
9 CoreFoundation 0x00000001115530be __CFRunLoopDoObservers + 430
10 CoreFoundation 0x0000000111553751 __CFRunLoopRun + 1537
11 CoreFoundation 0x0000000111552e11 CFRunLoopRunSpecific + 625
12 GraphicsServices 0x0000000116b5c1dd GSEventRunModal + 62
13 UIKitCore 0x000000011790581d UIApplicationMain + 140
14 App 0x000000010e8a1d60 main + 48
15 libdyld.dylib 0x0000000112f64575 start + 1
)
Latest Dependencies:
@capacitor/cli: 2.4.5
@capacitor/core: 2.4.5
@capacitor/android: 2.4.5
@capacitor/electron: 2.4.5
@capacitor/ios: 2.4.5
Installed Dependencies:
@capacitor/ios not installed
@capacitor/cli 2.4.2
@capacitor/core 2.4.2
@capacitor/android 2.4.4
@capacitor/electron not installed
On trying to register plugin in Android at com.companyname.appname.MainActivity#onCreate, importing the plugin says that the plugin is not found
I would expect the plugin to register in MainActivity
...
import com.byteowls.capacitor.filesharer.FileSharerPlugin;
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initializes the Bridge
this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
// Additional plugins you've installed go here
// Ex: add(TotallyAwesomePlugin.class);
add(FileSharerPlugin.class);
}});
}
}
I do not have any expirence with Android Studio, any help with getting this plugin to work would be appreciated
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.