当前位置: 首页 > article >正文

MAUI(C#)安卓开发起步

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        用visual studio MAUI开发安卓对C#、微软流是个比较方便的方法,虽然可能不如原生开发那么强悍,做一般性的应用是绰绰有余的。不过实话说,同时给苹果和安卓开发不一定能节省多少时间,处理平台差异非常头疼,MAUI并没有很完善地解决平台差异。

目录

一、安装Visual Studio组件

二、生成新项目

2.1 应用类型

 ​编辑

2.2 框架版本

2.3 编译运行windows版 

三、安卓模拟器运行

3.1 安装模拟器

3.2 运行

四、模拟器无法启动怎么办

4.1 模拟器自身启动报错

 4.2 启用虚拟化和Hyper-V

 五、认识项目基本结构

5.1 目录结构

5.2 xaml

5.3 启动顺序


一、安装Visual Studio组件

        必须安装“.NET Multi-platform App UI”开发才行。

二、生成新项目

2.1 应用类型

 

        第一个项目可以从“.NET MAUI应用”开始,这是最标准的。

2.2 框架版本

        框架选择一般选长期支持的,如果你需要使用早期.NET版本,虽然项目里面可以改,但又不是可以改全部,所以呢,最好安装旧版本的visual studio。我现在用的版本只提供.NET8.0和9.0:

2.3 编译运行windows版 

         创建项目之后就可以直接编译运行,先试试“Windows Machine”的效果:

        挺难看的。那个大按钮可以点击,点击之后按钮上的文字变为点击次数:

         这就算项目创建成功了。但是不算可以起步了,因为我们要的事安卓版。

三、安卓模拟器运行

3.1 安装模拟器

        在菜单栏打开“工具”-“Andriod”-“Android Device Manager”:

        点那个大大的“+”添加一个设备,默认是Pixel 7,无所谓了。API版本其实越低越好,越低兼容的设备越多。

        需要自动下载一些东西,安装好后是这样:

        不用点“开始”,运行的时候会自动启动。 

3.2 运行

        改一下运行目标,从下拉中找到刚才建好的模拟器设备:

        点一下开始运行…… 第一次会很慢,要先编译,再启动模拟器,然后各种准备,最后才能看见效果:

        点一点也是一样的效果:

        这就算准备工作大功告成,可以开始正式开发了。

四、模拟器无法启动怎么办

4.1 模拟器自身启动报错

        如果运行程序发现报错:

        如果有个消息框一闪而过,可以打开安装模拟器的那个界面,手动运行一下,一样会出错但消息款不会自动消失:

        上面说得很清楚:

HAXM is deprecated and not supported by Intel any more. Please download and install Android Emulator Hypervisor Driver for AMD Processors, which also supports Intel Processors. Installing from SDK Manager is comming soon.

        意思是用于Intel CPU的加速器HAMX已经启用,你要换一个,但那个还不能自动安装。 

        你去SDK Manager(就是安装模拟器的菜单的下面一个菜单)看,发现其实HAMX没装,Android Emulator Hypervisor Driver也没装,然后你就想是不是装一下这个就行了……

        唉!别动,其实大概率是Hyper-V没装啊。没有Hyper-V才会去用HAXM或AEHD(就是Android Emulator Hypervisor Driver),但是我分别装了这两个也都没用,一切照旧,出错信息也不变。

 4.2 启用虚拟化和Hyper-V

        虚拟化一般在电脑的BIOS设定里开启,如果支持,一般默认是开启的。

        Hyper-V是操作系统的附加组件,在“启用或关闭Windows功能”里添加。对于windows11,在【设置】-【 系统】-【 可选功能】-【 更多windows功能】:

        安装好后重启系统,就会发现模拟器能够正确运行了。

        你在其他资料里发现除了Hyper-V还有个相关需要勾选,但是在我的系统上,那个条目根本就不存在。

 五、认识项目基本结构

5.1 目录结构

        上面的属性、依赖项、平台目录暂时不用关注,平台目录下是每个平台的专属内容,暂时不需要修改。

        下面的Resources、三个xaml、一个cs是重点。

5.2 xaml

        xaml是界面描述,每一个都对应一个.xaml.cs文件,xmal里面所需的C#代码就在对应的cs文件里。

        主界面对应的文件“MainPage.xaml”,内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="MauiApp1.MainPage"><ScrollView><VerticalStackLayoutPadding="30,0"Spacing="25"><ImageSource="dotnet_bot.png"HeightRequest="185"Aspect="AspectFit"SemanticProperties.Description="dot net bot in a race car number eight" /><LabelText="Hello, World!"Style="{StaticResource Headline}"SemanticProperties.HeadingLevel="Level1" /><LabelText="Welcome to &#10;.NET Multi-platform App UI"Style="{StaticResource SubHeadline}"SemanticProperties.HeadingLevel="Level2"SemanticProperties.Description="Welcome to dot net Multi platform App U I" /><Buttonx:Name="CounterBtn"Text="Click me" SemanticProperties.Hint="Counts the number of times you click"Clicked="OnCounterClicked"HorizontalOptions="Fill" /></VerticalStackLayout></ScrollView></ContentPage>

        里面有一句【Clicked="OnCounterClicked"】,这就是点击按钮时发生的事件处理程序的绑定,从对应的cs文件里很容易找到实现代码:

namespace MauiApp1
{public partial class MainPage : ContentPage{int count = 0;public MainPage(){InitializeComponent();}private void OnCounterClicked(object sender, EventArgs e){count++;if (count == 1)CounterBtn.Text = $"Clicked {count} time";elseCounterBtn.Text = $"Clicked {count} times";SemanticScreenReader.Announce(CounterBtn.Text);}}}

5.3 启动顺序

        程序从MauiProgram.cs启动,构造了一个“App”给系统,这个“App”就是App.xaml,打开App.maml.cs,可以看到构造了一个AppShell对象,这个AppShell对象就是AppShell.xaml,这个文件里面关联到了MainPage,AppShell的cs文件没什么特别的代码。

        作为起步,我们只需要在MainPage上修改就可以了。


(这里是文档结束)

相关文章:

MAUI(C#)安卓开发起步

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

oracle decode

1. 基本语法 DECODE(expression, search1, result1, search2, result2, ..., default_result) expression &#xff1a;需要比较的表达式或列。search1, search2, ... &#xff1a;要匹配的值。result1, result2, ... &#xff1a;当 expression 等于 search 时返回的结果。def…...

826考研

初试总分第一的hh佬小红书&#xff1a;https://www.xiaohongshu.com/user/profile/64e106aa000000000100fe33 深研院巨佬经验贴&#xff1a;https://zhuanlan.zhihu.com/p/690464528 本部羊神经验贴&#xff1a;https://zhuanlan.zhihu.com/p/689494655 本部学硕佬经验贴&#…...

PPT小黑第26套

对应大猫28 层次级别是错的&#xff0c;看着是十页&#xff0c;导入ppt之后四十多页 选中所有 红色蓝色黑色 文本选择标题&#xff1a;选择 -格式相似文本&#xff08;检查有没有漏选 漏选的话 按住ctrl 点下一个&#xff09; 要求新建幻灯片中不包含原素材中的任何格式&…...

【Linux-网络】HTTP的清风与HTTPS的密语

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da; 引言 &#x1f4da; 一、HTTP &#x1f4d6; 1.概述 &#x1f4d6; 2.URL &#x1f5…...

Vue 与 Nuxt 的区别

Nuxt 实现服务端渲染SSR Nuxt.js 是基于 Vue.js 的一个框架&#xff0c;它为构建 Vue.js 应用提供了更高级的功能和更便捷的开发体验。 一、定位与功能 Vue.js 是一个前端 JavaScript 框架&#xff0c;专注于构建用户界面和单页应用&#xff08;SPA&#xff09;。 核心功能…...

华为OD机试-最长的密码(Java 2024 E卷 100分)

题目描述 小王正在进行游戏大闯关,有一个关卡需要输入一个密码才能通过。密码获得的条件如下: 在一个密码本中,每一页都有一个由26个小写字母组成的密码,每一页的密码不同。需要从这个密码本中寻找这样一个最长的密码,从它的末尾开始依次去掉一位得到的新密码也在密码本…...

利用golang embed特性嵌入前端资源问题解决

embed嵌入前端资源&#xff0c;配置前端路由的代码如下 func StartHttpService(port string, assetsFs embed.FS) error {//r : gin.Default()gin.SetMode(gin.ReleaseMode)r : gin.New()r.Use(CORSMiddleware())// 静态文件服务dist, err : fs.Sub(assetsFs, "assets/di…...

解决docker认证问题 failed to authorize: failed to fetch oauth token

报错信息[bash1]解决方案 全局代理打开“buildkit”: false &#xff0c;见[图1] [bash1] >docker build -t ffpg . [] Building 71.8s (3/3) FINISHED docker:desktop-linux> [internal] load bui…...

【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计

【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计 1. **欺诈场景分类与案例说明**1.1 **大额交易欺诈**1.2 **异地交易欺诈**1.3 **高频交易欺诈**1.4 **异常时间交易欺诈**1.5 **账户行为异常**1.6 **设备指纹异常**1.7 **交易金额突变** 2. **普适性软…...

docker拉取失败

备份原始配置文件 sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 清理或修复 daemon.json 文件 sudo nano /etc/docker/daemon.json 删除 文件中的所有内容&#xff0c;确保文件为空。 cv下面这个文件内容 { "registry-mirrors": [ &…...

无人机应用探索:玻纤增强复合材料的疲劳性能研究

随着无人机技术的快速发展&#xff0c;轻量化已成为其结构设计的核心需求。玻纤增强复合材料凭借高强度、低密度和优异的耐环境性能&#xff0c;成为无人机机身、旋翼支架等关键部件的理想选择。然而&#xff0c;无人机在服役过程中需应对复杂多变的环境&#xff1a;高空飞行时…...

Visual Studio工具

高亮显示匹配的标签&#xff08;小括号&#xff0c;中括号&#xff0c;大括号&#xff09;...

STM32Cubemx配置E22-xxxT22D lora模块实现定点传输

文章目录 一、STM32Cubemx配置二、定点传输**什么是定点传输&#xff1f;****定点传输的特点****定点传输的工作方式****E22 模块定点传输配置****如何启用定点传输&#xff1f;****示例** **应用场景****总结** **配置 1&#xff1a;C0 00 07 00 02 04 62 00 17 40****解析** …...

iterm2更新后主题报错

报错 .oh-my-zsh/themes/agnoster.zsh-theme:307: parse error near <<<。方法1&#xff1a;更新Oh My Zsh主题&#xff08;以agnoster为例&#xff09; 适用场景&#xff1a;使用Oh My Zsh自带主题&#xff08;如agnoster&#xff09;时出现语法错误。 备份当前主题…...

WPF+WebView 基础

1、基于.NET8&#xff0c;通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...

不懂ui->layout()->removeWidget(bar);

ui->layout()->removeWidget(bar);解释起来就是&#xff1a;ui->layout()返回一个指针&#xff0c;然后这个指针再调用->removeWidget(bar)。 你提到的语法 ui->layout()->removeWidget(bar) 确实可能让人感到困惑&#xff0c;尤其是如果你对 Qt 的 UI 系统不…...

蓝桥杯算法——铠甲合体

问题描述 暗影大帝又开始搞事情了&#xff01;这次他派出了 MM 个战斗力爆表的暗影护法&#xff0c;准备一举摧毁 ERP 研究院&#xff01;MM 个暗影护法的战斗力可分别用 B1,⋯,BMB1​,⋯,BM​ 表示。 ERP 研究院紧急召唤了 NN 位铠甲勇士前来迎战&#xff01;每位铠甲勇士都…...

JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏&#xff0c;有毕设问题&#xff0c;项目以及论文撰写等问题都可以和博主沟通&#xff0c;尽最大努力帮助更多的人&#xff01; 百色学院创新实践学分认定系统设计与实现 摘 要 本百色学院创新实践学分认定系统是针对目前实践学分认定…...

【LangChain】存储与管理对话历史

0. 代码演示 from langchain_community.chat_message_histories import SQLChatMessageHistorydef get_session_history(session_id):# 通过 session_id 区分对话历史&#xff0c;并存储在 sqlite 数据库中return SQLChatMessageHistory(session_id, "sqlite:///memory.d…...

[machine learning] MACS、MACs、FLOPS、FLOPs

本文介绍机器学习中衡量一个模型计算复杂度的四个指标&#xff1a;MACS、MACs、FLOPS、FLOPs。 首先从含义上讲&#xff0c;可以分类两类&#xff1a;MACS/FLOPS和MACs/FLOPs。MACs/FLOPs表示总的操作数(后缀s可以看成是表示复数)&#xff0c;MACS/FLOPS表示每秒可以执行的操作…...

学习笔记-AMD CPU 命名

AMD的AI处理器主要分为锐龙AI 1代&#xff08;基于Zen4架构XDNA 1 NPU&#xff09;和锐龙AI 2代&#xff08;基于Zen5架构XDNA 2 NPU&#xff09;&#xff0c;以下是两代的详细说明&#xff1a; 一、锐龙AI 1代&#xff08;2024年发布&#xff09; 1. 命名规则 结构&#xf…...

【Javascript】计算器(Calculator)网页设计案例

代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>计算器</title…...

Stable Diffusion模型高清算法模型类详解

Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4&#xff0c;分块尺寸768px★★★★★☆皮肤纹理细腻&#xff0c;但高对比场景易出现…...

十大经典排序算法简介

一 概述 本文对十大经典排序算法做简要的总结(按常用分类方式排列),包含核心思想、时间/空间复杂度及特点。 二、比较类排序 1. 冒泡排序 (BUBBLE SORT) 思想:重复交换相邻逆序元素,像气泡上浮 复杂度: 时间:O(n^2)(最好情况O(n)) 空间:O(1) 特点:简单但效率低,稳…...

迷你世界脚本玩家接口:Player

玩家接口&#xff1a;Player 彼得兔 更新时间: 2024-07-28 17:49:05 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 玩家属性获取 2 setAttr(...) 玩家属性设置 3 getHostUin(...) 获取房主uin 4 isMainPlayer(...) …...

探秘 C 语言:编程世界的基石与传奇

一、C 语言的前世今生 C 语言诞生于 20 世纪 70 年代&#xff0c;由贝尔实验室的丹尼斯・里奇&#xff08;Dennis Ritchie&#xff09;开发。它最初是为了配合 UNIX 操作系统的开发&#xff0c;旨在提供一种高效、灵活且可移植的编程语言。在那个硬件资源有限的年代&#xff0…...

docker:Dockerfile案例之自定义centos7镜像

1 案例需求 自定义centos7镜像。要求&#xff1a; 默认登录路径为 /usr可以使用vim 2 实施步骤 编写dockerfile脚本 vim centos_dockerfile 内容如下&#xff1a; #定义父镜像 FROM centos:7#定义作者信息 MAINTAINER handsome <handsomehandsome.com># 设置阿里云…...

1、语言的本质

语言的本质 1.1 语言的产生生物重演律 1.2 语言的本质1.3 语系1.4 文字的起源汉字的构成和使用 后记 语言是人类传递信息的工具&#xff0c;其本质是信息的载体。 语音和文字是构成语言的两个基本属性&#xff0c;语音是语言承载的物理信号&#xff0c;文字是记录语言的逻辑符…...

学习笔记:IC存储总结(ROM,RAM, EEPROM, Flash, SRAM, DRAM, DDL)

一&#xff0c;概述 半导体存储器是一种可以存储大量二值信息的半导体器件。在电子计算机及一些其他的数字系统的工作过程中&#xff0c;需要对大量的数据进行储存。由于数据处理的数据量和运算速度的要求&#xff0c;因此把存储量和存取速度作为衡量存储器的重要指标。 在电子…...