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 模拟器上运行。

PLC-IoT 网关开发札记(1):存档和分发 Android App_第1张图片

分发步骤(亲测可用)

配置 Notes.Android

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

“应用程序” 选项卡

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第2张图片

填写 Android 清单(Android Manifest)

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

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第3张图片

配置 “Android 选项”

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第4张图片

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

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第5张图片

“Android 包签名”选项卡

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

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第6张图片

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

生成和打包、分发

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第7张图片

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第8张图片

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第9张图片

然后点击 “分发”。

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

PLC-IoT 网关开发札记(1):存档和分发 Android App_第10张图片

PLC-IoT 网关开发札记(1):存档和分发 Android App_第11张图片

PLC-IoT 网关开发札记(1):存档和分发 Android App_第12张图片

PLC-IoT 网关开发札记(1):存档和分发 Android App_第13张图片

转存和安装

我使用微信的文件传输助手把分发的 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)之前不要设置签名,而是在发布时选择签名标识。

谬误之处,请多指正。

你可能感兴趣的:(visual,studio,android,设计模式,c#11.0,物联网)