首页 > 系统 > Android > 正文

Delphi在Android下使用Java库的方法

2019-10-21 21:35:58
字体:
来源:转载
供稿:网友

本文将以Android的USB串口通讯库为例,介绍Delphi如何在Android中使用Java的库。

  USB串口通讯库地址:

   https://github.com/felHR85/UsbSerial

一、Java库编译

  1.安装Android Studio

  2.在Android Studio中将SDK路径指向Delphi的SDK路径(避免重复安装SDK)

  3.下载UsbSerial,用Android Studio打开,

  3.1Android Studio设置(File->Settings)

  gradle设置

Delphi,Android,Java库

Delphi,Android,Java库

  3.2设置工程属性:

  选择SDK版本:

Delphi,Android,Java库

 Delphi,Android,Java库

4.编译UsbSerial(Build-》Make Project)

  编译过程可能需要下载Gradle相关文件。

  编译完成后将生成classes.jar

5. 生成DEX文件

5.1生成dex需要用到一个 dx.bat,具体目录是在%Android%/build-tools/28.0.3(%Android%为Android SDK目录,28.0.3不特指,每个tools下都有的,%Android%使用的不一定是C:/Users/Public/Documents/Embarcadero/Studio/19.0/PlatformSDKs/android-sdk-windows)

Delphi,Android,Java库

5.2进入cmd.exe 配置环境变量:路径是dx.bat下的目录

set ANDROID_HOME=/C:/Users/Public/Documents/Embarcadero/Studio/19.0/PlatformSDKs/android-sdk-windows

set path="C:/Program Files (x86)/Java/jdk1.8.0_144/bin";%PATH%

dx --dex --output=C:/DelphiComps/UsbSerial/bin/usbserial.dexC:/DelphiComps/UsbSerial/bin/classes.jar

这样就生成了usbserial.dex

二、合并dex文件

生成的dex文件需要与Delphi自带的dex文件进行合并。

Delphi自带的dex文件分为Debug版本,和Release版本,路径分别在%BDS%/lib/android/Debug,%BDS%/lib/android/Release

继续在cmd.exe中:

set BDS=C:/Program Files (x86)/Embarcadero/Studio/19.0

set path="C:/Program Files (x86)/Java/jdk1.8.0_144/bin";%PATH%

java -cp %DX_LIB%/dx.jar com.android.dx.merge.DexMerger debug_classes.dex %BDS%/lib/android/Debug/classes.dex ./usbserial.dex

java -cp %DX_LIB%/dx.jar com.android.dx.merge.DexMerger release_classes.dex %BDS%/lib/android/Release/classes.dex ./usbserial.dex

如果是Debug模式:

copy debug_classes classes.dex

如果是Release模式:

copy Release_classes classes.dex

三、生成Delphi访问接口

Delphi 10.1以上自带的Java2OP工具,能够自动生成java类的接口文件。

在Cmd.exe中

set BDS=C:/Program Files (x86)/Embarcadero/Studio/19.0

set path="C:/Program Files (x86)/Java/jdk1.8.0_144/bin";%PATH%set path=%BDS%/bin/converters/java2op";%PATH%java2op -jar classes.jar Android.JNI.UsbSerial.pas

此处的classes.jar即为usbserial编译后的java类库,生成Delphi的接口文件Android.JNI.UsbSerial.pas

五.使用Java类库

在Delphi工程中引用Android.JNI.UsbSerial.pas

获取USB管理服务接口

function GetUsbManager: JUsbManager;var UsbManagerService: JObject;begin UsbManagerService := SharedActivity.getSystemService(TJContext.JavaClass.USB_SERVICE); Result := TJUsbManager.Wrap((UsbManagerService as ILocalObject).GetObjectID);end;

 获取USB设备列表

function GetUsbDevices: TArray<JUsbDevice>;var UsbManager: JUsbManager; UsbDeviceList: JHashMap; UsbDeviceListIterator: JIterator; I: Integer;begin UsbManager := GetUsbManager; if UsbManager <> nil then begin  UsbDeviceList := UsbManager.getDeviceList;  SetLength(Result, UsbDeviceList.size);   UsbDeviceListIterator := UsbDeviceList.values.iterator;  for I := 0 to Length(Result) - 1 do   Result[I] := TJUsbDevice.Wrap((UsbDeviceListIterator.next as ILocalObject).GetObjectID); end;end;

 打开USB设备,返回USB连接接口 

function GetUsbConnection(Device: JUsbDevice): JUsbDeviceConnection;var UsbManager: JUsbManager;begin UsbManager := GetUsbManager; if UsbManager <> nil then  Result := UsbManager.openDevice(Device);end;  //创建USB串口 SerialDevice := TJUsbSerialDevice.JavaClass.createUsbSerialDevice(UsbDevice, UsbConnection); if SerialDevice = nil then begin  raise Exceptioin.Create('Cannot create serial device');  Exit; end;//打开USB串口 if not SerialDevice.syncOpen then begin  raise Exception.Create('Cannot open serial device');  SerialDevice := nil;  UsbConnection.close;  UsbConnection := nil;  Exit; end; //串口设置SerialDevice.setBaudRate(9600);SerialDevice.setDataBits(TJUsbSerialInterface_DATA_BITS_8);SerialDevice.setStopBits(TJUsbSerialInterface_STOP_BITS_1);SerialDevice.setParity(TJUsbSerialInterface_PARITY_NONE);SerialDevice.setFlowControl(TJUsbSerialInterface_FLOW_CONTROL_OFF); //读串口:if SerialDevice.syncRead(ReadBuffer, 50) >= 1 then Data := Data + TEncoding.UTF8.GetString(ToByteArray(ReadBuffer));   //写串口  SerialDevice.syncWrite(WriteBuffer, 1000);  

六、Delphi发布

1.权限设置,引用的Java类库需要的权限,需要在Delphi工程设置工添加上去。

2.将新生成的dex文件发布到远程路径classes/中,同时java库需要的文件也同时添加

Delphi,Android,Java库

总结

以上所述是小编给大家介绍的Delphi在Android下使用Java库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VEVB武林网网站的支持!


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表