本文將以Android的USB串口通訊庫(kù)為例,介紹Delphi如何在Android中使用Java的庫(kù)。
成都創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元豐都做網(wǎng)站,已為上家服務(wù),為豐都各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
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è)置


3.2設(shè)置工程屬性:
選擇SDK版本:


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)

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í)添加

總結(jié)
以上所述是小編給大家介紹的Delphi在Android下使用Java庫(kù)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
網(wǎng)站標(biāo)題:Delphi在Android下使用Java庫(kù)的方法
鏈接URL:http://www.chinadenli.net/article30/igpgpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、網(wǎng)站導(dǎo)航、用戶體驗(yàn)、企業(yè)建站、服務(wù)器托管、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)