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.mfbz.cn/a/268542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【重点!!!】【堆】215.数组中的第K个最大元素

题目 法1:小根堆 最大的K个元素 > 小根堆(类似上窄下宽的梯形) 最小的K个元素 > 大根堆(类似倒三角形) 必须掌握!!! class Solution {public int findKthLargest(int[] nu…

React 路由跳转

1. push 与 replace 模式 默认情况下,开启的是 push 模式,也就是说,每次点击跳转,都会向栈中压入一个新的地址,在点击返回时,可以返回到上一个打开的地址, 就像上图一样,我们每次返…

六西格玛的科技漩涡——张驰咨询如何促成企业变革

在管理的海洋里,六西格玛管理是一艘稳健的航船,在质量管理的汪洋中乘风破浪,尽管质疑之声像远处的风暴不断逼近,但张驰咨询公司依靠这艘航船坚持初心,驭风而行。 20载耕耘,张驰咨询不仅仅是培养了超过8000…

工具系列:TensorFlow决策森林_(7)检查和调试决策森林模型

文章目录 设置训练一个简单的随机森林绘制模型检查模型结构手动创建模型结束树写作 在本文中,您将学习如何直接检查和创建模型的结构。我们假设您已经熟悉了在初级和中级介绍的概念。 在本文中,您将: 训练一个随机森林模型并以编程方式访问其…

第十三章 常用类(Math 类、Arrays 类、System类、Biglnteger 和BigDecimal 类、日期类)

一、Math 类(P481) Math 类包含,用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 (1)abs:绝对值 (2)pow:求幂 (3)c…

Ubuntu 20.04使用Livox Mid-360

参考文章: Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一:Livox mid 360驱动安装与测试 前言: Livox mid360需要使用Livox-SDK2,而非Livox-SDK,以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…

在windows系统中,如何用命令行查看服务的状态

在Windows系统中,您可以使用命令行来查看服务的状态。请按照以下步骤操作: 打开命令提示符窗口。您可以通过按下Win键并输入"cmd"来找到并打开命令提示符。 在命令提示符窗口中,输入以下命令查看所有服务的状态: sc …

基于FPGA的图像Robert变换实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga的结果导入到matlab显示: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ..................................…

1 手写第一个Win32窗口程序

1 基础概念 什么是窗口? 答:窗口就是屏幕上的一片区域,接受用户的输入,显示程序的输出。可以包含标题栏、菜单栏、工具栏以及控件等。什么是句柄? 答: 作为一种管理和操作系统资源的机制,提供了…

2048小游戏

以下运算核心 local lbrt{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,13,9,5,1,14,10,6,2,15,11,7,3,16,12,8,4,4,3,2,1,8,7,6,5,12,11,10,9,16,15,14,13,1,5,9,13,2,6,10,14,3,7,11,15,4,8,12,16,} local num{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,} --当前方向、是否正在进行、是否…

基于鸢尾花数据集的逻辑回归分类实践

基于鸢尾花数据集的逻辑回归分类实践 重要知识点 逻辑回归 原理简介: Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)&#xff0c…

Gaussian-Splatting 训练并导入Unity中

这个周末玩点啥~🐞 🍔资源下载🍥环境安装💡安装C编译工具💡安装Python💡安装CUDA💡添加ffmpeg到环境变量Path💡pytorch安装💡tqdm 安装💡diff-gaussian-raste…

Kubernetes(K8S)快速入门

概述 在本门课程中,我们将会学习K8S一些非常重要和核心概念,已经操作这些核心概念对应组件的相关命令和方式。比如Deploy部署,Pod容器,调度器,Service服务,Node集群节点,Helm包管理器等等。 在…

学习C语言可以从以下几个方面入手

学习C语言可以从以下几个方面入手: 了解基础知识:首先,你需要了解C语言的基本语法和规则,包括变量、数据类型、运算符、控制结构等。可以通过阅读相关的教材或在线教程来学习这些基础知识。动手实践:理论知识的学习是…

算法通关第二十关-青铜挑战认识图结构

大家好我是苏麟 , 今天来聊聊图结构 . 我们平时在工作、学习中会大量使用图结构,不过呢在使用代码进行具体实现的时候极少使用图,主要是图里容易产生环,难以处理。 在算法里,考察图也不是很多,主要是图的表示非常复杂&…

Linux的进程概念、进程标识符、进程状态

一、上期回顾 在我们上周简单了解完冯诺伊曼体系结构和操作系统,知道了外设和CPU之间的数据交流必须要通过内存,操作系统是一个对软硬件资源做管理的软件,本质是对数据做管理,在语言层面就是对数据结构做管理,进行增删…

基于STM32的DS1302实时时钟模块应用

DS1302是一款低功耗的实时时钟芯片,被广泛应用于各种电子产品中。它具有准确计时、多种时间格式表示、定时报警等功能,适用于记录时间、日期和闹钟。在本文中,我们将介绍如何在基于STM32的开发环境中使用DS1302实时时钟模块,并给出…

傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下: PHP # 设置基础镜像 FROM php:8.2-fpm# install dependencies RUN apt-get update && apt-get install -y \vim \libzip-dev \libpng…

基于稀疏表示的小波变换多光谱图像融合算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 小波变换融合 PCA融合 基于稀疏表示的小波变换多光谱图像融合算法 性能指标对比 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........…

java八股 spring + mybatis

Spring常用注解(绝对经典)_spring注解-CSDN博客 框架篇-02-Spring-单例bean是线程安全的吗_哔哩哔哩_bilibili 1.spring.bean 单例 线程不安全 2.AOP 项目里可以说记录用户登录日志,利用request去获取姓名、ip、、请求方式、url&#xff0…
最新文章