如何参考Android';资产';跨包?

如何参考Android';资产';跨包?,android,packages,assets,Android,Packages,Assets,我有一个Android应用程序,它以“免费”和“专业”两种版本发布。我已使用从两个版本引用的基本“库”项目设置了我的项目,因此我的包集如下所示: com.example.myapp com.example.myapp.free com.example.myapp.pro 我的基本“library”项目中的一个活动类将帮助文件加载到WebView中:WebView.loadUrl(“file:///android_asset/help.html"). 这个类在“free”和“pro”两个版本中

我有一个Android应用程序,它以“免费”和“专业”两种版本发布。我已使用从两个版本引用的基本“库”项目设置了我的项目,因此我的包集如下所示:

  • com.example.myapp
  • com.example.myapp.free
  • com.example.myapp.pro
我的基本“library”项目中的一个活动类将帮助文件加载到WebView中:WebView.loadUrl(“file:///android_asset/help.html"). 这个类在“free”和“pro”两个版本中都进行了扩展(原因超出了这个问题的范围),但是我希望两个版本都引用相同的HTML文件(即父包中的那个)。但是,在我当前的设置下,HTML文件需要在“com.example.myapp.free”和“com.example.myapp.pro”软件包下的“assets”文件夹中复制file:///android_asset/“我要工作了

是否有一种方法可以指定“file:///android_asset/“URI,以便访问父包中的‘资产’目录

我发现的一个部分解决方案是从“raw”目录中读取HTML文件,然后将结果字符串推送到我的WebView对象,但这对于纯文本HTML页面(例如,带有图像的页面,如我的页面)以外的任何页面来说都是混乱的


干杯。

作为一名既有专业版又有免费版的开发人员,我可以根据经验说,不要试图在应用程序之间共享资产。即使你让它工作起来,你最终也会遇到更多的麻烦


如果您必须这样做,每个应用程序必须共享同一个系统用户,并且您必须在一个应用程序中创建一个模仿另一个应用程序的上下文。这并不难做到,但可能是维护的噩梦

由于安德鲁·怀特没有解释如何做他所反对的事情,我将向你展示:

Context otherContext = context.createPackageContext("other.package.name", 0);
AssetManager am = otherContext.getAssets();

这似乎没那么糟糕。我已经验证了这两个包不需要共享用户ID。

我认为这是错误的。请参阅()。您的代码意味着您可以访问任何其他应用程序文件,这将是一个特别弱的操作系统安全模型。我已经试过了,但在我试图打开一个文件时失败了。你的链接没有提到资产,这就是问题所在。您是否尝试打开资产?在我的设备上,/data/app中的apk文件(以及其中的资产)是世界可读的。显然,/data/data中的应用程序私有目录不是。如果这是正确的,请收回你的否决票。+1谢谢,P.S.我正在使用createPackageContext(package,2)-它也可以工作(我不测试你的选项),但你也可以获得apk位置并在ZipInputStream中阅读它。我可以确认这是有效的-2个apk当然必须用相同的密钥签名。