Android Question BrotherSDK2B4A problem

mc73

Well-Known Member
Licensed User
Longtime User
I really don't know what's going on, though I suspect I did something wrong with the placement of 'so' files.

I used 'simpleLibraryCompiler (1.01)' and then I added just a void to perform printing. Lib is loaded, but upon run I get
Code: Copy
java.lang.UnsatisfiedLinkError: Couldn't load createdata from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/b4a.example-2.apk"],nativeLibraryDirectories=[/data/app-lib/b4a.example-2, /vendor/lib, /system/lib]]]: findLibrary returned null
   at java.lang.Runtime.loadLibrary(Runtime.java:358)
   at java.lang.System.loadLibrary(System.java:526)
   at com.brother.ptouch.sdk.PrinterModel.<clinit>(PrinterModel.java:30)
   at com.brother.ptouch.sdk.Communication.createPrinterModel(Communication.java:275)
   at com.brother.ptouch.sdk.ComNet$CommunicationThread.run(ComNet.java:473)

Seems that a lib is missing, though I've added the brotherLib to both the additional folder of b4a and of my workspace. Yet, I'm not sure about the 'so' files.

The code of void goes like this, just in case anyone sees something wrong:

Code: Copy
package biz.logismic;
import com.brother.ptouch.sdk.*;

import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.*;

@Version(3.0f)
@ShortName("BrotherPrintSDK")
@DependsOn(values={"BrotherPrintLibrary"})
public class brotherSDK {
   
   public void print(String filePath,String printerIP,String macAddress){
     
     Printer myPrinter = new Printer();
     PrinterInfo myPrinterInfo = new PrinterInfo();
     PrinterStatus printResult = new PrinterStatus();
     LabelInfo mLabelInfo=new LabelInfo();
     try{
     
       myPrinterInfo = myPrinter.getPrinterInfo();
       myPrinterInfo.printerModel=PrinterInfo.Model.QL_710W;
       myPrinterInfo.printMode=PrinterInfo.PrintMode.FIT_TO_PAGE;
       myPrinterInfo.port=PrinterInfo.Port.NET;
       myPrinterInfo.paperSize = PrinterInfo.PaperSize.CUSTOM;
       myPrinterInfo.orientation = PrinterInfo.Orientation.PORTRAIT;
       myPrinterInfo.numberOfCopies = 1;
       myPrinterInfo.ipAddress=printerIP;
       myPrinterInfo.macAddress=macAddress;
     
       mLabelInfo.labelNameIndex=LabelInfo.QL700.valueOf("W62").ordinal();
       mLabelInfo.isAutoCut = true;
       mLabelInfo.isEndCut =true;
       
       myPrinter.setPrinterInfo(myPrinterInfo);
       myPrinter.setLabelInfo(mLabelInfo);
       printResult=myPrinter.printFile(filePath);
     } catch(Exception e){   
     }}}

I'm almost sure, there is a simple solution, but can't figure it out :)
 
1. Remove this empty catch block. Throw the error instead.
2. Open the jar file with 7zip. The so file should be located under lib\armeabi. See the DropboxSync.jar for example:
SS-2014-10-19_08.00.38.png
 
Upvote 0
Ty Erel. The problem was with the location of 'so' file. I had it under 'additional', but I had to add the 'lib' subdirectory under 'additional' first.
Why not placing an 'so' file browser in simpleLibraryCompiler and then let it add the files for us? Just a suggestion :)
 
Upvote 0
Hello mc73. Has succeeded in creating the B4A library for this printers? Because I try but not working.
 
Upvote 0
Hello mc73. Has succeeded in creating the B4A library for this printers? Because I try but not working.
Yes, I did it, though I have to search a bit, in order to find the small lib I created. I remember it worked well for my puproses, but it was very basic, I didn't wrap the whole sdk. If interested, I can try to find it and upload it here.
 
Upvote 0
Hello, I upload the lib's files.
Usage:
Code: Copy
Dim brt As BrotherPrintSDK
Dim err As String =brt.print(yourFilePath,yourPrinterIP)
If err.ToLowerCase.StartsWith ("error_none") Then
     log("print ok")
Else
    log("print error")
End If

This thing prints png files. For me this was enough and I never got into wrapping more methods of the original SDK unfortunately so it is rather incomplete.
 

Attachments

Upvote 0
Tank you very much

I getting ERROR_COMMUNICATION_ERROR
I can print from the Brother app so I know it's not the problem

Do you know what can be the cause?
maybe it's the model
can I change it ? and where ?
 
Last edited:
Upvote 0
There may be more than one problems. Using another model is probably one of them, since I used a specific model (ql 710w). Unfortunately I don't really have the time to rebuild the library and to make it more generic. But here's the java code of the library, which you can tweak and recreate the lib. I hope this helps.
Code: Copy
package biz.logismic;
import com.brother.ptouch.sdk.*;

import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.*;

@Version(3.0f)
@ShortName("BrotherPrintSDK")
@DependsOn(values={"BrotherPrintLibrary"})
public class brotherSDK {
   
   public String print(String filePath,String printerIP){
     
     Printer myPrinter = new Printer();
     PrinterInfo myPrinterInfo = new PrinterInfo();
     PrinterStatus printResult = new PrinterStatus();
     LabelInfo mLabelInfo=new LabelInfo();
     
     
       myPrinterInfo = myPrinter.getPrinterInfo();
       myPrinterInfo.printerModel=PrinterInfo.Model.QL_710W;
       
       myPrinterInfo.printMode=PrinterInfo.PrintMode.FIT_TO_PAGE;
       myPrinterInfo.port=PrinterInfo.Port.NET;
       myPrinterInfo.paperSize = PrinterInfo.PaperSize.CUSTOM;
       myPrinterInfo.orientation = PrinterInfo.Orientation.PORTRAIT;
       myPrinterInfo.numberOfCopies = 1;
       myPrinterInfo.ipAddress=printerIP;
       //myPrinterInfo.macAddress=macAddress;
     
       mLabelInfo.labelNameIndex=LabelInfo.QL700.valueOf("W62").ordinal();
       mLabelInfo.isAutoCut = true;
       mLabelInfo.isEndCut =true;
       
       myPrinter.setPrinterInfo(myPrinterInfo);
       myPrinter.setLabelInfo(mLabelInfo);
       printResult=myPrinter.printFile(filePath);
       return printResult.errorCode.toString();
     }}
 
Upvote 0
Tank you
All I need to do is change the code and create a class file yes?
how can i do it without eclipse ?
I have notepad++ but no .class there when saving
 
Upvote 0
I get error
C:\Users\Michael\Cellular\B4A\SimpleLibraryCompiler\test\src\com\example\BrotherPrintSDK.java:10: error: class brotherSDK is public, should be declared in a file named brotherSDK.java
public class brotherSDK {
^
1 error
 
Upvote 0
now i get
C:\Users\Michael\Cellular\B4A\SimpleLibraryCompiler\BrotherSDK\src\biz\logismic\BrotherPrintSDK.java:2: error: package com.brother.ptouch.sdk does not exist
import com.brother.ptouch.sdk.*;

i put BrotherPrintLibrary.jar in \SimpleLibraryCompiler\BrotherSDK\libs\com\brother\ptouch\sdk

and sometime i get
javac: directory not found: bin\classes
Usage: javac <options> <source files>
use -help for a list of possible options

i added new folder bin\classes
and still the same
 
Upvote 0
You should place BrotherPrintLibrary.jar under ...\BrotherPrintSDK\libs.
Anyway, you should really create a new thread to get help on creating a library. There are much more experienced users in this field than me and you'll surely get the help needed.
 
Upvote 0
sorry to bother you so much :)
But you did wrote this lib

I have succeeded to make the lib
but still same error
all i changed was
myPrinterInfo.printerModel=PrinterInfo.Model.QL_720NW;
mLabelInfo.labelNameIndex=LabelInfo.QL700.valueOf("W29H90").ordinal();

i even unremed macAdress to see if it will help but the same


the strange thing is when i print from "brother print sdk demo" app with the same settings i can print
 
Upvote 0
package biz.logismic;
import com.brother.ptouch.sdk.*;

import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.*;

@Version(3.0f)
@ShortName("BrotherPrintSDK")
@DependsOn(values={"BrotherPrintLibrary"})
public class BrotherPrintSDK {

public String print(String filePath,String printerIP){

Printer myPrinter = new Printer();
PrinterInfo myPrinterInfo = new PrinterInfo();
PrinterStatus printResult = new PrinterStatus();
LabelInfo mLabelInfo=new LabelInfo();


myPrinterInfo = myPrinter.getPrinterInfo();
myPrinterInfo.printerModel=PrinterInfo.Model.QL_720NW;

myPrinterInfo.printMode=PrinterInfo.PrintMode.FIT_TO_PAGE;
myPrinterInfo.port=PrinterInfo.Port.NET;
myPrinterInfo.paperSize = PrinterInfo.PaperSize.CUSTOM;
myPrinterInfo.orientation = PrinterInfo.Orientation.PORTRAIT;
myPrinterInfo.numberOfCopies = 1;
myPrinterInfo.ipAddress=printerIP;


mLabelInfo.labelNameIndex=LabelInfo.QL700.valueOf("W29H90").ordinal();
mLabelInfo.isAutoCut = true;
mLabelInfo.isEndCut =true;

myPrinter.setPrinterInfo(myPrinterInfo);
myPrinter.setLabelInfo(mLabelInfo);
printResult=myPrinter.printFile(filePath);
return printResult.errorCode.toString();
}}

the error : ERROR_COMMUNICATION_ERROR
 
Upvote 0
I don't see something wrong, unfortunately. Perhaps they have a newer com.brother.ptouch.sdk and some commands are not properly recognized.
 
Upvote 0
I have tried with your BrotherPrintLibrary.jar 192k file and from brother site 152k

maybe the problem with the "so files" like you had ?
I don't know if i need them
 
Last edited:
Upvote 0
Back
Top