如何引用库项目中的资产

an0*_*00b 52 android android-assets android-library library-project

在属于Library项目的类中,我调用:

webview.loadUrl("file:///android_asset/info.html", null);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只有在我将文件info.html 复制Application的项目资产文件夹中时才有效.

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

kab*_*uko 80

来自Android文档:

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

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

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

这个答案已经过时,gradle构建系统和AAR文件支持资产.


Gra*_*and 20

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

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

MyLibProject/src/main/assets/test.html
Run Code Online (Sandbox Code Playgroud)

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

file:///android_asset/test.html
Run Code Online (Sandbox Code Playgroud)

  • @StealthRabbi错了.请参阅http://stackoverflow.com/questions/18302603/where-to-place-assets-folder-in-android-studio (5认同)
  • 此代码不起作用。从 url.openStream 得到异常“没有这样的文件”。URL url = new URL("file:///android_asset/test.html"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); (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.位置:../../(relative_path_to_assets_project)
  3. 单击确定

现在,当您构建并运行您的应用程序时,APK中的assets文件夹将按您的意图包含您的(GLOBAL Library)文件.

无需重新配置android内部或任何内容.只需点击几下Eclipse即可完成所有功能.


小智 11

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

然后你可以访问如下:

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

35507 次

最近记录:

9 年,5 月 前