Open shubh89193 opened 2 years ago
I am having similar issue
I also encountered this issue and after some investigation it was caused as I was forcing dependencies to run on Android API version 29 as I needed it at the time for StethoWrapper to work with my react native project for Chrome debugging. API version 29 does not have the enum WEBP_LOSSLESS in the graphics package ( I believe it was introduced in API 30) hence this error.
I use Flipper now so I just removed these lines from my android/build.gradle and removed StethoWrapper
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
compileSdkVersion 29 // have to match with build.gradle and app/build.gradle ones
buildToolsVersion '29.0.3' // have to match with build.gradle and app/build.gradle ones
}
}
}
}
+1, i meet the same issue.
+1 Have same issue. It was introduced in v1.11.0 with support for WEBP. Version 1.10.0 works fine.
Apologies to all who encountered this issue, please upgrade your compileSdkVersion to 30. The previous Bitmap.CompressFormat WEBP enum was deprecated in API level 30 hence WEBP_LOSSLESS enum was introduced. I'll make a PR to update this requirement in the docs.
What about for compileSdkVersion: 31
and targetSdkVersion = 31
?
@coderdave you should have no issues on that API level
I get this note when on version 31:
.../node_modules/@react-native-async-storage/async-storage/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java uses or overrides a deprecated API.
It's not an error. I have something else that is causing my build to fail I think.
You might want to check for the error message if your build is failing
Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED > Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED > Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED
what about this
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':react-native-community_clipboard:compileReleaseJavaWithJavac'.
Compilation failed; see the compiler error output for details.
Try:
Run with --info option to get more log output. Run with --scan to get full insights.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.3/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD FAILED in 38s 183 actionable tasks: 169 executed, 14 up-to-date
info 💡 Tip: Make sure that you have set up your development environment correctly, by running npx react-native doctor. To read more about doctor command visit: https://github.com/react-native-community/cli/blob/main/packages/cli-doctor/README.md#doctor
error Failed to build the app. Error: Command failed with exit code 1: ./gradlew app:bundleRelease at makeError (/home/manojjyani/Public/BUY/node_modules/execa/lib/error.js:60:11) at module.exports.sync (/home/manojjyani/Public/BUY/node_modules/execa/index.js:194:17) at build (/home/manojjyani/Public/BUY/node_modules/react-native/node_modules/@react-native-community/cli-platform-android/build/commands/buildAndroid/index.js:68:22) at Object.buildAndroid [as func] (/home/manojjyani/Public/BUY/node_modules/react-native/node_modules/@react-native-community/cli-platform-android/build/commands/buildAndroid/index.js:60:10) at Command.handleAction (/home/manojjyani/Public/BUY/node_modules/@react-native-community/cli/build/index.js:118:23) at Command.listener [as _actionHandler] (/home/manojjyani/Public/BUY/node_modules/commander/lib/command.js:482:17) at /home/manojjyani/Public/BUY/node_modules/commander/lib/command.js:1283:65 at Command._chainOrCall (/home/manojjyani/Public/BUY/node_modules/commander/lib/command.js:1177:12) at Command._parseCommand (/home/manojjyani/Public/BUY/node_modules/commander/lib/command.js:1283:27) at /home/manojjyani/Public/BUY/node_modules/commander/lib/command.js:1081:27
I followed below steps which solved my problem.
conver this : from: public ClipboardModule(Context context) { super(context); } private ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } to: public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
this worked for me . Hope this will guide you thanks
you need to just remove this package and @react-native-community\clipboard and install this reinstall this react-native-clipboard/clipboard one
you need to just remove this package and @react-native-community\clipboard and install this reinstall this react-native-clipboard/clipboard one
actually i'm using react-native-otp-model by using @twotalltotems/react-native-otp-input library. but i'm getting this error.Cannot read property 'getString' of null. have you resolved this error earlier?
I have also same issue like below
FAILURE: Build failed with an exception.
Compilation failed; see the compiler error output for details.
I have already set minSdkVersion to 24
you need to just remove this package and @react-native-community\clipboard and install this reinstall this react-native-clipboard/clipboard one
actually i'm using react-native-otp-model by using @twotalltotems/react-native-otp-input library. but i'm getting this error.Cannot read property 'getString' of null. have you resolved this error earlier?
+1 Same
I have tried uninstalling and Re-installing Try 1: npm install @twotalltotems/react-native-otp-input react-native-clipboard/clipboard Try 2: npm install --save @react-native-community/react-native-clipboard Try 3: Tried togeling minSdkVersion from 21 to 24 and vise versa.
i have also raised the same https://github.com/tttstudios/react-native-otp-input/issues/227
I followed below steps which solved my problem.
- go to this file. node_modules@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java
- import this : import com.facebook.react.bridge.ReactApplicationContext;
- convert extened package from ContextBaseJavaModule to ReactContextBaseJavaModule everywhere in file(maybe used at two places)
- conver this : from: public ClipboardModule(Context context) { super(context); } private ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } to: public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
this worked for me . Hope this will guide you thanks
worked for me, thank you!
you need to just remove this package and @react-native-community\clipboard and install this reinstall this react-native-clipboard/clipboard one
this worked for me.
return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE);
Hey.!
https://github.com/react-native-clipboard/clipboard/issues/155#issuecomment-1961252638 working fine for me.!
I followed below steps which solved my problem.
- go to this file. node_modules@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java
- import this : import com.facebook.react.bridge.ReactApplicationContext;
- convert extened package from ContextBaseJavaModule to ReactContextBaseJavaModule everywhere in file(maybe used at two places)
- conver this : from: public ClipboardModule(Context context) { super(context); } private ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } to: public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
this worked for me . Hope this will guide you thanks
great it's working fine just change package com.reactnativecommunity.clipboard; to top of file /**
import android.content.ClipboardManager; import android.content.ClipData; import android.content.Context;
import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.Promise; import com.facebook.react.module.annotations.ReactModule;
/**
A module that allows JS to get/set clipboard contents. */ @ReactModule(name = ClipboardModule.NAME) public class ClipboardModule extends ReactContextBaseJavaModule {
public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
public static final String NAME = "RNCClipboard";
@Override public String getName() { return ClipboardModule.NAME; }
private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
@ReactMethod public void getString(Promise promise) { try { ClipboardManager clipboard = getClipboardService(); ClipData clipData = clipboard.getPrimaryClip(); if (clipData != null && clipData.getItemCount() >= 1) { ClipData.Item firstItem = clipboard.getPrimaryClip().getItemAt(0); promise.resolve("" + firstItem.getText()); } else { promise.resolve(""); } } catch (Exception e) { promise.reject(e); } }
@ReactMethod public void setString(String text) { ClipData clipdata = ClipData.newPlainText(null, text); ClipboardManager clipboard = getClipboardService(); clipboard.setPrimaryClip(clipdata); }
@ReactMethod public void hasString(Promise promise) { try { ClipboardManager clipboard = getClipboardService(); ClipData clipData = clipboard.getPrimaryClip(); promise.resolve(clipData != null && clipData.getItemCount() >= 1); } catch (Exception e) { promise.reject(e); } } }
I followed below steps which solved my problem.
- go to this file. node_modules@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java
- import this : import com.facebook.react.bridge.ReactApplicationContext;
- convert extened package from ContextBaseJavaModule to ReactContextBaseJavaModule everywhere in file(maybe used at two places)
- conver this : from: public ClipboardModule(Context context) { super(context); } private ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } to: public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
this worked for me . Hope this will guide you thanks
I follow these steps but Its returns this error E:\User\Work\xxxxxxx\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:26: error: cannot find symbol super(new ReactApplicationContext(context)); ^ symbol: class ReactApplicationContext location: class ClipboardModule
Anyone know how to fix?
@jedaydiya check second and third step
you need to just remove this package and @react-native-community\clipboard and install this reinstall this react-native-clipboard/clipboard one
actually i'm using react-native-otp-model by using @twotalltotems/react-native-otp-input library. but i'm getting this error.Cannot read property 'getString' of null. have you resolved this error earlier?
same issue, did you resolve this?
change this `// public ClipboardModule(Context context) { // super(context); // }
// public static final String NAME = "RNCClipboard";
// @Override // public String getName() { // return ClipboardModule.NAME; // }
// private ClipboardManager getClipboardService() { // return (ClipboardManager) getContext().getSystemService(getContext().CLIPBOARD_SERVICE); // }`
to this
public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
public static final String NAME = "RNCClipboard";
@Override public String getName() { return ClipboardModule.NAME; }
private ClipboardManager getClipboardService() {
return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE);
}
I followed below steps which solved my problem.
- go to this file. node_modules@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java
- import this : import com.facebook.react.bridge.ReactApplicationContext;
- convert extened package from ContextBaseJavaModule to ReactContextBaseJavaModule everywhere in file(maybe used at two places)
conver this : from: public ClipboardModule(Context context) { super(context); } private ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } to: public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); }
private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
this worked for me . Hope this will guide you thanks
This worked for me! 👾
Seguí los pasos a continuación que resolvieron mi problema.
- Vaya a este archivo. node_modules@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java
- importar esto: import com.facebook.react.bridge.ReactApplicationContext;
- Convierte el paquete extendido de ContextBaseJavaModule a ReactContextBaseJavaModule en todas partes del archivo (puede usarse en dos lugares)
- convertir esto: de: público ClipboardModule(Contexto contexto) { super(contexto); } privado ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } a: público ClipboardModule(Contexto contexto) { super(nuevo ReactApplicationContext(contexto)); }
privado ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
Esto me funcionó. Espero que te sirva de guía. Gracias.
lo hice tal cual pero no me funciono alguien podria ayudarme este es mi error gracias :
Configure project :react-native-reanimated Android gradle plugin: 7.3.1 Gradle: 7.5.1 WARNING:Software Components will not be created automatically for Maven publishing from Android Gradle Plugin 8.0. To opt-in to the future behavior, set the Gradle property android.disableAutomaticComponentCreation=true in the
gradle.properties
file or use the new publishing DSL. WARNING:We recommend using a newer Android Gradle plugin to use compileSdk = 34
This Android Gradle plugin (7.3.1) was tested up to compileSdk = 33
This warning can be suppressed by adding android.suppressUnsupportedCompileSdk=34 to this project's gradle.properties
The build will continue, but you are strongly encouraged to update your project to use a newer Android Gradle Plugin that has been tested with compileSdk = 34
Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/7.5.1/userguide/command_line_interface.html#sec:command_line_warnings 392 actionable tasks: 2 executed, 390 up-to-date
info 💡 Tip: Make sure that you have set up your development environment correctly, by running npx react-native doctor. To read more about doctor command visit: https://github.com/react-native-community/cli/blob/main/packages/cli-doctor/README.md#doctor
C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:14: error: cannot find symbol import com.facebook.react.bridge.ContextBaseJavaModule; ^ symbol: class ContextBaseJavaModule location: package com.facebook.react.bridge C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:23: error: cannot find symbol public class ClipboardModule extends ContextBaseJavaModule { ^ symbol: class ContextBaseJavaModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:26: error: cannot find symbol super(new ReactApplicationContext(context)); ^ symbol: class ReactApplicationContext location: class ClipboardModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:31: error: method does not override or implement a method from a supertype @Override ^ C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:37: error: cannot find symbol return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); ^ symbol: method getReactApplicationContext() location: class ClipboardModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:37: error: cannot find symbol return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); ^ symbol: method getReactApplicationContext() location: class ClipboardModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardPackage.java:23: error: incompatible types: ClipboardModule cannot be converted to NativeModule modules.add(new ClipboardModule(reactContext)); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 7 errors
FAILURE: Build completed with 2 failures.
What went wrong: Execution failed for task ':react-native-community_clipboard:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for 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.
What went wrong: java.lang.StackOverflowError (no error message)
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 1m 15s error Failed to install the app. Command failed with exit code 1: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081 C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:14: error: cannot find symbol import com.facebook.react.bridge.ContextBaseJavaModule; ^ symbol: class ContextBaseJavaModule location: package com.facebook.react.bridge C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:23: error: cannot find symbol public class ClipboardModule extends ContextBaseJavaModule { ^ symbol: class ContextBaseJavaModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:26: error: cannot find symbol super(new ReactApplicationContext(context)); ^ symbol: class ReactApplicationContext location: class ClipboardModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:31: error: method does not override or implement a method from a supertype @Override ^ C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:37: error: cannot find symbol return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); ^ symbol: method getReactApplicationContext() location: class ClipboardModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java:37: error: cannot find symbol return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); ^ symbol: method getReactApplicationContext() location: class ClipboardModule C:\Users\alexa\OneDrive\Documentos\Neoestudio-APP\node_modules\@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardPackage.java:23: error: incompatible types: ClipboardModule cannot be converted to NativeModule modules.add(new ClipboardModule(reactContext)); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 7 errors FAILURE: Build completed with 2 failures. 1: Task failed with an exception. ----------- What went wrong: Execution failed for task ':react-native-community_clipboard:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for 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. ============================================================================== 2: Task failed with an exception. ----------- What went wrong: java.lang.StackOverflowError (no error message) 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 1m 15s. info Run CLI with --verbose flag for more details.
Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED
help me!
Task :react-native-community_clipboard:compileDebugJavaWithJavac FAILED
help me!
@alexandernieves
I've recently been trying to enable fabric in an existing RN CLI project and it's been painful. I've recently added support for expo so that we can use expo libs which came in clutch here. I've removed this lib and replaced it with https://docs.expo.dev/versions/latest/sdk/clipboard/
I know, might not be an option for some but hey, might be worth a shot if all else fails
Hey there, I really wanted to use the new arch for my app, so I used a patch as a workaround and manually fixed it for now. A patch helps keep the change despite installing/changing dependencies. Here is a practical guide for those still struggling with it. I hope it helps.
Install patch-package
:
First, you must install patch-package
if you haven't already. Run the following command in your project directory:
npm install patch-package
Edit the file causing the compilation error:
Manually edit the ClipboardModule.java
file in your node_modules/@react-native-clipboard/clipboard/android/src/main/java/com/reactnativecommunity/clipboard
directory
New content to place in the file
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.reactnativecommunity.clipboard;
import android.annotation.TargetApi;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* A module that allows JS to get/set clipboard contents.
*/
@ReactModule(name = ClipboardModule.NAME)
public class ClipboardModule extends NativeClipboardModuleSpec {
public static final String CLIPBOARD_TEXT_CHANGED = "RNCClipboard_TEXT_CHANGED";
private ReactApplicationContext reactContext;
private ClipboardManager.OnPrimaryClipChangedListener listener = null;
public ClipboardModule(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
}
public static final String NAME = "RNCClipboard";
public static final String MIMETYPE_JPEG = "image/jpeg";
public static final String MIMETYPE_JPG = "image/jpg";
public static final String MIMETYPE_PNG = "image/png";
public static final String MIMETYPE_WEBP = "image/webp";
public static final String MIMETYPE_HEIC = "image/heic";
public static final String MIMETYPE_HEIF = "image/heif";
@Override
public String getName() {
return ClipboardModule.NAME;
}
private ClipboardManager getClipboardService() {
return (ClipboardManager) reactContext.getSystemService(Context.CLIPBOARD_SERVICE);
}
@ReactMethod
public void getString(Promise promise) {
try {
ClipboardManager clipboard = getClipboardService();
ClipData clipData = clipboard.getPrimaryClip();
if (clipData != null && clipData.getItemCount() >= 1) {
ClipData.Item firstItem = clipData.getItemAt(0);
promise.resolve("" + firstItem.getText());
} else {
promise.resolve("");
}
} catch (Exception e) {
promise.reject(e);
}
}
@Override
public void getStrings(Promise promise) {
promise.reject("Clipboard:getStrings", "getStrings is not supported on Android");
}
@Override
public void getImagePNG(Promise promise) {
promise.reject("Clipboard:getImagePNG", "getImagePNG is not supported on Android");
}
@Override
public void getImageJPG(Promise promise) {
promise.reject("Clipboard:getImageJPG", "getImageJPG is not supported on Android");
}
@Override
public void setImage(String content, Promise promise) {
promise.reject("Clipboard:setImage", "setImage is not supported on Android");
}
@ReactMethod
public void setString(String text) {
try {
ClipData clipdata = ClipData.newPlainText(null, text);
ClipboardManager clipboard = getClipboardService();
clipboard.setPrimaryClip(clipdata);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void setStrings(ReadableArray content) {
}
@ReactMethod
public void hasString(Promise promise) {
try {
ClipboardManager clipboard = getClipboardService();
ClipData clipData = clipboard.getPrimaryClip();
promise.resolve(clipData != null && clipData.getItemCount() >= 1);
} catch (Exception e) {
promise.reject(e);
}
}
@Override
public void hasImage(Promise promise) {
promise.reject("Clipboard:hasImage", "hasImage is not supported on Android");
}
@Override
public void hasURL(Promise promise) {
promise.reject("Clipboard:hasURL", "hasURL is not supported on Android");
}
@Override
public void hasNumber(Promise promise) {
promise.reject("Clipboard:hasNumber", "hasNumber is not supported on Android");
}
@Override
public void hasWebURL(Promise promise) {
promise.reject("Clipboard:hasWebURL", "hasWebURL is not supported on Android");
}
@ReactMethod
public void getImage(Promise promise){
ClipboardManager clipboardManager = getClipboardService();
if (!(clipboardManager.hasPrimaryClip())){
promise.resolve("");
}
else if (clipboardManager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)){
promise.resolve("");
}
else {
ClipData clipData = clipboardManager.getPrimaryClip();
if(clipData != null){
ClipData.Item item = clipData.getItemAt(0);
Uri pasteUri = item.getUri();
if (pasteUri != null){
ContentResolver cr = reactContext.getContentResolver();
String mimeType = cr.getType(pasteUri);
if (mimeType != null){
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(cr, pasteUri);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
switch(mimeType){
case MIMETYPE_JPEG:
case MIMETYPE_JPG:
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
break;
case MIMETYPE_PNG:
case MIMETYPE_HEIC:
case MIMETYPE_HEIF:
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
break;
case MIMETYPE_WEBP:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q){
bitmap.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 100, outputStream);
break;
}
bitmap.compress(Bitmap.CompressFormat.WEBP, 100, outputStream);
break;
default:
return;
}
byte[] byteArray = outputStream.toByteArray();
String encodedString = Base64.encodeToString(byteArray, Base64.DEFAULT);
promise.resolve("data:" + mimeType + ";base64," + encodedString);
} catch (IOException e) {
promise.reject(e);
e.printStackTrace();
}
}
}
}
promise.resolve("");
}
}
@ReactMethod
public void setListener() {
try {
ClipboardManager clipboard = getClipboardService();
listener = new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(CLIPBOARD_TEXT_CHANGED, null);
}
};
clipboard.addPrimaryClipChangedListener(listener);
} catch (Exception e) {
e.printStackTrace();
}
}
@ReactMethod
public void removeListener() {
if(listener != null){
try{
ClipboardManager clipboard = getClipboardService();
clipboard.removePrimaryClipChangedListener(listener);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@ReactMethod
public void addListener(String eventName) {
// Keep: Required for RN built in Event Emitter Calls.
}
@Override
public void removeListeners(double count) {
// Keep: Required for RN built in Event Emitter Calls.
}
}
Create the Patch: After making the changes, create a patch file by running the following command:
npx patch-package @react-native-clipboard/clipboard
This will create a .patch
file inside a patches
directory at the root of your project.
Apply the Patch:
To apply the patch automatically whenever you install dependencies (e.g., running npm install
or yarn
), add a postinstall
script to your package.json
:
"scripts": {
"postinstall": "patch-package"
}
Clean and try to build the app: Clean your project and rebuild it to ensure the patch is applied correctly and that the issue is resolved.
npx react-native clean
npx react-native run-android
I followed below steps which solved my problem.
- go to this file. node_modules@react-native-community\clipboard\android\src\main\java\com\reactnativecommunity\clipboard\ClipboardModule.java
- import this : import com.facebook.react.bridge.ReactApplicationContext;
- convert extened package from ContextBaseJavaModule to ReactContextBaseJavaModule everywhere in file(maybe used at two places)
- conver this : from: public ClipboardModule(Context context) { super(context); } private ClipboardManager getClipboardService() { return (ClipboardManager) getcontext().getSystemService(getcontext().CLIPBOARD_SERVICE); } to: public ClipboardModule(Context context) { super(new ReactApplicationContext(context)); } private ClipboardManager getClipboardService() { return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE); }
this worked for me . Hope this will guide you thanks
This worked for me! 👾
This previously worked for me, but not anymore! 😅 Changing the package to @react-native-clipboard/clipboard solved the problem. ✨
Environment
Platforms
Versions
Description
error Failed to install the app. Make sure you have the Android development environment set up: https://facebook.github.io/react-native/docs/getting-started.html#android-development-environment. Run CLI with --verbose flag for more details. Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081 Note: /Users/extended/Downloads/vibesocialmusic-82830-react-native copy/src/node_modules/@invertase/react-native-apple-authentication/android/src/main/java/com/RNAppleAuthentication/AppleAuthenticationAndroidModule.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: /Users/extended/Downloads/vibesocialmusic-82830-react-native copy/src/node_modules/react-native-android-location-enabler/android/src/main/java/com/heanoria/library/reactnative/locationenabler/RNAndroidLocationEnablerModule.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. /Users/extended/Downloads/vibesocialmusic-82830-react-native copy/src/node_modules/@react-native-clipboard/clipboard/android/src/main/java/com/reactnativecommunity/clipboard/ClipboardModule.java:136: error: cannot find symbol if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){ ^ symbol: variable R location: class VERSION_CODES /Users/extended/Downloads/vibesocialmusic-82830-react-native copy/src/node_modules/@react-native-clipboard/clipboard/android/src/main/java/com/reactnativecommunity/clipboard/ClipboardModule.java:137: error: cannot find symbol bitmap.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 100, outputStream); ^ symbol: variable WEBP_LOSSLESS location: class CompressFormat Note: /Users/extended/Downloads/vibesocialmusic-82830-react-native copy/src/node_modules/@react-native-clipboard/clipboard/android/src/main/java/com/reactnativecommunity/clipboard/ClipboardModule.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 2 errors
Reproducible Demo