2012-10-03 18 views
4

我有一對Android應用程序。一個是免費的「閱讀器」應用程序,另一個是在數據的子目錄中爲文本文件付費的「數據」應用程序。在果凍豆上訪問其他Android應用程序的資產

的閱讀器應用程序使用下面的代碼來訪問數據的應用程序的文本文件:

Intent myIntent = new Intent("myintent"); 
List<ResolveInfo> dataPacks = packageManager.queryIntentActivities(myIntent, 0); 
String packageName = dataPacks.get(0).activityInfo.packageName 
Resources res = packageManager.getResourcesForApplication(packageName); 
AssetManager assets = res.getAssets(); 
String[] dataFiles = assets.list("Data"); 

這一直工作正常,但使用谷歌Play下載到果凍豆的應用程序不工作(數據文件是空的)。如果應用程序是直接從電子郵件安裝的,那麼很好,所以我懷疑我的問題與最近Google Play的安全更改有關。然而,據稱這些已被撤銷,但我仍然有問題。

任何人都可以闡明什麼是錯誤的? (不幸的是我沒有果凍豆設備)

或者,有人可以建議一個更好的機制來訪問數據應用程序的txt文件?

感謝

回答

5

在JB設備付費應用的 '轉發鎖定'。這意味着APK分爲兩部分 - 一部分使用公共資源,另一部分使用私人和代碼,這是其他應用程序無法讀取的。這裏的一些細節:http://nelenkov.blogspot.com/2012/07/using-app-encryption-in-jelly-bean.html

我還沒有看過文件如何細分,但你看到的問題表明資產是私人APK的一部分,這是有道理的,因爲你通常會粘貼API密鑰等資產。

因此,您需要使用更間接的方法來共享兩個應用程序(如ContentProvider或遠程服務)之間的信息。確保您需要簽名權限才能訪問這些內容,以確保只有您自己的應用可以使用它們。

+1

昨天檢查了這個。正如預期的那樣,資產(/ res/asset)打包在APK的私有部分中,因此您無法直接從其他應用訪問它們。你也可以在模擬器上進行測試:你需要使用'-l'(正向鎖定)選項進行安裝:'adb install -l myapp.apk' –

+0

謝謝Nik,我改寫了我的代碼來使用ContentProvider它正在爲我工​​作..還沒有機會釋放到野外,看看它是否修復了我原來的問題。 –