Search code examples
androidqtqmlandroid-install-apkqtquickcontrols2

opening apk in chrome download list not open the apk Installer


I have a QtQuick2 application.I build it(with signing) for android with Release Configuration with Qt 5.15.1,

When I download Apk with chrome And click on it on downloads list on chrome,It should be open with Installer but It will opens with file explorer And many of my users say that It will opens with UnZip Apps.I did't have this problem with Qt 5.12 ,This problem has been found since I installed Qt 5.15.

When I click on this file on File Explorer(on Android) there is no problem and it will opens with Apk installer.How can I solve the problem?

the apk link is here:

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

enter image description here

And another image

enter image description here

I think there is a bug on Qt 5.13(and later version) or Qt Creator.I now tested with Qt 5.15.1 and Qt Creator 4.13.2

AndroidManifest.xml file:

<?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>

Solution

  • I added below setting in Configure method in my StartUp 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
                });
        }