如何引用图书馆项目中的资产
在一个属于图书馆项目的课程中,我打电话给:
webview.loadUrl("file:///android_asset/info.html", null);
不幸的是,这只有在将文件info.html 复制到应用程序的项目资源文件夹时才有效。
有没有办法告诉Android库代码:“在图书馆的资产文件夹中查找此文件, 而不是在应用程序的资产文件夹中”?
从Android文档 :
图书馆项目不能包含原始资产
这些工具不支持在库项目中使用原始资产文件(保存在资产/目录中)。 应用程序使用的任何资产资源必须存储在应用程序项目本身的资产/目录中。 但是,保存在res /目录中的资源文件是受支持的。
如果要包含来自库项目的文件,则需要将其放在资源中,而不是资源中。 如果您正尝试从您的库项目中加载HTML文件到WebView中,这意味着您必须比通常的资产URL更环绕一些。 相反,你将不得不阅读资源数据,并使用像loadData的东西。
这个答案已经过时 , gradle构build系统和AAR文件支持资产。
现在可以使用Gradle构build系统。
使用Android Gradle插件的Android Studio 0.5.0和v0.9进行testing,我发现诸如
MyLibProject/src/main/assets/test.html
被正确打包在最终的应用程序中,并且可以通过预期的URL在运行时访问:
file:///android_asset/test.html
好的。 我一直在强调和失去睡眠一段时间。 我喜欢创造API的人的types,并且HATES复杂的整合。
在互联网上没有很多的解决scheme,所以我很自豪,我发现了一些Eclipse的黑客。
事实certificate,当你把一个文件放在Android Lib的/ assets文件夹中。 目标apk将捕获这个并将其放在APK存档的根目录下。 因此,使通用访问失败。 这可以通过简单地创build一个原始Java库,并将所有资源放在那里来解决,例如(JAVALIB)/assets/fileX.txt。
然后,您可以依次将其作为“项目”>“属性”>“Java构buildpath”>“源”>“链接源”中的Java构buildpath文件夹源。
- 链接源
- 点击variables。 并添加新variables,即VAR_NAME_X。 位置:../../(relative_path_to_assets_project)
- 点击确定
现在,当您构build并运行您的应用程序时,APK中的资源文件夹将包含您的(GLOBAL库)文件。
不需要重新configurationAndroid内部或没有任何东西。 它的所有能力在几次点击的Eclipse。
您可以通过在项目的资产文件夹中创build一个符号链接来指向库项目中的目录。
那么你可以访问如下:
webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);
我确认Daniel Grant的方法至less适用于以下情况:目标项目没有资产文件夹(或文件夹为空,因此您可以安全地删除它)。 我没有设置任何variables。 链接文件夹位置:/ home / matthew / workspace_moonblink / assetsForAdvocacy / assets文件夹名称:资产
“assetsForAdvocacy”是一个具有空src文件夹的Java项目(由New-Project-Java Project创build)和一个名为“assets”的新文件夹,现在为目标项目提供整个assets文件夹。
在Eclipse中,这是一种相当直接的方式,即在不同的项目中提供资源重用,如果它们还没有资产,那么就足够了。 从长远来看,我可能希望将其提升为内容提供商,但这是一个更大的发展。
我的项目使用以下代码访问资产:String advocacyFolderInAssets =“no_smoking /”; // assets / String下面的文件夹fn = advocacyFolderInAssets + imageFilename; 位图pristineBitmapForAdvocacy = getBitmapFromAsset(context,fn);
我在Ubuntu上使用Motodev Studio 3.1.0。 它不会让我把新资产项目中的新资产文件夹合并到目标项目中的现有资产文件夹中。
如果你想使用一个设置来从一个库创build多个派生产品,你可以考虑在你的SCM系统中使用svn:externals或者类似的解决scheme。 这也将做一些技巧,像在线帮助这样的静态资源可能会从android源代码单独版本化。
我发现了这个更老的问题 ,它也可能帮助你。
这是谷歌用于存档的官方方式(来自以上post): 链接
- 更新构build工具到22.6后,无法创buildAVD或使用AVDtesting任何应用程序
- Intent.EXTRA_EMAIL没有填充To字段
- 如何增加Android模拟器的存储? (INSTALL_FAILED_INSUFFICIENT_STORAGE)
- 弃用ManagedQuery()问题
- 你通常如何标记日志条目? (机器人)
- 在更新到新的Firebase之后获取Exception java.lang.NoClassDefFoundError:com.google.firebase.FirebaseOptions
- getLocationOnScreen()vs getLocationInWindow()
- 如何打开或模拟一个Android的偏好,用XML编程创build的点击?
- 错误:(26,0)未findGradle DSL方法:'runProguard()'