如何引用库项目中的资产

时间:2011-06-14 16:32:50

标签: android android-library android-assets library-project

在属于图书馆项目的类中,我调用:

webview.loadUrl("file:///android_asset/info.html", null);

不幸的是,这只有在我文件info.html复制到应用程序的项目资产文件夹中时才有效。

有没有办法告诉Android库代码:“在库的资源文件夹中查找此文件,在应用程序的资源文件夹中不是”?

7 个答案:

答案 0 :(得分:80)

来自Android Docs

  

图书馆项目不能包含原始资产

     

这些工具不支持在库项目中使用原始资产文件(保存在assets /目录中)。应用程序使用的任何资产资源都必须存储在应用程序项目本身的assets /目录中。但是,支持保存在res /目录中的资源文件。

如果要包含库项目中的文件,则需要将其放在资源中而不是资源中。如果您尝试将库项目中的HTML文件加载到WebView中,这意味着您必须采用比通常的资产URL更环绕的方法。相反,您必须阅读资源数据并使用loadData之类的内容。

此答案为out of dategradle build system和AAR文件支持资产。

答案 1 :(得分:20)

现在可以使用Gradle构建系统。

使用Android Gradle插件的Android Studio 0.5.0和v0.9进行测试,我发现了

等文件
MyLibProject/src/main/assets/test.html

正确打包在最终的应用程序中,可以在运行时通过预期的URL访问:

file:///android_asset/test.html

答案 2 :(得分:12)

好。我一直在强调和失眠。我是喜欢API创建的人,也是HATES复杂的集成。

互联网上有很多解决方案,所以我对我用Eclipse Hackery发现的内容感到非常自豪。

事实证明,当您将文件放在Android Lib的/ assets文件夹中时。目标apk将捕获此并将其放在APK存档的根目录中。因此,使一般访问失败。 这可以通过简单地创建Raw Java Library并将所有资源放在那里来解决,即(JAVALIB)/assets/fileX.txt。

然后您可以将其作为Java构建路径文件夹源包含在中 项目>属性> Java构建路径>来源>链接源。

  1. 链接来源
  2. 点击变量。并添加新变量,即VAR_NAME_X。 location:../../(relative_path_to_assets_project)
  3. 点击确定
  4. 现在,当您构建并运行您的应用时,APK中的assets文件夹将包含您想要的(GLOBAL Library)文件。

    无需重新配置android内部或任何内容。只需点击几下Eclipse即可完成。

答案 3 :(得分:11)

您可以通过在项目的资产文件夹中创建指向库项目目录的符号链接来实现此目的。

然后您可以访问如下:

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);

答案 4 :(得分:4)

我确认Daniel Grant的方法至少适用于以下情况:目标项目没有资产文件夹(或文件夹为空,因此您可以安全地删除它)。 我没有设置任何变量。 只需按如下方式设置LinkSource(仅举例)     链接文件夹位置:/ home / matthew / workspace_moonblink / assetsForAdvocacy / assets     文件夹名称:资产

“assetsForAdvocacy”是一个Java项目(使用New- Project - Java Project创建),带有空的src文件夹,以及一个名为“assets”的新文件夹,现在提供目标项目的整个assets文件夹。

这是Eclipse中一种相当直接的方式,可以在许多不同的项目中重复使用资产,如果它们还没有资产,那么就足够了。从长远来看,我可能希望将其提升为内容提供商,但这需要更多的开发。

我的项目使用以下代码访问资产:     String advocacyFolderInAssets =“no_smoking /”; //资产下面的文件夹/     String fn = advocacyFolderInAssets + imageFilename;     位图pristineBitmapForAdvocacy = getBitmapFromAsset(context,fn);

我在Ubuntu上使用Motodev Studio 3.1.0。它不会让我将新资产项目中的新资产文件夹“合并”到目标项目中的现有资产文件夹中。

答案 5 :(得分:1)

如果您想使用从一个库创建多个衍生产品的设置,您可以考虑在SCM系统中使用svn:externals或类似的解决方案。这也可以解决像在线帮助这样的静态资产可以从android源代码中单独编辑的技巧。

答案 6 :(得分:0)

我找到了this older question,它也可能对你有帮助。

这是Google用于归档此内容的官方方式(来自上面的帖子):Link