如何解决Xamarin Forms Android Ad-Hoc apk 更新解析包时出现问题
尝试为 Xamarin 表单中的 ahoc 应用程序创建一个 android 自动更新程序。 这是我的代码、清单和路径 xml。
应用程序启动正常,我可以看到更新程序对话框。然后它似乎下载了 apk,但在安装它时,我收到“解析包时出现问题”错误。
我尝试了很多不同的方法来做到这一点,所以一些指针会很酷。
我还尝试查看发布中的 logcat 及其说的文件权限错误,但我不确定这是否是一个红鲱鱼。
有人有什么想法吗?
```
public async void LaunchActivityInAndroid()
{
string documentsPath = $"{Android.App.Application.Context.GetExternalFilesDir("").AbsolutePath}";
string m_uri = $"{GlobalVariables.ApkPrefix}{GlobalVariables.ApkDomain}{GlobalVariables.ApkEndpoint}";
string fileName = m_uri.Substring(m_uri.LastIndexOf("/") + 1);
HttpResponseMessage httpResponse = await new HttpClient().GetAsync(m_uri);
byte[] data = await httpResponse.Content.ReadAsByteArrayAsync();
string directory = Android.App.Application.Context.GetExternalFilesDir("").AbsolutePath.ToString();
string path = Path.Combine(directory,fileName);
foreach (string file in Directory.GetFiles(directory))
{
if (Path.GetExtension(file) == ".apk")
{
File.Delete(file);
File.Delete("app.db3");
}
}
File.WriteallBytes(path,data);
Android.Net.Uri fileUri;
if ((int)Build.VERSION.SdkInt < 23) {
fileUri = Android.Net.Uri.FromFile(new Java.IO.File(path));
}
else {
fileUri = FileProvider.GetUriForFile(Xamarin.Forms.Forms.Context as Context,Xamarin.Forms.Forms.Context.ApplicationContext.PackageName + ".fileprovider",new Java.IO.File(documentsPath + "/app.apk"));
}
Intent promptInstall = new Intent(Intent.ActionView).SetFlags(ActivityFlags.ClearTop).SetFlags(ActivityFlags.GrantReadUriPermission).SetFlags(ActivityFlags.NewTask).PutExtra(Intent.ExtraNotUnkNownSource,true).SetDataAndType(fileUri,"application/vnd.android.package-archive");
Android.App.Application.Context.StartActivity(promptInstall);
//webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
}
'''
清单
```
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.99" package="app" android:installLocation="auto" android:versionCode="1">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="29" />
<application android:label="app.Android" android:icon="@mipmap/ic_launcher" android:networkSecurityConfig="@xml/network_security_config" android:allowBackup="false" android:requestLegacyExternalStorage="true">
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
<Meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"></Meta-data>
</provider>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
<uses-permission android:name="android.permission.WRITE_PROFILE" />
<uses-permission android:name="android.permission.BLUetoOTH" />
<uses-permission android:name="android.permission.BLUetoOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
</manifest>
```
提供者路径xml
```
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
<external-files-path
name="external_files"
path="." />
<cache-path
name="cache"
path="." />
<external-cache-path
name="external_cache"
path="." />
<files-path
name="files"
path="." />
</paths>
```
提前谢谢各位!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。