54

在属于图书馆项目的类中,我称之为:

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

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

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

4

7 回答 7

81

此答案已过时gradle 构建系统和 AAR 文件支持资产。


来自Android 文档

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

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

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

于 2011-06-14T16:50:16.630 回答
23

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

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

MyLibProject/src/main/assets/test.html

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

file:///android_asset/test.html
于 2014-03-07T15:44:06.423 回答
14

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

然后您可以访问如下:

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);
于 2012-09-10T07:01:35.760 回答
12

好的。一段时间以来,我一直为此感到压力和失眠。我是那种喜欢创建 API,讨厌复杂集成的人。

互联网上没有很多解决方案,所以我为我用一点 Eclipse Hackery 发现的东西感到非常自豪。

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

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

  1. 链接源
  2. 单击变量。并添加新变量,即VAR_NAME_X。位置:../../(relative_path_to_assets_project)
  3. 点击确定

现在,当您构建和运行您的应用程序时,APK 中的 assets 文件夹将包含您想要的(GLOBAL 库)文件。

无需重新配置android内部或什么都没有。只需单击几下 Eclipse,它就可以全部完成。

于 2012-04-26T09:54:38.073 回答
4

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

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

这是 Eclipse 中一种相当简单的方法,可以在许多不同项目中提供资产重用,如果它们还没有资产,足以开始使用。从长远来看,我可能希望增强它以成为内容提供商,但这是一个更大的发展。

我的项目使用以下代码访问资产: String advocacyFolderInAssets = "no_Smoking/"; //assets下的一个文件夹/ String fn =advocacyFolderInAssets+imageFilename; 位图 pristineBitmapForAdvocacy = getBitmapFromAsset(context, fn);

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

于 2012-06-28T18:24:52.167 回答
1

如果您想使用从一个库创建多个衍生产品的设置,您可以考虑在 SCM 系统中使用 svn:externals 或类似解决方案。这也可以使在线帮助等静态资产与 android 源代码分开进行版本控制。

于 2013-05-26T14:45:20.013 回答
0

我发现了这个较旧的问题,它也可能对您有所帮助。

这是谷歌用来存档的官方方式(来自上面的帖子):链接

于 2011-06-14T16:39:32.277 回答