在Android设备中将Android .apk文件下载为.zip文件的问题

5

我开发了一个应用程序,但是当我的客户尝试使用三星GT19003从提供的网址下载应用程序时,它会以.zip文件形式下载,并在单击后显示无法打开文件错误。而在我们的设备上,它会以.apk形式下载并正常工作。请帮助我解决这个问题。


客户端如何加载文件? - WarrenFaith
一些安卓手机在没有安装 https://play.google.com/store/apps/details?id=com.hwkrbbt.downloadall&feature=nav_result#?t=W251bGwsMSwxLDMsImNvbS5od2tyYmJ0LmRvd25sb2FkYWxsIl0. 等应用的情况下,可能会下载不了zip/apk文件。建议让您的客户安装此应用后再重试。 - Tony
@WarrenFaith 客户正在使用移动浏览器下载应用,但是.apk文件被保存为.zip文件。 - Remmyabhavan
@Tony,客户端的问题是.apk文件被保存为.zip文件,因此无法安装应用程序。您提供的链接有助于下载文件,但我们需要知道为什么.apk文件会被保存为.zip文件,我甚至无法使用MyFiles文件管理器将其重命名。 - Remmyabhavan
5个回答

5

请确保您已将http Content-Type设置为application/vnd.android.package-archive

这样可以让Chrome知道它是一个应用程序而不是zip文件。


4
在/etc/mime.types中添加以下行是一个简单的解决方案。
application/vnd.android.package-archive     apk

重新启动您的apache。

这将强制浏览器将文件下载为“apk”,而不是附加“zip”后缀。


不确定为什么,但是这样做并直接下载到Android后,我已经下载的任何apk仍然会以ZIP形式下载,而新的apk则会以APK形式下载...也许是Android上的某种缓存?不确定,但我认为这是系统管理员的答案,而其他答案则来自用户的角度。 - KolonUK

0

在我的情况下,问题与@alireza-fattahi提到的标题相同。

在这里分享一下,因为在我们的情况下,文件位于Azure存储中,并由CDN访问,以防有人遇到相同的问题。

Azure Sorage和CDN的解决方法

默认情况下,上传的APK blob的内容类型为application/zip,响应头中也反映了相同的内容类型,导致下载完成后Android OS上的文件获得了.zip扩展名。

我不得不在存储CDN中设置自定义规则,将响应中的content-type标头覆盖为application/vnd.android.package-archive

记得在设置新规则后清除CDN缓存

了解更多关于Azure CDN rules engine的信息。

enter image description here


0

如果它被下载为.zip文件

  1. 您或您的客户可以使用File Expert应用程序解压缩这个.zip文件,它必须在解压缩文件夹中显示.apk文件

  2. 直接给您的用户一个apk链接,无论他/她使用默认浏览器下载还是使用其他浏览器,如果是.apk文件链接,则必须按原样下载。

  3. 您可能正在使用某些内容网站,该网站会在特定的下载方法上压缩文件,请确保它具有直接的.apk链接。

编辑1:

  1. 最后但并非最不重要的。apk只是一个zip文件,所以这不是问题,只需将其重命名(从.Zip到.apk),我希望它能解决问题

谢谢回复。我们提供直接的.apk链接。在我们的手机上,它可以直接下载和安装,没有任何问题。 - Remmyabhavan
请使用文件专家解压缩建议中提到的文件。 - Trikaldarshiii
这不是一个合适的解决方案。许多用户可能不太懂得他们需要下载文件浏览器,然后去那里将其重命名为apk,再尝试安装。因此我失去了很多客户。 - Srihari Karanth

0
这是一个示例: // 在此处设置您的下载apk路径 $path = public_path(). "/upload/apk/Ninja11.apk";
//Set header here like this
$headers =  [
            'Content-Type'=>'application/vnd.android.package-archive',
            'Content-Disposition'=> 'attachment; filename="ninja-release.apk"',
        ];

返回文件响应:return response()->file($path , $headers);
这是 Laravel 框架的代码,但同样适用于其他框架。只需设置内容类型即可。
注意:这不是 Android 端的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接