2014-11-24 120 views
2

我是android擴展文件的新手。我不確定它是如何工作的或者需要做什麼(逐步構建)擴展文件。據我一直在閱讀,如果我沒有錯,請糾正我;擴展文件可以是存儲在資源文件夾或Res文件夾中的文件。我不明白的是,如果我的應用程序依賴於存儲在這兩個文件夾中的文件,並且我將它們取出不會導致錯誤生成?擴張真的有效嗎?此外,如果我從res文件夾(例如)成功創建擴展文件,擴展文件會將其存儲在手機的res文件夾中嗎?或者我必須將引用res/drawable文件夾的所有代碼更改爲適當的位置?如果是這樣,那麼我需要改變我的代碼的正確路徑是什麼?擴展文件是否將所有文件存儲到手機的res/drawable文件夾中?

我的應用程序到目前爲止像600MB,並繼續增長。在我的應用程序中,核心依賴是本地存儲在資產文件夾中的數據庫以及res \ drawable文件夾中的一些圖像。有一些圖像不直接依賴應用程序,使剩下的550MB。儘管如此,這些圖像是需要的,因爲數據庫引用了這些圖像(只是名稱),然後我從數據庫中引用了一個imageview。我正在考慮將所有這些圖像存儲到擴展文件中,但我不確定這些圖像是否將存儲在手機的res/drawable文件夾中,或者它將存儲在不同的文件夾中?如果是這樣,會導致錯誤?

回答

2

擴展文件不應保存在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

相關問題