设为首页 加入收藏

TOP

Delphi在Android下使用Java库(一)
2019-08-23 00:30:47 】 浏览:116
Tags:Delphi Android 使用 Java

 本文将以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.dex C:\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.createUsbSerialD
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇判断一个数是否是水仙花数 下一篇Delphi 10.3 Rio + iOS 12.1 SDK ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目