让Android 5.0 也能运行 MAUI Blazor App

官方创建的MAUI blazor app是需要运行在API 23 (Android 6.0) 以上,但MAUI App 是可以运行在API 21(Android 5.0)上。

方法

方法一 使用别人的半成品

步骤:

  1. 克隆https://github.com/wch1618/maui_Fork

  2. 修改程序集和命名空间(不修改会导致项目与原MauiBlazorApp项目冲突)

  3. cd maui_Fork\src\BlazorWebView\src\Maui,然后编译dotnet build -f net6.0-android

  4. 在你的Maui Blazor App项目条件引用生成的dll ,修改csproj,在<ApplicationVersion>1</ApplicationVersion>下增加

 <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>

修改MauiProgram.cs

			wMicrosoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions
                .AddMauiBlazorWebView(builder.Services);
#if DEBUG
			wMicrosoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions
                .AddBlazorWebViewDeveloperTools(builder.Services);
#endif

// 注释原来的
//            builder.Services.AddMauiBlazorWebView();
//#if DEBUG
//            builder.Services.AddBlazorWebViewDeveloperTools();
//#endif
  1. 编译测试
方法二 自己修改maui官方代码

步骤:

  1. git clone --recursive --depth=1 https://github.com/dotnet/maui.git
  2. 在maui_Fork\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj 增加
    <ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'"> <PackageReference Include="Xamarin.AndroidX.WebKit" Version="1.4.0.8" /> </ItemGroup>
  3. 修改maui_Fork\src\BlazorWebView\src\Maui\Android\AndroidWebKitWebViewManager.cs的对应几个方法
using AndroidX.WebKit;

namespace Microsoft.AspNetCore.Components.WebView.Maui
{
	[SupportedOSPlatform("android21.0")]
	internal class AndroidWebKitWebViewManager : WebViewManager
	{
		/// <inheritdoc />
		protected override void SendMessage(string message)
		{
			WebViewCompat.PostWebMessage(_webview, new WebMessageCompat(message), AndroidAppOriginUri);
		}

		internal void SetUpMessageChannel()
		{
			// These ports will be closed automatically when the webview gets disposed.
			var nativeToJSPorts = WebViewCompat.CreateWebMessageChannel(_webview);

			var nativeToJs = new BlazorWebMessageCallback(message =>
			{
				MessageReceived(AppOriginUri, message!);
			});

			var destPort = new[] { nativeToJSPorts[1] };

			nativeToJSPorts[0].SetWebMessageCallback(nativeToJs);

			WebViewCompat.PostWebMessage(_webview, new WebMessageCompat("capturePort", destPort), AndroidAppOriginUri);
		}
	}
}
  1. 继续执行方法一的步骤2及以后的步骤
方法三 下载编译好的
  1. 下载修改好编译好的dll
  2. 继续执行方法一的步骤4及以后的步骤
注意

有些android 5.0模拟器和真机是不一样的,有可能会执行不成功,这是模拟器的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zerolook

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值