国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Delphi在Android下使用Java庫(kù)的方法

2019-10-21 21:35:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文將以Android的USB串口通訊庫(kù)為例,介紹Delphi如何在Android中使用Java的庫(kù)。

  USB串口通訊庫(kù)地址:

   https://github.com/felHR85/UsbSerial

一、Java庫(kù)編譯

  1.安裝Android Studio

  2.在Android Studio中將SDK路徑指向Delphi的SDK路徑(避免重復(fù)安裝SDK)

  3.下載UsbSerial,用Android Studio打開(kāi),

  3.1Android Studio設(shè)置(File->Settings)

  gradle設(shè)置

Delphi,Android,Java庫(kù)

Delphi,Android,Java庫(kù)

  3.2設(shè)置工程屬性:

  選擇SDK版本:

Delphi,Android,Java庫(kù)

 Delphi,Android,Java庫(kù)

4.編譯UsbSerial(Build-》Make Project)

  編譯過(guò)程可能需要下載Gradle相關(guān)文件。

  編譯完成后將生成classes.jar

5. 生成DEX文件

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

Delphi,Android,Java庫(kù)

5.2進(jìn)入cmd.exe 配置環(huán)境變量:路徑是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文件進(jìn)行合并。

Delphi自帶的dex文件分為Debug版本,和Release版本,路徑分別在%BDS%/lib/android/Debug,%BDS%/lib/android/Release

繼續(xù)在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訪問(wèn)接口

Delphi 10.1以上自帶的Java2OP工具,能夠自動(dòng)生成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類庫(kù),生成Delphi的接口文件Android.JNI.UsbSerial.pas

五.使用Java類庫(kù)

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

獲取USB管理服務(wù)接口

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

 獲取USB設(shè)備列表

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;

 打開(kāi)USB設(shè)備,返回USB連接接口 

function GetUsbConnection(Device: JUsbDevice): JUsbDeviceConnection;var UsbManager: JUsbManager;begin UsbManager := GetUsbManager; if UsbManager <> nil then  Result := UsbManager.openDevice(Device);end;  //創(chuàng)建USB串口 SerialDevice := TJUsbSerialDevice.JavaClass.createUsbSerialDevice(UsbDevice, UsbConnection); if SerialDevice = nil then begin  raise Exceptioin.Create('Cannot create serial device');  Exit; end;//打開(kāi)USB串口 if not SerialDevice.syncOpen then begin  raise Exception.Create('Cannot open serial device');  SerialDevice := nil;  UsbConnection.close;  UsbConnection := nil;  Exit; end; //串口設(shè)置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發(fā)布

1.權(quán)限設(shè)置,引用的Java類庫(kù)需要的權(quán)限,需要在Delphi工程設(shè)置工添加上去。

2.將新生成的dex文件發(fā)布到遠(yuǎn)程路徑classes/中,同時(shí)java庫(kù)需要的文件也同時(shí)添加

Delphi,Android,Java庫(kù)

總結(jié)

以上所述是小編給大家介紹的Delphi在Android下使用Java庫(kù)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 弥渡县| 阿克陶县| 中牟县| 托里县| 泸水县| 延川县| 满城县| 礼泉县| 大连市| 法库县| 双柏县| 鄂托克旗| 屏边| 桓仁| 宜都市| 册亨县| 丰镇市| 双流县| 自贡市| 盐边县| 彩票| 灵武市| 青河县| 龙山县| 长汀县| 定襄县| 连山| 汉川市| 武威市| 紫阳县| 崇州市| 政和县| 隆安县| 刚察县| 卢湾区| 吉安县| 许昌市| 东兰县| 黄冈市| 呼图壁县| 汉源县|