MAUI Android 10以编程方式安装APK



我正在尝试安装一个.apk,我已经下载到Android 10的下载文件夹中。我已经尝试过这个Xamarin Android 7+程序安装APK。

我遇到了这个错误:

Java.Lang.RuntimeException:'无法获取提供程序android.support.v4.content.FileProvider:java.lang.ClassNotFoundException:找不到类"android.support.v4.content.FileProvider";在路径上:DexPathList[[zip文件"数据/应用程序/{PackName}-aV7Nkryw8OSTkpHc_8WmMg==/base.apk"],nativeLibrary目录=[/data/app/{PackName}-aV7Nkryw8OSTkpHc_8WmMg===/lib/arm64,/数据/应用程序/{PackName}-aV7Nkryw8OSTkpHc_8WmMg===/base.apk/lib/arm64-v8a,/system/lib64,/product/lib64]]'

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="{PackName}">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true" android:label="{Label}">
<provider android:name="android.support.v4.content.FileProvider" android:authorities="{PackName}.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
</provider>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-sdk android:minSdkVersion="24"/>
</manifest>

provider_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />  
</paths>

代码:

Context context = AndroidApp.Context;
var file = new Java.IO.File(fileUri);
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
var apkUri = FileProvider.GetUriForFile(context, context.ApplicationContext.PackageName + ".provider", file);
Intent intentS = new Intent(Intent.ActionInstallPackage);
intentS.SetData(apkUri);
intentS.SetFlags(ActivityFlags.GrantReadUriPermission);
context.StartActivity(intentS);
}

由于您的目标框架设置为Android 10或更高版本,并且您仍在使用旧包,因此可以尝试将android.support.v4.FileProvider更改为androidx.core.content.FileProvider

您可以参考以下代码:

<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
</provider>

最新更新