.NET MAUI 环境配置技巧

关于 .NET MAUI 国内⼩伙伴在配置 .NET MAUI 的时候,遇到不少问题。希望通过本教程,给到大家⼀些指引。

01

基础组件部分

.NET SDK 安装

建议安装最新的 .NET SDK

下载地址 https://dotnet.microsoft.com/download/dotnet/6.0

安装 .NET MAUI

安装 .NET MAUI 成功后,通过 workload 添加 .NET MAUI 的库。.NET workload 可以在 .NET SDK 的基础上安装,安装不同应⽤场景的⽀持,如 .NET MAUI , 如 Blazor 等。你可以通过命令⾏的⽅式,使⽤workload。

dotnet workload install maui

注意

1. Linux 或者 macOS 需要管理员权限,所以需要 sudo

2. 有⼩伙伴喜欢⽤ Visual Studio 2022 一站式安装完成,该指引更偏向⼀步步调整

3. .NET 7 还在 RC 阶段,等发布会同步更新

.NET MAUI ⼤概每 2-3 周有⼀个版本的更新,所以建议各位⼩伙伴执行:

dotnet workload update maui

各位可以通过执⾏以下命令去检查 .NET MAUI 的版本

dotnet workload list

6c04d766731a166ea634e84cb431fcbc.png

02

Android 环境设定

有部分地区下载 Android SDK 和模拟器是有问题的,我这⾥说说⼀些解决办法

JDK 安装

安卓的环境依赖于 JDK ,微软已经把原来的 Adoption OpenJDK 升级到 Microsoft OpenJDK 11 了。

你可以通过 https://learn.microsoft.com/java/openjdk/download 针对 Windows / macOS / Linux 开发平台安装最新的 Microsoft OpenJDK 版本 , 并配置好 Java_HOME 和 PATH。

在 macOS / Linux 下 , JAVA_HOME , 和 PATH 的配置如下:

export JAVA_HOME="{你的 Java 安裝路径}/Contents/Home"
export PATH="$JAVA_HOME/bin:$PATH"

在 Windows 下 的 Path 配置

38a6dce6000914e2a4faf3c92f2f433b.png

Android SDK 安装

在 Visual Studio 2022 安装环境装会把 Android Command line tools 和 Android SDK 的最新版本安装好,这是最理想的情况,但如果各位⼩伙伴遇到⽹络安装问题,可以参考下⾯步骤⼀步步安装。

Android SDK 离线版本下载地址

链接: https://pan.baidu.com/s/1lXRIwLpBaf0UgmvyRJg7BQ?pwd=m1qw

  • 配置 Android SDK

在你的开发环境下,创建 SDK 的存放⽬录(示例创建⽬录为 Android/sdk),在该⽬录下创建以下⽂件夹

注意

这⾥提供 offline 的 Android SDK 包括 31, 32 ,33 分别对应 Android 12 , Android 12.1 , Android 13 , 建议⼩伙伴都下载安装好。

ae3cefdf5e95b47bc0b3fcf0264392bb.png

  • ⽂件夹介绍

在你的开发环境下,创建 SDK 的存放⽬录(示例创建⽬录为 Android/sdk),在该⽬录下创建以下⽂件夹南方);太阳黄经达150°于每年公历8月22-24日交节。.

a

   / build-tools - 编译⼯具

可以设定不同版本的编译⼯具

在该⽬录下,创建以下⼦⽬录

build-tools_r31_(对应系统).zip 解压后 重命名为 /31.0.0

build-tools_r32_(对应系统).zip 解压后 重命名为 /32.1.0.rc1

build-tools_r33_(对应系统).zip 解压后 重命名为 /33.0.0

7d3e1e6563317c5d83c92475ffe88293.png

b

   / cmdline-tools - 命令⾏⼯具

命令⾏⽂件

基于不同平台解压,重命名为 7.0 ,把所有⽂件直接放在 cmdline-tools ⽂件夹内

f540c10e3a5f4cb4aee466a08091985c.png

c

   / emulator - 模拟器可执⾏⽂件

直接基于你的平台解压放置该⽂件夹内即可

fdbb9ce8b8d44497770c2917e4451cc7.png

这⾥⼀定要记得⼀点,需要把 package.xml 授权⽂件放进去,否则你没有办法从 Visual Studio 中开启模拟器。

d

   / platform-tools - 平台相关的命令⾏⼯具

直接根据平台解压完成即可

463d21ea5e1e9a31eabe0f55816e5e93.png

e

   / platforms - android sdk

直接解压⽂件

platform-31_r01.zip 解压后重命名为 android-31

platform-32_r01.zip 解压后重命名为 android-32

platform-33_r02.zip 解压后重命名为 android-33

f

   / system-images - 模拟器镜像

这个解决的是可以帮你构建离线镜像,这⾥我提供了 Google API 的 x86_64 和 arm64 位的镜像

如 Android 13 的模拟器对应的就是我的 33 ⽂件夹

在该⽬录下,创建 android-33 , 继续创建该⽂件夹的⼦⽂件夹 google_apis, 并根据平台的架构 x86_64 或者 arm64_v8a 创建对应的⼦⽂件夹 ,如我是 apple silion ,就是 arm64_v8a

3e37fc88d3dc666a549bb8d85a2c609b.png

g

   / patcher

创建⼦⽂件夹 v4 ,解压 zip 包把⽂件放置在v4 ⽂件夹内,并把 package.xml 同时放置在 v4 ⽂件夹

7ed3a20b7976e0e7235fb3a141d1be8c.png

也可以安装 WSA 作为安卓的模拟环境:

https://learn.microsoft.com/en-us/windows/android/wsa/

模拟器运⾏,如果你是 X86_64 架构,请开启 Intel HAXM

https://github.com/intel/haxm

03

iOS 环境设定

最新的 Xcode 是需要安装的(因为 Xcode 14 刚发布, .NET MAUI 还没有完整⽀持,请使⽤ Xcode 13.4.1)

  • 下载 Xcode 13.4.1

链接: https://pan.baidu.com/s/1libEvYE752lVJKV5Q-j_NQ?pwd=sf2p

macOS 是⽀持多 Xcode 的开发环境的,如图

a42887b77f9ba8f744abd4f3a481d217.png

安装完 Xcode 后记得配置好 Visual Studio 的路径

也可以通过命令⾏设定默认的 Xcode,这⾥建议选择默认为 Xcode 13.4.1

sudo xcode-select -s <path/to/>Xcode.app(Xcode 13.4.1)
  • 把环境变量设置好

macOS / Linux 下

export ANDROID_HOME="/Users/luk/Tools/Android/sdk"
export PATH="$PATH:$ANDROID_HOME/platform-tools"
export PATH="$PATH:$ANDROID_HOME/emulator"
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/7.0/bin"
  • Windows 下的配置

17033a07f752aa0f4948261339a7bb9a.png

8aaedbcb131554132428487022c14742.png

  • 关于 Windows Remote

现在 Windows 是要远程连接 macOS 的设备,才能启⽤模拟器和真机的,所以⼤家必须有⼀台 Mac 系列的

相关设备,这⾥我建议⼤家⽤ macOS 云端的解决⽅案,节约⼀下成本

https://www.macincloud.com/

还有必须 Windows 和 macOS 上的版本统⼀否则会有版本不同步出错的情况。

04

在 VS 设定好相关的路径

在 Visual Studio 2022 设定好 iOS 和 Android 的配置路径这是最后⼀步

macOS 路径设定

Xcode 的路径配置 Perferences -> SDK -> Apple 

d18676963dc97ea14fc4377eceee4df2.png

Android 路径设定

Android 的路径配置 Perferences -> SDK -> Android -> Locations

9bf395609afd028b35ccd63c5caae638.png

Windows 路径设定

c0324d9a198f2318a42722b60cd7aa68.png

05

小结

.NET MAUI 的配置问题不是出于 .NET 本身更多是出现在 Android 和 iOS 的环境配置上,特别 Android SDK会根据地区和⽹络供应商的设定⽽变。希望该内容能帮到各位在 .NET MAUI 环境安装遇到困难的⼩伙伴。

CA周记往期回顾:

0f395ff43dfa1971830e4e8f00d260c9.jpeg

更多原创文章与资源共享

请关注Kinfey Techtalk

点击下方【阅读原文】在Github 查看完整操作指引。

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

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

相关文章

Linux中一些常用的很巧妙的命令

当你想要使用上一个命令的最后一个参数&#xff0c;&#xff08;上一个命令的最后一个参数很长&#xff09;&#xff0c;可以使用 esc .      (是esc 点&#xff09; !$ 引用上一个命令的最后一个参数 对命令行的编辑快捷方式&#xff1a; Ctr…

android 8种对话框(Dialog)使用方法汇总

本文为作者原创&#xff0c;转载请注明出处&#xff1a;http://www.cnblogs.com/gzdaijie/p/5222191.html 目录 1.写在前面2.代码示例2.1 普通Dialog&#xff08;图1与图2&#xff09;2.2 列表Dialog&#xff08;图3&#xff09;2.3 单选Dialog&#xff08;图4&#xff09;2.4 …

使用layui的layer组件做弹出层

官方文档地址: http://www.layui.com/doc/modules/layer.html 本例演示效果: 当点击申请提现时,出现申请提现框,并根据用户输入进行一些判断,给出友好提示,比如: 代码实现: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…

实现一个基于相等性比较的 GroupBy

实现一个基于相等性比较的 GroupByIntro在我们的系统里有些数据可能会有问题&#xff0c;数据源头不在我们这里&#xff0c;数据不好修复&#xff0c;在做 GroupBy 的时候就会很痛苦&#xff0c;默认的 group by 会依赖于 HashCode &#xff0c;而某些场景下 HashCode 可能并不…

CrossPHP框架的常用操作

1. 在视图控制器中使用$this->res()方法来生成资源文件的绝对路径$this->res(css/style.css);生成的连接为http://youdomain.com/static/css/style.css2. 生成指定app名称的连接$this->appUrl()第一个参数为基础url, 第二个参数为app名称, 第三个参数为 控制器:方法 第…

jdk自带常用命令行工具使用

转自&#xff1a;http://blog.csdn.net/winwill2012/article/details/46364923jps命令使用jps命令类似于Linux下的ps命令&#xff0c;用于列出当前正在运行的所有Java进程。基本用法直接运行不加任何参数就能列出所有java进程的pid和类的短名称。例如&#xff1a;常用参数-q参数…

crossphp框架中,在模板中加载其他模板

这里说我自己做的项目的应用场景 要求是用layui框架的layer组件,实现弹出层效果,用原声PHP无疑很容易做到,但是如果应用到crossphp框架流程就会非常麻烦 这里简单讲一下大致的步骤: 1. 在一个模板文件中应用layui的layer组件实现弹出框 index.tpl.php2. 从我们自己定义的路径上…

MASA Framework的MinimalAPIs应用

在以前的MVC引用程序中&#xff0c;控制器是一个功能齐全的框架&#xff0c;但它偏重&#xff0c;因此在.Net6.0官方引入了MinimalAPIs&#xff0c;即最小API&#xff0c;与MVC相比&#xff0c;它足够的简洁&#xff0c;适合小型服务来使用&#xff0c;下面就让我们看看如何使用…

CrossPHP--在我们用ajax,js取不到指定数据时,我们可以换一种方式

项目中遇到的问题: 需求: 用的是layui的laypage组件,进行分页操作,熟悉layui的朋友都知道,laypage需要从服务端给其一个总条数, 但是在进行ajax请求时出了问题, 我是这样定义的但是调用的时候却无法将数值直接返回回去,所以这里只能更换一种思路 在控制器中进行数据的查询,然后…

MySQL设置从库只读模式

常见现象 运维工作中会经常维护MySQL主从服务器&#xff0c;当然Slave我们只是用于读操作。 一般权限开通也只授权只读账号&#xff0c;但是有时候维护工作可能不是一个人在做&#xff0c;你不能保证其他同事都按照这个标准操作。 有同事可能会授权Slave库MySQL账号为all或者se…

layui弹出层使用(layer.alert / layer.open / layer.prompt )

一 layer.alert 效果图: 代码: //取消提现 function back(id) {layer.alert(真的要取消吗, {skin: layui-layer-molv //样式类名 自定义样式,closeBtn: 1 // 是否显示关闭按钮,anim: 1 //动画类型,btn: [确定,取消] //按钮,icon: 6 // icon,yes:function(){return $.aj…

SkiaSharp 自绘弹幕效果

SkiaSharp 自绘弹幕效果控件名&#xff1a;SkiaSharpBarrage作者&#xff1a; 驚鏵原文链接&#xff1a; https://github.com/yanjinhuagood/SkiaSharpBarrage框架使用.NET60&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;接着上一篇 WPF 弹幕上期有…

JavaScript中this指向

一.重点来了&#xff0c;this指向问题&#xff1a;1.this指向之普通函数。 2.this指向之对象 3.this指向之构造函数 4.this指向之&#xff08;call,apply&#xff09;动态更改this指向。 二.具体分析如下 1.普通函数 // 第23行的调用者为null,this指向也为null,// 所以这时js把…

提交Form表单,submit之前做js判断处理

效果:在点击提交按钮时,首先进行js判断, 如果不符合条件,则alert出提示信息,并return false. 主要点就在于给form表单添加一个onsubmit事件. 在onsubmit事件中定义的函数里进行js验证处理.代码 : <!DOCTYPE html> <html lang"en"> <head><meta …

如何在Windows上一键部署PaddleOCR的WebAPI服务

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库&#xff0c;助力开发者训练出更好的模型&#xff0c;并应用落地。官方开源项目地址&#xff1a;https://github.com/PaddlePaddle/PaddleOCR一定会有小伙伴们看完不知道如何部署与应用&#xff0c;怎么才能融入到自己的产品…

微软为 Visual Studio 扩展添加对 Arm64 的支持

微软在 6 月份推出了支持 Arm64 架构的 Visual Studio&#xff0c;这是第一个原生支持在基于 Arm 的处理器上构建和调试 Arm64 应用程序的 Visual Studio 版本。近日&#xff0c;他们宣布为 Visual Studio 扩展也添加了对 Arm64 的支持&#xff0c;因此开发者可在 Arm64 Visual…

WIN10 查看已经连接的wifi的密码

命令行: 1. 显示以前连接过的wifi2. 将wifi配置存入文件中3. 查看刚刚保存的wifi配置的文件这样,我们就可以看到连接的wifi名称和wifi密码了.

微软与 Canonical 合作,将 systemd 引入 WSL

微软和 Canonical 联合宣布&#xff0c;systemd 现在可以在 Windows Subsystem for Linux&#xff08;WSL2&#xff09;中运行了&#xff0c;此举可以让用户在 Windows 设备上获得更加全面的 Linux 体验。systemd 的作者 Lennart Poettering 在 7 月份离开红帽并加入了微软&…

.NET 反向代理-YARP 根据域名转发

编者&#xff1a;fastgithub 就是基于YARP使用域名做转发逻辑的。 前段时间发布过一个关于 YARP 的简单介绍&#xff0c;感兴趣的小伙伴恭请移步看看 .NET 反向代理-YARP 作为反向代理&#xff0c;必不可少的当然是根据域名代理转发啦&#xff0c;毫无疑问&#xff0c;YARP…