0

i am trying to call the native method from react-native. but it throwing error. find the details below. basically i am trying to print from react native using brother sdk. its working emulator fine but few real devices working fine. but not working in samsung a70 device. Please help me to solve this. thanks in advance

const PrintPreviewLabel = (props) => { 

  const saveAsImage = useCallback((viewShotRef, index) => {
    captureRef(viewShotRef, {
      quality: 1,
      width: 350,
      height: 350,
      format: 'jpg',
    }).then(
      uri => {
        const splitted = uri.split('/');
        RNPrinterModule.printImageUsingWifi(
          ipAddress,
          splitted[splitted.length - 1],
          printFrom == 'search' ? parseInt(noCopyValue[index] || 1) :   printData[index]?.numberOfCopies,
          (message: { error: string, success: string}) => {
            setShowLoader(false);
            if (message && message.error) {
              setErrorModal(true);
            }
          },
        );
      },
      error => {
        console.log('Image saved failed', error);
      },
    );

  }, [ipAddress, noCopyValue, printData, printFrom]);
  
  return (<View>some rendering</View>);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

below code is native module code

    @ReactMethod
    void printImageUsingWifi(String ipAddress, String path, Integer copies, Callback callback) {
        try {
            Context context = getReactApplicationContext();
            Channel channel = Channel.newWifiChannel(ipAddress);
            WritableMap map = new WritableNativeMap();

            PrinterDriverGenerateResult result = PrinterDriverGenerator.openChannel(channel);
            if (result.getError().getCode() != OpenChannelError.ErrorCode.NoError) {
                Log.e("Printer", "Error - Open Channel: " + result.getError().getCode());
                map.putString("error", String.valueOf(result.getError().getCode()));
                callback.invoke(map);
                return;
            }

            File file = new File(context.getCacheDir().toString(), path);

            PrinterDriver printerDriver = result.getDriver();
            QLPrintSettings printSettings = new QLPrintSettings(PrinterModel.QL_820NWB);

            printSettings.setLabelSize(QLPrintSettings.LabelSize.RollW62RB);
            printSettings.setAutoCut(true);
            printSettings.setWorkPath(context.getCacheDir().toString());
//            printSettings.setHalftone(PrintImageSettings.Halftone.Threshold);
//            printSettings.setHalftoneThreshold(255);
            printSettings.setNumCopies(copies);

            PrintError printError = printerDriver.printImage(file.toString(), printSettings);

            if (printError.getCode() != PrintError.ErrorCode.NoError) {
                Log.d("Printer", "Error - Print Image: " + printError.getCode());
                map.putString("error", String.valueOf(printError.getCode()));
                callback.invoke(map);
            }
            else {
                Log.d("Printer", "Success - Print Image");
                map.putString("success", "true");
                callback.invoke(map);
            }

            printerDriver.closeChannel();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

And the error is

Fatal Exception: java.lang.RuntimeException
Could not invoke RNPrinterModule.printImageUsingWifi
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:383)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:151)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
android.os.Looper.loop (Looper.java:246)
com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:226)
java.lang.Thread.run (Thread.java:923)


Caused by java.lang.reflect.InvocationTargetException
java.lang.reflect.Method.invoke (Method.java)
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:151)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
android.os.Looper.loop (Looper.java:246)
com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:226)
java.lang.Thread.run (Thread.java:923)


Caused by java.lang.NoClassDefFoundError
Failed resolution of: Lkotlin/jvm/internal/Intrinsics;
com.brother.sdk.lmprinter.GeneralPrintSettings.<init> (Unknown Source:2)
com.brother.sdk.lmprinter.V3PrinterService.setPrintSettings (V3PrinterService.java:277)
com.brother.sdk.lmprinter.V3PrinterService.setPrintSettingsAndCallPrintImage (V3PrinterService.java:70)
com.brother.sdk.lmprinter.V3PrinterService.printImage (V3PrinterService.java:44)
com.brother.sdk.lmprinter.PrinterDriver.printImage (PrinterDriver.java:29)
vn.telio.ims.RNPrinterModule.printImageUsingWifi (RNPrinterModule.java:83)
java.lang.reflect.Method.invoke (Method.java)
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:151)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
android.os.Looper.loop (Looper.java:246)
com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:226)
java.lang.Thread.run (Thread.java:923)


Caused by java.lang.ClassNotFoundException
kotlin.jvm.internal.Intrinsics
com.brother.sdk.lmprinter.GeneralPrintSettings.<init> (Unknown Source:2)
com.brother.sdk.lmprinter.V3PrinterService.setPrintSettings (V3PrinterService.java:277)
com.brother.sdk.lmprinter.V3PrinterService.setPrintSettingsAndCallPrintImage (V3PrinterService.java:70)
com.brother.sdk.lmprinter.V3PrinterService.printImage (V3PrinterService.java:44)
com.brother.sdk.lmprinter.PrinterDriver.printImage (PrinterDriver.java:29)
vn.telio.ims.RNPrinterModule.printImageUsingWifi (RNPrinterModule.java:83)
java.lang.reflect.Method.invoke (Method.java)
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:151)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
android.os.Looper.loop (Looper.java:246)
com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:226)
java.lang.Thread.run (Thread.java:923)
Kesavan R
  • 649
  • 1
  • 5
  • 23
  • Actually this [solution](https://stackoverflow.com/questions/50850224/java-lang-noclassdeffounderror-when-using-kotlin-aar-in-android-java-application) solve my problems. hope it will helpful for someone – Kesavan R Mar 02 '22 at 09:15

1 Answers1

0

If the issue is only causing to android 11 and above. Then, it might be due to Behavior changes: Apps targeting Android 11 .

Some features (eg: Speech recognition,TTS etc...) works in from android 11 device only after adding following code in our AndroidManifest.xml

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:node="remove" tools:ignore="QueryAllPackagesPermission" />

also android:exported="true" inside <activity>

Thanhal P A
  • 4,097
  • 3
  • 18
  • 38