Delphi在Android下使用Java库的方法

 更新时间:2018年11月14日 14:59:18   作者:子航  
这篇文章主要介绍了Delphi在Android下使用Java库的方法,本文以Android的USB串口通讯库为例,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

 本文将以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设置

  3.2设置工程属性:

  选择SDK版本:

 

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)

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库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android使用TabLayou+fragment+viewpager实现滑动切换页面效果

    Android使用TabLayou+fragment+viewpager实现滑动切换页面效果

    这篇文章主要介绍了Android使用TabLayou+fragment+viewpager实现滑动切换页面效果,需要的朋友可以参考下
    2017-05-05
  • Android中获取sha1证书指纹数据的方法

    Android中获取sha1证书指纹数据的方法

    大家都知道在Android开发中,经常要获取sha1证书指纹,所以这篇文章主要介绍在Android中如何使用命令获取sha1证书指纹数据的方法,有需要的可以参考借鉴。
    2016-09-09
  • Android实现带进度条的WebView

    Android实现带进度条的WebView

    这篇文章主要介绍了Android实现带进度条的WebView,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android实现快递物流跟踪布局效果

    Android实现快递物流跟踪布局效果

    本篇文章主要介绍了Android实现快递跟踪布局效果,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Android端TCP长连接的性能优化教程分享

    Android端TCP长连接的性能优化教程分享

    在开发过程中,我们经常会用到TCP/IP连接实现即时数据传输,下面这篇文章主要给大家介绍了关于Android端TCP长连接的性能优化的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2018-03-03
  • Android实现读取扫码枪内容(条形码)

    Android实现读取扫码枪内容(条形码)

    这篇文章主要为大家详细介绍了Android实现读取扫码枪内容、条形码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Kotlin Thread线程与UI更新详解

    Kotlin Thread线程与UI更新详解

    本篇主要介绍Kotlin中Thread线程与UI更新,注意不是协程而是线程。Kotlin本身是支持线程的。同时协程也是运行在线程中的
    2022-12-12
  • 详解Android中实现Redux方法

    详解Android中实现Redux方法

    本篇文章给大家通过代码实例教学Android中实现Redux的方法,有需要的朋友跟着参考下吧。
    2018-01-01
  • 解析Android截取手机屏幕两种实现方案

    解析Android截取手机屏幕两种实现方案

    这篇文章主要介绍了解析Android截取手机屏幕两种实现方案,非常具有实用价值,需要的朋友可以参考下
    2017-04-04
  • 谈谈对Android View事件分发机制的理解

    谈谈对Android View事件分发机制的理解

    本篇文章主要介绍了谈谈对Android View事件分发机制的理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论