MAUI发布APK初体验
目的
很早就有想编写安卓程序玩玩的念头了,所以这次学习将MAUI程序生成apk包来玩。
本文apk下载地址:https://azrng.lanzouv.com/iBQRe0eeg8wf ,内容很简单,一个时间轴以及一个点击按钮切换背景图的东西,时间轴是学习Masa Blazor教程的,背景图的接口还是网上白嫖的,重点学习发布了apk,下面来简单介绍一下我的发布步骤吧
切记项目目录不要带中文
程序包设置
每个应用都应该指定唯一的包标识符和版本,配置在项目的.csproj文件中
<!-- 显示名 -->
<ApplicationTitle>MauiAppBlazor</ApplicationTitle>
<!-- App 标识 -->
<ApplicationId>com.companyname.mauiappblazor</ApplicationId>
<ApplicationIdGuid>48CF021D-51ED-47B9-B8BC-E6005BE37A8A</ApplicationIdGuid>
<!-- 版本 -->
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
创建密钥存储文件
使用密钥存储文件对包进行签名, Java/Android SDK 包含生成密钥存储所需的工具。 生成密钥存储文件后,将它添加到项目中,并将项目文件配置为引用它。提前安装 Java SDK ,以便你可以运行 keytool 工具。
执行下面的步骤创建密钥存储文件
1.打开终端程序并导航到项目文件夹

2.运行keytool工具
keytool -genkey -v -keystore myapp.keystore -alias key -keyalg RSA -keysize 2048 -validity 10000
按照提示输入密码等设置

该工具生成 一个 myapp.keystore 文件,该文件应与项目位于同一文件夹中。
添加对密钥存储文件的引用
修改项目的csproj文件做以下配置
<PropertyGroup Condition="$(TargetFramework.Contains('-android')) and '$(Configuration)' == 'Release'">
<AndroidKeyStore>True</AndroidKeyStore> <!--设置为 True 对应用进行签名-->
<AndroidSigningKeyStore>myapp.keystore</AndroidSigningKeyStore> <!--在上一部分中创建的密钥存储文件: myapp.keystore-->
<AndroidSigningKeyAlias>key</AndroidSigningKeyAlias> <!--传递给 keytool 工具的参数值:键-->
<AndroidSigningKeyPass>1234567</AndroidSigningKeyPass> <!--创建密钥存储文件时提供的密码-->
<AndroidSigningStorePass>1234567</AndroidSigningStorePass> <!--创建密钥存储文件时提供的密码-->
</PropertyGroup>
发布
使用.Net命令行来发布
dotnet publish -f:net7.0-android -c:Release /p:AndroidSigningKeyPass=123456 /p:AndroidSigningStorePass=1234567
参数介绍
-f :目标框架,例如net7.0-android
-c:生成配置,例如Release
/p:AndroidSigningKeyPass:上面AndroidSigningKeyPass项目设置的值,也就是创建密钥文件时候的密码
/p:AndroidSigningStorePass :上面AndroidSigningStorePass项目设置的值,也就是创建密钥文件时候的密码
发布之后会生成到相对路径为:\bin\Release\net7.0-android\publish

包含aab文件和apk文件,有两个 aab 文件,一个未签名,另一个已签名。 签名的变体在文件名中具有 -signed 。
错误处理
如果打包的时候遇到“error XA5300: 找不到 Android SDK 目录。请检查 Visual Studio 中的 Android SDK 管理器是否显示有效的安装。若要使用命令行 生成的自定义 SDK 路径,请将 "AndroidSdkDirectory" MSBuild 属性设置为自定义路径。 ”那么可以修改上面的发布命令为
dotnet publish -f:net7.0-android -c:Release /p:AndroidSigningKeyPass=123456 /p:AndroidSigningStorePass=1234567 /p:AndroidSdkDirectory=D:\Android\android-sdk
这个安卓sdk的地址只能你自己在你电脑上找了。
参考资料
官网资料:https://learn.microsoft.com/zh-cn/dotnet/maui/android/deployment/publish-cli
MAUI发布APK初体验的更多相关文章
- MAUI 初体验 联合 WinForm 让家里废弃的手机当做电脑副品用起来
软件效果图 软件架构草图 效果解释:运行 winform 端后 使用 ctrl+c 先复制任何词语,然后ctrl+空格 就可以将翻译结果显示在 安卓,IOS,windows 甚至 mac 任意客户端 ...
- Python 3.8.0 正式版发布,新特性初体验 全面介绍
Python 3.8.0 正式版发布,新特性初体验 北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PE ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- win7升win10,初体验
跟宿舍哥们聊着聊着,聊到最近发布正式版的win10,听网上各种评论,吐槽,撒花的,想想,倒不如自己升级一下看看,反正不喜欢还可以还原.于是就开始了win10的初体验了,像之前装黑苹果双系统一样的兴奋, ...
- 【尝新】微信小程序初体验
文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小d ...
- git初体验(三)git分支
分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...
- SignalR初体验
简介 ASP .NET SignalR[1] 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...
- Kali Linux 2016.2初体验使用总结
Kali Linux 2016.2初体验使用总结 Kali Linux官方于8月30日发布Kali Linux 2016的第二个版本Kali Linux 2016.2.该版本距离Kali Linux ...
随机推荐
- node中的优先从缓存中加载模块与模块的加载规则
执行 node main.js 请问 b模块会被加载几次 //main.js require('./a.js') var fn = require('./b.js') console.log(fn.s ...
- vue中jsx
//item.vue 文件如下 <template> <div> <h1 v-if="id===1"> <slot></slo ...
- 【JS 逆向百例】有道翻译接口参数逆向
逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o?smartresult=di ...
- docker的架构及工作原理(详解)
目录 一.docker架构图 二.Client 客户端 三.Host 主机(docker引擎) 四.Image 镜像 五.Container 容器 六.镜像分层 可写的容器层 七.Volume 数据卷 ...
- 不同版本的Unity要求的NDK版本和两者对应关系表(Unity NDK Version Match)
IL2CPP需要NDK Unity使用IL2CPP模式出安卓包时,需要用到NDK,如果没有安装则无法导出Android Studio工程或直接生成APK,本篇记录一下我下载NDK不同版本的填坑过程. ...
- 微信小程序-Storage
官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html ?> Sto ...
- Linux线程间交互
前言 上一篇说过,系统会为线程mmap一块内存,每个线程有自己的私有栈,使用局部变量没啥问题.但是实际场景中不可避免的需要线程之间共享数据,这就需要确保每个线程看到的数据是一样的,如果大家都只需要读这 ...
- 6.5 Windows驱动开发:内核枚举PspCidTable句柄表
在 Windows 操作系统内核中,PspCidTable 通常是与进程(Process)管理相关的数据结构之一.它与进程的标识和管理有关,每个进程都有一个唯一的标识符,称为进程 ID(PID).与之 ...
- 15.1 套接字通过域名取IP地址
首先我们来实现一个DNS查询功能,该功能的目的是传入一个网站域名自动将该域名解析为对应的IP地址,该功能的实现依赖于gethostbyname函数,该函数将主机名作为参数,并返回一个指向hostent ...
- Vue +Spring Boot 前后端分离 的 项目 笔记
Vue +Spring Boot 前后端分离 的 项目 笔记 前端部分 Vue 脚手架的搭建 1.在创建目录的上一目录执行命令 命令为 vue init webpack 项目名 再创建项目的时候会自动 ...