在Jelly Bean上访问其他Android应用程序的资产

在Jelly Bean上访问其他Android应用程序的资产,android,google-play,android-4.2-jelly-bean,Android,Google Play,Android 4.2 Jelly Bean,我有一对Android应用程序。一个是免费的“阅读器”应用程序,另一个是付费的“数据”应用程序,其资产子目录中有一个文本文件 reader应用程序使用以下代码访问数据应用程序的文本文件: Intent myIntent = new Intent("myintent"); List<ResolveInfo> dataPacks = packageManager.queryIntentActivities(myIntent, 0); String packageName = dataPa

我有一对Android应用程序。一个是免费的“阅读器”应用程序,另一个是付费的“数据”应用程序,其资产子目录中有一个文本文件

reader应用程序使用以下代码访问数据应用程序的文本文件:

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");
Intent myIntent=新意图(“myIntent”);
列表数据包=packageManager.QueryInputActivities(myIntent,0);
字符串packageName=dataPacks.get(0).activityInfo.packageName
Resources res=packageManager.getResourcesForApplication(packageName);
AssetManager资产=res.getAssets();
字符串[]数据文件=assets.list(“数据”);
这一直运行良好,但使用Google Play下载到Jelly Bean的应用程序不起作用(数据文件为空)。如果该应用程序是直接通过电子邮件安装的,那就没问题了,所以我怀疑我的问题与谷歌Play最近的安全更改有关。然而,这些据称已经撤销,但我仍然有问题

有人能解释出哪里出了问题吗?(不幸的是,我没有果冻豆设备)

或者,有人能推荐一种更好的机制来访问数据应用程序的txt文件吗


谢谢

JB设备上的付费应用是“前向锁定”的。这意味着APK分为两部分——一部分是公共资源,另一部分是私有资源和代码,其他应用程序无法读取。有关详情如下:

我没有详细研究文件是如何分割的,但是您看到的问题表明,资产是私有APK的一部分,这是有道理的,因为您通常在资产中粘贴API键等


因此,您需要使用更间接的方法在两个应用程序(如ContentProvider或远程服务)之间共享信息。确保您需要签名权限才能访问这些应用程序,以确保只有您自己的应用程序才能使用它们

昨天检查过这个。正如预期的那样,资产(/res/asset)打包在APK的私有部分,因此您无法直接从其他应用程序访问它们。你也可以在模拟器上测试:你需要使用'-l'(转发锁)选项进行安装:`adb install-l myapp.apk'谢谢Nik,我已经重写了我的代码,改为使用ContentProvider,它对我有效。。我还没有机会去野外,看看它是否能解决我原来的问题。