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

Daz*_*ddy 4 android google-play android-4.2-jelly-bean

我有一对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");
Run Code Online (Sandbox Code Playgroud)

这一直运行良好,但使用Google Play下载到Jelly Bean的应用程序无效(数据文件为空).如果应用程序是直接从电子邮件安装的,那么我很怀疑我的问题与Google Play最近的安全更改有关.然而,据称这些已被撤消,但我仍然遇到问题.

有人能说清楚出了什么问题吗?(不幸的是我没有Jelly Bean设备)

或者,有人可以建议更好的机制来访问数据应用程序的txt文件吗?

谢谢

Nik*_*kov 5

JB设备上的付费应用程序是"前向锁定".这意味着APK分为两部分 - 一部分使用公共资源,另一部分使用私有部分和代码,其他应用程序无法读取.这里有一些细节:http://nelenkov.blogspot.com/2012/07/using-app-encryption-in-jelly-bean.html

我没有详细讨论如何拆分文件,但是您看到的问题表明资产是私有APK的一部分,这是有道理的,因为您通常会在资产中粘贴API密钥等.

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