PLC-IoT 网关开发札记(1):存档和分发 Android App

开篇记

PLC-IoT 网关是作者开发的产品,根据客户需求,立项开发手机 App,为用户提供一种方便、直观、友好的设备操控方式。网关运行的是嵌入式 Linux 操作系统,计划通过某一种通信协议(例如 HTTP,MQTT或者 TCP Socket 等)和手机 App 数据交互。网关已经安装了 HTTP 协议栈,从今天开始手机侧的 App 开发。

开发使用的 IDE 是 Visual Studio,开发框架使用 Xamarin.Forms,同时开发 Android 和 IOS 应用,优先开发 Android,然后再考虑 IOS。

之所以选择 Visual Studio 而没有选择 Android Studio,首要的原因是 VS 可以同时开发 Android 和 IOS 应用,而 AS 好像不能开发 IOS 应用;另一个原因是 VS 使用 C#,AS 使用 Java(我没碰过 Kotlin)。我对 C# 比较熟悉,对 Java 比较不熟悉。C# 11 也具备了 Interface,功能覆盖能力不输于 Java。

开发嵌入式软件和开发手机 App 差异很大,扔下 VS 和 C# 也很长时间了,只能慢慢捡起来。

这一次的目标是建立一个简单的移动应用,然后打包分发到本地,生成一个 .apk,在手机上安装这个 .apk,能正确运行。

使用 Visual Studio 分发 Android 项目是移动 App 开发的必备步骤。在 Visual Studio 的各个版本中,App 分发的步骤和选项略有不同,本文使用 Visual Studio 2022 版本发布 Xamarin.Forms 的 Android App,经过诸多尝试,顺利地走通了发布的程序,供各位码神参考。

文中遵照 learn.microsoft.com (创建 Xamarin.Forms 应用程序快速入门 - Xamarin | Microsoft Learn)的步骤操作,创建了 Notes 项目,如下图所示。项目创建了三个页面:NotesPage、AboutPage和NoteEntryPage,纳入 Views,Models 中定义了 Note 类,使用 sqlite-net-pcl 作为本地数据源。项目的建立严格地遵照了 Microsoft Learn 的指引,在 Debug/Any CPU 配置下可以正确地在 Android 模拟器上运行。

分发步骤(亲测可用)

配置 Notes.Android

在解决方案管理器中,右键点击 Notes.Android 项目,点击 “属性”,打开其项目配置界面如下图。

“应用程序” 选项卡

通过“应用程序”选项卡中可以重新定义程序集的名称和默认命名空间(Namespace),可以重新指定 Android 编译版本的目标框架。这里均使用项目的默认值。

填写 Android 清单(Android Manifest)

如果不关注发布的 apk 的取名,可以使用项目的默认值,程序包名称的取名这时也不需要过多关注,应用程图标可以不设置(有些应用商店要求 apk 必须设置图标,那时再设置也不迟),应用程序主题保持不变,版本号设置为1,版本名称随便取名即可(我的做法是每一次发布都在版本名称的最后一部分bxxx的数字加1)。最低 Android 版本和目标 Android 版本设置成当前流行值,所需权限使用项目创建时的默认值。

需要注意的是 VS 有时会莫名其妙地修改了“最低 Android 版本”号,每一次设置时,应检查一遍,如果“最低 Android 版本”号和“目标 Android 版本”过低时,会导致分发失败,或者在手机真机上运行时发生闪退。

配置 “Android 选项”

确保“配置”为 Release,“平台”为 Any CPU。Debug 配置是不能分发的,指定 Any CPU 才可以在分发时获得支持多个 CPU 体系结构的代码和动态库。

Android 包格式选择 APK,Dex 编译器选用 d8(当前项目 VS 不支持 dx),代码压缩器可以不选,要选的话,应指定 r8,链接选择 “仅 SDK 程序集”,这样可以缩小 APK 的尺寸。

Android 选项卡的参数中大部分可以使用默认值,要特别注意 “调试程序” 要选择 “.NET (Xamarin)”,点击“高级”按钮,在 “支持的体系结构” 里,把 armeabi-v7a,arm64-v8a,x86 和 x86_64 都选中。当前市面上手机的处理器体系结构大多数都是 armv7 和 armv8 的,我尝试过不选择 x86 和 x86_64,打包过程中都发生了错误,现在尚不知为什么——反正,成功的打包和分发操作中,我总是把这四个体系结构都选中了。我猜想这其中一定会有某种副作用的,但在当前测试中没有发现运行时错误。以后留心就是了,先把整个流程走通再说。

“Android 包签名”选项卡

请注意:这里不要勾选“使用以下密钥存储详细信息对 .APK 文件签名”。我的操作过程中,每一次选中这个选项都会导致打包过程失败。

图中灰显的内容是我操作失败时的设置,不用管它们。

“生成”、“生成时间” 和 “引用路径” 选项卡使用默认值,不需要修改

生成和打包、分发

完成上述配置后,按 CTRL+S 保存。然后重新生成解决方案,等待生成成功(如果出错,那肯定是要修改的啦)。生成过程有点漫长,需要耐心等待 VS 底部状态栏的“漏斗”装满。点击 “生成” 菜单(或者右键点击 “Notes.Android”,选择 “存档...”),VS 启动打包和存档。

存档过程在 “存档管理器” 中自动开始,一个无范围进度条在滚动,

等待存档成功,可以看到这一次存档的基本信息如下。

然后点击 “分发”。

  1. 出现选择通道时选择 “临时”;
  2. 签名标识时选中一个先前已经生成的签名标识,如果没有签名标识,VS 会引导建立一个,然后点击 “另存为”;
  3. 在 “另存为” 对话框选择一个你认为方便存储的地方(我选择的是桌面的一个文件夹,专门存放分发的 apk 文件);
  4. 保存后,VS 提示输入签名密码,这时输入你在创建签名标识时设定的密码;
  5. 存档继续进行,如果没有错误的话,很快就完成了分发过程。

转存和安装

我使用微信的文件传输助手把分发的 apk 转存到我的手机,在手机上安装这个 app,手机会提示 “xxx 应用不符合 xx 市场安全规范,有风险......”,选择 “继续安装” 即可。App 安装好后,运行正确。

总结

Visual Studio 2022 发布 Xamarin.Forms 应用操作成功的关键如下。

  • 选择 “Release” 配置,和 “Any CPU”。
  • 调试程序选择 “.NET (Xamarin)”,“高级” 选项中把 armeabi-v7a、arm64-v8a、x86、x86_64 四个 CPU 体系结构都选中。
  • 在发布 Xamarin.Forms 应用时,在生成和存档(Archive)之前不要设置签名,而是在发布时选择签名标识。

谬误之处,请多指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kylin-Desktop-V10-SP1-General-Release-2303-X86_64-海光版(hygon c86)下载

csdn下载 【免费】Kylin-Desktop-V10-SP1-General-Release-2303-X86-64-海光版-001资源-CSDN文库 【免费】Kylin-Desktop-V10-SP1-General-Release-2303-X86-64-海光版-002资源-CSDN文库 【免费】Kylin-Desktop-V10-SP1-General-Release-2303-X86-64-海光版003资源-CSDN文库…

Android studio 连接夜神模拟器

前言: 在夜神模拟器安装目录,直接打开powerShell,然后输入:nox_adb.exe connect 127.0.0.1:62001,命令无法执行出现以下错误: 按照上面的提示,键入:.\nox_adb.exe 依然无法执行 如…

长宁区科协常务副主席张正行一行到访深兰科技

12月22日,上海市长宁区科协常务副主席张正行、学会部部长洪嫣一行到访深兰科技总部,并与深兰科技集团董事长陈海波、深兰科技集团技术副总裁王雷博士等进行了会谈。 座谈中,陈海波详细介绍了深兰科技当前的企业发展及业务现状,并就…

真实案例扫描APP开发——基于实例分割实现拍照文档实时边缘检测(C++/JNI实现)

前言 这是一个安卓NDK的项目,想要实现的效果就是拍照扫描,这里只涉及到的只有边缘检测,之后会写文档滤镜、证件识别与证件1比1打印,OCR、版面分析之后的文档还原。我的开发环境是Android Studio 北极狐,真机是华为mat…

【网络安全】Log4j 远程代码执行漏洞解析

一、简介 Log4j2 是一个用于 Java 应用程序的成熟且功能强大的日志记录框架。 它是 Log4j 的升级版本,相比于 Log4j,Log4j2 在性能、可靠性和灵活性方面都有显著的改进。 二、特点 Log4j2 是一个功能强大且灵活的日志记录框架,旨在提供高…

数据结构之<堆>的介绍

1.简介 堆是一种特殊的数据结构,通常用于实现优先队列。堆是一个可以被看作近似完全二叉树的结构,并且具有一些特殊的性质,根据这些性质,堆被分为最大堆(或者大根堆,大顶堆)和最小堆两种。 2.…

Spring Boot:Spring Boot 入门、yaml 配置文件给属性赋值、自动装配原理详解

文章目录 Spring Boot - 01一、概述二、第一个 Spring Boot 程序补充知识 三、配置文件1. yaml 配置文件2. 使用 yaml 配置文件给属性赋值3. 松散绑定以及数据校验4. 配置文件的位置以及多环境配置 四、Spring Boot 分析1. pom.xml2. 启动器3. 主程序4. 自动装配原理5. 主启动类…

ELK日志分析系统,ELFK详解部署

概念简述 ELK日志分析系统是一个开源的日志管理平台,它由三个主要组件组成,分别是Elasticsearch、Logstash和Kibana。这三个组件协同工作,提供了一个完整的解决方案,用于收集、存储、搜索、分析和可视化大规模的日志数据。以下是E…

世微 AP510X 单路低压差线性恒流芯片 3-100V内置ESOP8 LED照明

说明 AP510X 是一系列电路简洁的单路线性LED恒流芯片,适用于3-60V电压范围的LED恒流调光领域。AP510X采用我司算法,可以实现高精度的恒流效果,输出电流恒流精度≤3%,电源供电工作范围为3-40V,可以轻松满足…

Cloudstack多个管理服务器节点

https://docs.cloudstack.apache.org/en/4.18.0.0/adminguide/reliability.html 参考翻译: 代理上支持多个管理服务器 在具有多个管理服务器的Cloudstack环境中,可以根据算法配置代理,将其连接到哪个管理服务器。这对于内部负载均衡器或高可…

CUMT--Java复习--网络编程

目录 一、Java网络API 1、InetAddress类 2、URL类 3、URLConnection类 4、URLDecoder类和URLEncoder类 二、基于TCP的网络编程 1、Socket类 2、ServerSocket类 三、网络通信过程 一、Java网络API Java中有关网络方面的功能都定义在java.net中。 1、InetAddress类 Jav…

【Python版】手把手带你如何进行Mock测试

什么是mock? mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因为真实…