2014-03-14 116 views
1

我們有一個跨平臺移動應用程序,它使用本機庫來讀取一些數據(除其他外)。在Android上,數據位於使用Expansion APK機制的obb文件中。這對我們來說工作得很好。但是,我們發現在第二代(2013)Nexus 7表和Nexus 5手機上,我們正在讀取obb中已損壞的一些數據。實際的obb文件沒有被破壞,但我們從中讀取的是。在Nexus設備上從掛載的obb文件中讀取損壞的數據

我最好的例子是用WebView從掛載的obb中讀取HTML文件。 HTML的第一部分會很好,然後在第二部分中會出現亂碼。有趣的是,胡言亂語可以從obb中的其他地方識別爲二進制數據。這幾乎就像讀取obb的Android代碼獲取塊映射錯誤。

我已經縮小到由某些C觸發的代碼從obb中讀取對象。如果我對此發表評論,當我稍後訪問它時,HTML將會很好。現在有可能在代碼中存在錯誤,但是這個庫已經在其他兩個平臺上使用,沒有問題。它也適用於第一代Nexus 7和其他非Nexus設備。

那麼,有沒有人有任何想法,這可能是什麼?這些Nexus設備上的Android 4.3.x和Android 4.4.x似乎都會發生這種情況。什麼可能是不同的硬件方面,可能會導致這種腐敗?我認爲像C庫與Android並沒有內置到固件的某種?

+0

我對此查詢沒有任何迴應。我已經證明幾乎可以肯定,這是第二代Nexus掛載obb文件中的一個錯誤。我可以將其縮小到JNI中引起損壞的2字節的簡單fread。向Android開發者報告這種情況的最佳方式是什麼?理想情況下,我希望與他們進行對話以詢問可能的解決辦法。 – btschumy

+0

我不確定這是否相關,但在我的情況下,我從SD卡(我的應用程序創建的)中拖出一個zip文件,在某些情況下,文件在拖動過程中變爲損壞關閉SD卡。它在設備上沒有損壞,因爲我可以讀取的是與Android Zip APIs一樣好,只是當我將它從設備上拖出時。如果我通過文件管理器應用程序將它傳輸到網絡共享,那麼一切都很好,並且沒有損壞。當然,這似乎是一個設備問題!順便說一下,我正在使用nexus 7 4.4.4。 – Andy

+0

我遇到過使用cocos2d-x製作的遊戲時遇到的同樣的問題,在安裝OBB文件時,應用程序將隨着資源加載而隨機崩潰。有沒有人能夠克服這個錯誤? –

回答

0

我有完全相同的問題,在使用stdio函數的本地C庫中從OBB讀取時,隨機損壞的資產。安裝的OBB中的128個字節段一直被破壞。數據中的任何更改都會改變字節段,導致不同的資產被破壞。對於運行O/S v.4.4.x(KitKat)和v.5.x.x(Lollipop)的手機來說,這只是一個問題,運行6.x.x(Marshmallow)的手機並不會影響到據我所知。

爲了避免這種情況,而不是安裝.obb,我最終使用瞭如下所示的備用.zip方法:https://developer.android.com/google/play/expansion-files.html

我簡單地將數據打包到帶有0壓縮(存儲)的.zip中,重命名爲.obb,並將其上傳到Google play。當用戶首次啓動應用程序時,我使用APK Expansion Zip Library將文件提取到外部存儲,然後直接讀取文件,而不是通過安裝。這導致該應用程序在手機上的尺寸是其兩倍,但由於數據損壞,最好在某些系統上完全損壞。

+0

是的,我們也切換到使用Expansion APK機制。 – btschumy