官方创建的MAUI blazor app是需要运行在API 23 (Android 6.0) 以上,但MAUI App 是可以运行在API 21(Android 5.0)上。
方法
方法一 使用别人的半成品
步骤:
-
修改程序集和命名空间(不修改会导致项目与原MauiBlazorApp项目冲突)
-
cd maui_Fork\src\BlazorWebView\src\Maui,然后编译dotnet build -f net6.0-android
-
在你的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
- 编译测试
方法二 自己修改maui官方代码
步骤:
- git clone --recursive --depth=1 https://github.com/dotnet/maui.git
- 在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>
- 修改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);
}
}
}
- 继续执行方法一的步骤2及以后的步骤
方法三 下载编译好的
- 下载修改好编译好的dll
- 继续执行方法一的步骤4及以后的步骤
注意
有些android 5.0模拟器和真机是不一样的,有可能会执行不成功,这是模拟器的问题。