如何跨包引用Android'资产'?

时间:2011-03-30 22:47:16

标签: android packages assets

我有一个以“免费”和“专业”版本发布的Android应用。我已经使用从两个版本引用的基础“库”项目设置了我的项目,这样我的包集看起来像这样:

  • com.example.myapp
  • com.example.myapp.free
  • com.example.myapp.pro

我的基础'library'项目中的一个Activity类将一个帮助文件加载到WebView中:WebView.loadUrl(“file:///android_asset/help.html”)。这个类在'free'和'pro'版本中都有扩展(出于本问题范围之外的原因),但我希望两个版本都引用同一个HTML文件(即父包中的文件)。但是,在我目前的设置下,HTML文件需要复制到'file'文件夹''com.example.myapp.free'和'com.example.myapp.pro'包下的'assets'文件夹中。 / android_asset /“URI工作。

有没有办法指定“file:/// android_asset /”URI,以便它访问父包中的'assets'目录?

我找到的部分解决方案涉及从'raw'目录中读取HTML文件,然后将生成的字符串推送到我的WebView对象,但这对于除纯文本的HTML页面之外的其他任何操作都会很麻烦(例如与图像,像我一样。)

干杯。

2 个答案:

答案 0 :(得分:6)

由于安德鲁怀特没有解释如何做他推荐的事情,我会告诉你:

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

这似乎并不那么糟糕。我已经确认这两个软件包不需要共享用户ID。

答案 1 :(得分:0)

作为一个同时拥有专业版和免费版的开发人员,我可以从经验中说,不要尝试跨应用程序共享资产。即使你让它发挥作用,你最终也会比它的价值更麻烦。

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