微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Forms Android Ad-Hoc apk 更新解析包时出现问题

如何解决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 举报,一经查实,本站将立刻删除。