我有一对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");
这一直运行良好,但使用Google Play下载到Jelly Bean的应用程序无效(数据文件为空)。如果应用程序是直接从电子邮件安装的,那么很好,所以我怀疑我的问题与Google Play最近的安全更改有关。然而,据称这些已被撤消,但我仍然遇到问题。
有人能说清楚出了什么问题吗? (不幸的是我没有Jelly Bean设备)
或者,有人可以建议一种更好的机制来访问数据应用程序的txt文件吗?
由于
答案 0 :(得分:5)
JB设备上的付费应用已向前锁定&#39;这意味着APK分为两部分 - 一部分使用公共资源,另一部分使用私有部分和代码,其他应用程序无法读取。这里有一些细节:http://nelenkov.blogspot.com/2012/07/using-app-encryption-in-jelly-bean.html
我还没有详细研究过如何拆分文件,但是你看到的问题表明资产是私有APK的一部分,这是有道理的,因为你通常会在资产中粘贴API密钥等。
因此,您需要使用更间接的方法在两个应用程序(如ContentProvider或远程服务)之间共享信息。确保您需要签名权限才能访问这些权限,以确保只有您自己的应用才能使用它们。