Delphi在Android下使用Java庫(kù)的方法
本文將以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è)置
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ì)腳本之家網(wǎng)站的支持!
- 解決java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper問(wèn)題
- Java可以寫android的應(yīng)用程序嗎
- 解決AndroidStudio無(wú)法運(yùn)行java中的mian方法問(wèn)題
- Java/Android 實(shí)現(xiàn)簡(jiǎn)單的HTTP服務(wù)器
- java、android可用的rtp封包解包h264案例
- AndroidStudio插件GsonFormat之Json快速轉(zhuǎn)換JavaBean教程
- Android通過(guò)Java sdk的方式接入OpenCv的方法
- 使用Android studio3.6的java api方式調(diào)用opencv
- 淺談Android Studio導(dǎo)出javadoc文檔操作及問(wèn)題的解決
- 解決android studio 打開(kāi)java文件 內(nèi)容全變了的問(wèn)題
- Android Studio Kotlin代碼和java代碼相互轉(zhuǎn)化實(shí)例
- Android實(shí)現(xiàn)上傳圖片至java服務(wù)器
- Android 是如何捕捉 java 異常的
相關(guān)文章
詳解Android中Handler的內(nèi)部實(shí)現(xiàn)原理
這篇文章主要介紹了Android中Handler的內(nèi)部實(shí)現(xiàn)原理,對(duì)Handler和消息循環(huán)的實(shí)現(xiàn)原理進(jìn)行源碼分析,需要的朋友可以參考下2015-12-12Android自定義RadioGroupX實(shí)現(xiàn)多行多列布局
這篇文章主要為大家詳細(xì)介紹了Android自定義RadioGroupX實(shí)現(xiàn)多行多列布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Android仿微信實(shí)現(xiàn)評(píng)論功能
這篇文章主要為大家詳細(xì)介紹了Android仿微信實(shí)現(xiàn)評(píng)論功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Android數(shù)據(jù)持久化之ContentProvider機(jī)制詳解
這篇文章主要介紹了Android數(shù)據(jù)持久化之ContentProvider機(jī)制,結(jié)合實(shí)例形式分析了ContentProvider機(jī)制的原理與相關(guān)使用技巧,需要的朋友可以參考下2017-05-05Android Studio打包H5網(wǎng)址頁(yè)面,封裝成APK
大家好,本篇文章主要講的是Android Studio打包H5網(wǎng)址頁(yè)面,封裝成APK,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12Android中Textview和圖片同行顯示(文字超出用省略號(hào),圖片自動(dòng)靠右邊)
Android中Textview和圖片同行顯示,文字超出用省略號(hào)顯示,圖片自動(dòng)靠右邊??吹竭@個(gè)問(wèn)題本來(lái)認(rèn)為是一個(gè)很正常的需求,看起來(lái)很簡(jiǎn)單,但是做起來(lái)卻遇到了很蛋疼的問(wèn)題,怎么搞的都不行,堵了很長(zhǎng)時(shí)間,下面說(shuō)一下解決的方案,希望遇到這樣問(wèn)題的朋友可以使用。2016-12-12Android如何給Textview添加菜單項(xiàng)詳解(Java)
TextView是android里面用的最多的控件,TextView類似一般UI中的Label,TextBlock等控件,只是為了單純的顯示一行或多行文本,下面這篇文章主要給大家介紹了關(guān)于Android如何給Textview添加菜單項(xiàng)的相關(guān)資料,需要的朋友可以參考下2022-01-01使用PackageManager獲得應(yīng)用信息實(shí)例方法
PackageManager是Android中一個(gè)很有用的類,能夠獲取已安裝的應(yīng)用(包)的信息,如應(yīng)用名稱、圖標(biāo)、權(quán)限,安裝、刪除應(yīng)用(包)等2013-11-11