ldra指令(ldrex指令)

ldra指令(ldrex指令)前言 由于项目需求 我需要 Unity 与插在手机 USB 口的单片机通信 一开始十分不想接触 java 和 android studio 因为有墙 每次我打开 gradle 都需要下载组件下载很久很久 大约一个小时 而且 gradle 的一堆语法我都看不懂 非常折磨 所以我一开始避开 android 找了很多别的技术路径 但是最后他们全部不好使 如果使用 会报错没有权限访问 dev 路径 Access to the path dev is denied 或者各种关于权限的问题 我遇见了至少三四种



前言

由于项目需求,我需要Unity与插在手机USB口的单片机通信,一开始十分不想接触java和android studio。因为有墙,每次我打开gradle都需要下载组件下载很久很久,大约一个小时,而且gradle的一堆语法我都看不懂,非常折磨。所以我一开始避开android,找了很多别的技术路径,但是最后他们全部不好使:

    如果使用,会报错没有权限访问/dev路径:

    Access to the path '/dev' is denied.

    或者各种关于权限的问题,我遇见了至少三四种,就不多记录了。

    一开始百思不得其解,因为写这些博客的博主都已经调通了,但是我就是调不通,但后来发现华点了,他们的标题都是"安卓串口"。安卓串口 和 安卓USB串口是不一样的,串口有可能指的是工业设备上的开发板引出的 485 串口。例如如下这些设备也很可能用的安卓系统,且一般都是有root权限的:

    而对于正常用户的没有root权限的手机,最后就只剩使用android studio导出jar包,unity调用jar包这一条路了。原因则是android根本没有给so代码(即C代码)申请USB权限的接口,只有java有接口可以申请该权限。

    构建项目

    首先需要明确,咱们是需要android studio生成一个jar包给unity用,arr包亦可(arr包约等于jar包,他们的区别自行上网了解)。

    这个流程需要咱们创建一个android studio project,具体流程参考下面这个文章

      引用 usb-serial-for-android库

      有了工程大框架后,我们在编写具体代码前需要引用 usb-serial-for-android库,这个库是最著名的,android USB serial通信的唯一解决方案。至于怎么用,当然是参考官方github的readme:

      (https://github.com/mik3y/usb-serial-for-android) 

      但是,对gradle不熟的家人们估计一看就懵了:

      所以咱们从头说起,首先对android studio项目结构做一个科普,以防跟我一样的小白连gradle是什么都不知道:

      android studio项目使用gradle作为构建工具,整个项目有一个大的build.gradle.kts,每个模块有一个小的build.gradle.kts,用于规定各自都需要编译什么,都有哪些依赖库。gradle的定位相当于C语言的cmakelist。

      其中,由于android版本的更新,整个项目的build.gradle.kts 很多配置全部移动到了项目根目录下的settings.gradle.kts中,所以你有时候会在网上找到两种不同的gradle代码,其中一种会报错,这属于正常情况,忍就行了。

      比如:下面这些代码现在就需要放在settings.gradle.kts中

      只有在settings.gradle.kts写了 maven { url = uri( " https://jitpack.io" ) }  ,才能在小的build.gradle.kts里引用这种从网络上下载的库:

      但是,实测国内因为网络有墙的问题,即使写对了,也会在构建的时候卡在下载不动弹。

      所以替代措施就是手动下载过来,然后在小的gradle里直接按照路径引用即可:

      (需要将jar包放在对应目录,即:你的library module的libs文件夹下。)

      jar包的下载地址:https://github.com/cvasquez-github/unity-android-serial-arduino/blob/main/MyUnityPlayerActivity.java

      然后即可编写相关代码,相关代码就是在这篇博客上修修补补,加上引用usb-serial-for-android库的部分,如果有人需要可以在评论区说,需要的人多了我会公布我自己写的代码。

      最终生成arr包即可,也不用改class.jar和 AndroidManifest文件。Unity里怎么用导出的arr包也是看这个博客:

      - Unity与Android交互方案优化版 - 简书 

      到这里本文正题就已经结束了,最终效果如下:

      附录 1:Unity SO文件的兼容性问题

      虽然so库导入unity的做法不能用,但是记录一波调试的流程。

      用ndk编译so包,导入unity使用,应该需要有root权限的,安卓手机一般没有root权限,不能用。如这篇博客,我试了很久就不好使:

      (https://blog.csdn.net/gaoyu123456789/article/details/133939181) 

      不同CPU架构需要不同的so库,需要使用 ndk 编译c语言代码,生成多个so库,以下面的路径放在unity文件夹下

      对于unity,因为现在的手机都是arm64 的架构的了,只有你导出的时候导出arm64 版本的,手机才能找到相应的库,

      需要将改成il2cpp,而不是mono,否则只能导出到armv7 平台,无法导出到arm64-v8a平台

      il2cpp的兼容性更好,之后一直用这个就行了,但编译速度慢,如果没有高阶操作,不考虑兼容性问题,还是mono快一点

      附录 2:司马博主,活全家

      这些博主看着写的有模有样,我还花很大时间照着他们写的摸索,但看他们主页才发现一天能发几百篇文章,写的技术路线也完全行不通,只能说活全家了。

      - mob649e816209c2的博客_51CTO博客 

      - unity android 通过USB转串口线连接_mob649e816209c2的技术博客_51CTO博客 

      - unity android 通过USB转串口线连接_mob649e816209c2的技术博客_51CTO博客 

      编程小号
      上一篇 2025-02-19 07:17
      下一篇 2025-03-17 09:27

      相关推荐

      版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
      如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5506.html