打开 chrome 下载列表中的 apk 未打开 apk 安装程序

opening apk in chrome download list not open the apk Installer

我有一个 QtQuick2 application.I 为 android 构建它(带签名),使用 Qt 5.15.1 发布配置,

当我用 chrome 下载 Apk 并在 chrome 的下载列表中单击它时,它应该用安装程序打开,但它会用文件资源管理器打开而且我的许多用户都说它将使用 UnZip 打开 Apps.I Qt 5.12 没有这个问题,自从我安装 Qt 5.15 后就发现了这个问题。

当我在文件资源管理器(在 Android 上)点击这个文件时没有问题,它会用 Apk 打开 installer.How 我能解决这个问题吗?

apk link 在这里:

http://rokhshid.jooyabash.ir/files/rokhshid-3.apk

还有一张图片

我认为 Qt 5.13(及更高版本)或 Qt Creator.I 上存在错误,现已使用 Qt 5.15.1 和 Qt Creator 4.13.2 进行测试

AndroidManifest.xml 文件:

<?xml version="1.0"?>
<manifest package="org.companyname.myapp" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.14" android:versionCode="3" android:installLocation="auto">
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
         Remove the comment if you do not require these default permissions. -->
    <!-- %%INSERT_PERMISSIONS -->

    <!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
         Remove the comment if you do not require these default features. -->
    <!-- %%INSERT_FEATURES -->

    <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>

    <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="rokhshid" android:icon="@drawable/icon" android:extractNativeLibs="true">
        <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="رخشید" android:screenOrientation="unspecified" android:launchMode="singleTop" android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <!-- Application arguments -->
            <!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
            <!-- Application arguments -->
            <meta-data android:name="android.app.lib_name" android:value="Rokhshid2"/>
            <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
            <meta-data android:name="android.app.repository" android:value="default"/>
            <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
            <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
            <!-- Deploy Qt libs as part of package -->
            <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
            <!-- Run with local libs -->
            <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
            <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
            <meta-data android:name="android.app.load_local_libs_resource_id" android:resource="@array/load_local_libs"/>
            <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
            <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
            <!-- Used to specify custom system library path to run with local system libs -->
            <!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
            <!--  Messages maps -->
            <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
            <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
            <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
            <meta-data android:value="@string/unsupported_android_version" android:name="android.app.unsupported_android_version"/>
            <!--  Messages maps -->
            <!-- Splash screen -->
            <!-- Splash screen -->
            <!-- Background running -->
            <!-- Warning: changing this value to true may cause unexpected crashes if the
                          application still try to draw after
                          "applicationStateChanged(Qt::ApplicationSuspended)"
                          signal is sent! -->
            <meta-data android:name="android.app.background_running" android:value="false"/>
            <!-- Background running -->
            <!-- auto screen scale factor -->
            <meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
            <!-- auto screen scale factor -->
            <!-- extract android style -->
            <!-- available android:values :
                * default - In most cases this will be the same as "full", but it can also be something else if needed, e.g., for compatibility reasons
                * full - useful QWidget & Quick Controls 1 apps
                * minimal - useful for Quick Controls 2 apps, it is much faster than "full"
                * none - useful for apps that don't use any of the above Qt modules
                -->
            <meta-data android:name="android.app.extract_android_style" android:value="default"/>
            <!-- extract android style -->
            <meta-data android:name="android.app.splash_screen_sticky" android:value="true"/>
            <meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash2"/>
        </activity>
        <!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
    </application>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.DELETE_PACKAGES"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

确保您已在设备上启用开发者选项。

另请在此处查看:设置 -> 应用和通知 -> 高级 -> 特殊应用访问权限 -> 安装未知应用。

我通过创建 apk 到 application/vnd.android.package-archive 的 MIME-TYPE 映射解决了我的问题。 这取决于您的网络服务器。例如在 IIS 中遵循以下步骤。

我在 StartUp 的 Configure 方法中添加了以下设置 class


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            var provider = new FileExtensionContentTypeProvider();
            // Add new mappings`enter code here`
            provider.Mappings[".zip"] = "application/zip,application/octet-stream,application/x-zip-compressed,multipart/x-zip";
            provider.Mappings[".apk"] = "application/vnd.android.package-archive";
            //provider.Mappings[".apk"] = "application/zip,application/java-archive";
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Files")),
                RequestPath = "/Files",
                ContentTypeProvider = provider
            });
    }