扩展文件是否将所有文件存储到手机的res/drawable文件夹中?

问题描述:

我是android扩展文件的新手。我不确定它是如何工作的或者需要做什么(逐步构建)扩展文件。据我一直在阅读,如果我没有错,请纠正我;扩展文件可以是存储在资源文件夹或Res文件夹中的文件。我不明白的是,如果我的应用程序依赖于存储在这两个文件夹中的文件,并且我将它们取出不会导致错误生成?扩张真的有效吗?此外,如果我从res文件夹(例如)成功创建扩展文件,扩展文件会将其存储在手机的res文件夹中吗?或者我必须将引用res/drawable文件夹的所有代码更改为适当的位置?如果是这样,那么我需要改变我的代码的正确路径是什么?扩展文件是否将所有文件存储到手机的res/drawable文件夹中?

我的应用程序到目前为止像600MB,并继续增长。在我的应用程序中,核心依赖是本地存储在资产文件夹中的数据库以及res \ drawable文件夹中的一些图像。有一些图像不直接依赖应用程序,使剩下的550MB。尽管如此,这些图像是需要的,因为数据库引用了这些图像(只是名称),然后我从数据库中引用了一个imageview。我正在考虑将所有这些图像存储到扩展文件中,但我不确定这些图像是否将存储在手机的res/drawable文件夹中,或者它将存储在不同的文件夹中?如果是这样,会导致错误?

扩展文件不应保存在res文件夹中。 Res文件夹是APK的一部分,因此如果您将额外的图片保存在res文件夹中,APK仍然会超过50MB的限制。

从Google开发者页面,它声明“扩展文件被保存到设备的共享存储位置(SD卡或USB可安装的分区;也称为”外部“存储)您的应用程序可以在哪里在大多数设备上,Google Play会在下载APK的同时下载扩展文件,因此您的应用程序在用户首次打开它时具有所需的一切,但在某些情况下,您的应用程序必须在您的应用程序启动时从Google Play下载文件。“

所以,你的扩展文件应该保存在SD卡中。您可以将图像压缩成zip文件,将压缩文件存储在SD卡中,并在应用程序启动时读取它们。

您可以使用APK扩展Zip Library并从zip中读取文件。从谷歌开发者页面的示例代码:

// Get a ZipResourceFile representing a merger of both the main and patch files 
ZipResourceFile expansionFile = 
    APKExpansionSupport.getAPKExpansionZipFile(appContext, 
     mainVersion, patchVersion); 

// Get an input stream for a known file inside the expansion file ZIPs 
InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip); 

可以为约APK扩展文件的详细信息读取this documentation。 你也可以从Android developer blog about the APK Expansion file找到一些提示。 或者您可以访问this APK Expansion file tutorial