辉煌国际网址: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.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库需要的文件也同时添加
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/rumen/sscc/s51199.shtml
我要分享到:
必备CSS教程 Essential CSS Tutorials
- • css height
- • css line-height
- • css width
- • css min-width
- • css max-width
- • css min-height
- • css max-height
- • css border
- • css background
- • css float
- • css clear
- • css display
- • css font
- • css text-transform
- • css英文首字母大写
- • css font-variant
- • css font-weight
- • css font-style
- • css text-decoration
- • css 删除线
- • div css 虚线
- • css 注释
- • html 注释
- • css padding
- • css margin
- • css 文本
- • css font-size
- • css font-family
- • css color
- • css text-align
- • css text-indent
- • css 超链接(css a)
- • css 优化压缩
- • css id(css #)
- • css class(css .)
- • css ul li列表
- • css 圆角圆边
- • css 父级子级
- • css 指针概念
- • css cursor
- • css overflow
- • html px em pt网页单位
- • CSS important
- • CSS position
- • css z-index
- • css white-space
- • css img图片
- • css class id
- • css link与@import区别
- • css 选择器
- • css引入html
必备HTML基础教程 Essential HTML Tutorials
- • html img图片标签
- • html em标签(EM强调标签)
- • html strong加粗(strong标签)
- • html B加粗(b加粗标签)
- • strong与B加粗区别
- • h1 h2 h3 h4标签(html标题标签)
- • html A超链接锚文本
- • html注释
- • html head头部标签
- • html title标题标签
- • html meta标签
- • html link标签
- • html i斜体标签
- • html u下划线标签
- • html s删除线标签
- • html换行br标签
- • html p段落标签
- • p标签与br标签区别
- • html div标签元素
- • html span标签
- • html font标签
- • html script标签
- • html px em pt网页单位
- • html ul li列表
- • ol li列表
- • dl dt dd标签组
- • table tr td表格
- • table tr th表格
- • html form表单
- • html form input
- • html form textarea文本区域
- • html select下拉与跳转(Html select)
- • html iframe框架
- • html网页结构
- • htm html shtml区别用法
- • 网页编码charset
- • UTF-8 GBK UTF8 GB2312区别联系
- • 先写html还是先写CSS
- • 显示扩展名
- • html标签大全集合
- • html常用标签
- • 网页源代码是什么
如对文章有任何疑问请提交到DIV CSS论坛,或有任何网页制作CSS问题立即到CSS论坛发贴求解 或 直接DIVCSS5网页顶部搜索遇到DIVCSS疑问。
CSS教程文章修订日期:2018-11-15 10:51 原创:DIVCSS5
本文www.divcss5.com DIVCSS5版权所有。
最新文章NEWS
- • 虚拟主机相关知识
- • DIV CSS加载失败
- • DIV+CSS规范命名大全集合
- • CSS margin属性与用法教程
- • padding_css padding用法详解
- • DIV+CSS中让布局居中_背景图片居中_文字内容居中
- • html与xhtml的区别规范是什么
- • DIV+CSS与TABLE的网页优势何在?
- • 浅谈DIV+CSS设计开发的Xhtml网页对SEO优化的影响
- • 开发DIV+CSS的工具集合
CSS 特效CSS EFFECTS
- 纯DIV+CSS下拉菜单模块模板
- DIV+CSS分页_CSS翻页代码模板
- css form实例 用CSS实现表单form布局实例
- 经典DIV+CSS下拉菜单
- div+css不间断上下滚动模板
- 向上不间断滚动div+css+js模板
相关文章RELATED
- • mg游戏官方网站:JavaScript学习笔记之图片库案例分析
- • 十大博彩娱乐公司排名:java使用jacob实现word转pdf
- • 澳门新金沙线上娱乐:Unix 哲学与微服务架构
- • 辉煌国际网址:Delphi在Android下使用Java库的方法
- • 在线球赛:简易语言发音比较命令使用说明
- • 球皇网:、vue本地服务的完美解决方案无法通过外部IP访问
- • 百乐访官网:Html格式化输出JSON示例(测试界面)
- • 时时彩游戏气氛浓
- • 时时彩让你淡定赚钱
- • 时时彩是一个靠谱的游戏平台