【问题标题】:Use of file:///android_res/drawable/ url works under eclipse but not in production使用 file:///android_res/drawable/ url 在 Eclipse 下有效,但在生产环境中无效
【发布时间】:2011-08-28 19:14:01
【问题描述】:

我遇到了一个让我发疯的问题。我有一个需要包含一些图像的静态 html 文件 (assets/help/index.html)。因为我想要不同密度的不同图像,并且图像已经包含在 drawable-{ldpi,mdpi,hdpi} 中,所以我想我会使用以下 html 代码:

<img src="file:///android_res/drawable/image.png">

这在日食下效果很好!不幸的是,在生产版本(使用 maven android 插件构建)中,显示 html 页面的 webview 显示损坏的图像图标。

我尝试使用 loadUrl 和 loadDataWithBaseUrl(首先自己读取文件)打开页面,后者的基本 URL 为 file:///android_res/drawable。两种尝试都在 eclipse 下成功,但在 maven 版本中失败。

所以我解压了 Eclipse 生成的 apk 和 maven 生成的 apk 并在两者之间做了一个 diff -r 因为肯定有区别。

我很困惑地发现只有一些微不足道的差异(主要是签名差异,因为 eclipse apk 是用调试证书签名的,而 maven 是用我的官方证书签名的)。除此之外,apk的内容都是一样的!

有没有人知道发生了什么或如何继续发现更多信息?

【问题讨论】:

    标签: android android-assets


    【解决方案1】:

    我在使用 proguard 时遇到了类似的问题,我找到了解释(以及解决方案!)here

    在我的例子中,proguard 混淆了 R 类并且 android_res/[...] 再也找不到了。

    我解决了向 proguard.cfg 添加规则:

    -keepclassmembers class **.R$* {
        public static <fields>;
    }
    
    -keep class **.R$*
    

    我不了解 maven,但希望这会有所帮助。

    【讨论】:

    • 这是正确的答案,@pieter 应该接受它。 IDE 似乎从 proguard 处理中排除了生成的代码,而 maven build 使用直接的 proguard 调用,这会导致类混淆,除非指定了适当的规则。 j.c. 给出的规则足够准确,帮助了我。
    【解决方案2】:

    使用 file:///android_res 而不是 file:///android_asset 是有原因的。其中之一是 Android 库项目不能有资产。

    如果您碰巧想从 WebView 访问库项目中定义的资源使用 android-maven-plugin 的相应选项重命名包名称(这又依赖于一些 Android SDK 功能)然后你遇到了一个相当奇怪的错误。

    Android 在 android.webkit.BrowserFrame::inputStreamForAndroidResource 中执行此操作(至少在 4.1.2 中):

    final Class<?> d = mContext.getApplicationContext().getClassLoader().loadClass(
    mContext.getPackageName() + ".R$" + subClassName);
    

    这是对 R 类的动态查找,它使用应用程序的包名作为 Java 包名。但是这不起作用,因为重命名的包名中的 R 类将不存在。

    可能的解决方法如下: 在您的发布构建期间,动态地复制您的真实 R 类并将其放入适合重命名的应用程序包名称的 Java 包中。确保也更新复制源中的“package”语句。

    【讨论】:

      【解决方案3】:

      我会查看AsssetManagers 作为访问与应用程序捆绑的文件的一种方式。可以在here 找到教程(带有代码示例)。或者,您可以将文件放入res/raw 并使用openRawResource() 阅读它们

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 2012-04-21
        • 1970-01-01
        • 2011-09-05
        • 2021-10-22
        • 1970-01-01
        相关资源
        最近更新 更多