【问题标题】:NotFoundException and FileNotFoundException when running app on Android 1.5在 Android 1.5 上运行应用程序时出现 NotFoundException 和 FileNotFoundException
【发布时间】:2010-07-28 21:49:46
【问题描述】:

我正在尝试将 android 1.6+ 应用程序反向移植到 android 1.5。

遵循此处的建议:

...我做了以下事情:

  1. 修改 AndroidManifest.xml 将 minSdkVersion 设置为 3
  2. 将我之前在 drawable-mdpi/ 中的所有文件移动到 drawable/
  3. 将 drawable-hdpi/ 重命名为 drawable-hdpi-v4/

在我看来,这应该确保 1.5 设备使用 drawable/ 中的文件,而 1.6 及更高版本的设备酌情使用 drawable/ 和 drawable-hdpi-v4/ 中的文件。 drawable/ 和 drawable-hdpi-v4/ 目录是我 res 文件夹中唯一的可绘制目录。

但是,在 1.5 模拟器上编译、安装和运行生成的二进制文件后,我收到以下错误:

E/AndroidRuntime( 1096): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 1096):    at android.widget.ImageView.<init>(ImageView.java:103)
E/AndroidRuntime( 1096):    at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime( 1096):    at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
E/AndroidRuntime( 1096):    at android.view.LayoutInflater.createView(LayoutInflater.java:499)
E/AndroidRuntime( 1096):    ... 26 more
E/AndroidRuntime( 1096): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/bg.png from drawable resource ID #0x7f02002e
E/AndroidRuntime( 1096):    at android.content.res.Resources.loadDrawable(Resources.java:1641)
E/AndroidRuntime( 1096):    at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
E/AndroidRuntime( 1096):    at android.widget.ImageView.<init>(ImageView.java:113)
E/AndroidRuntime( 1096):    ... 30 more
E/AndroidRuntime( 1096): Caused by: java.io.FileNotFoundException: res/drawable/bg.png
E/AndroidRuntime( 1096):    at android.content.res.AssetManager.openNonAssetNative(Native Method)
E/AndroidRuntime( 1096):    at android.content.res.AssetManager.openNonAsset(AssetManager.java:392)
E/AndroidRuntime( 1096):    at android.content.res.Resources.loadDrawable(Resources.java:1634)
E/AndroidRuntime( 1096):    ... 32 more

由于我不明白的原因,1.5 设备无法看到 bg.png 图像文件,其版本位于 drawable/ 和 drawable-hdpi-v4/ 目录中。

在 1.6 上运行相同的二进制文件可以正常工作。

为什么 1.5 设备无法通过此设置看到我的 res/drawable/bg.png 图像?

更新:Providing screen resource compatibility for Android 1.5 中所述,我使用的是 Android SDK r6 并将我的 mdpi 资源放在 drawable/ 目录中。另外,我已经验证了该问题并非孤立于 bg.png。如果我在我的 xml 中删除对损坏的可绘制对象的引用,则应用程序会在 setContentView() 期间中断下一个和每个后续图形。

【问题讨论】:

    标签: android


    【解决方案1】:

    成功!!!

    问题是我在 drawable-hdpi-v4/ 中有一个 foo.png 资源,该资源在 drawable/ 目录中不存在。当我从我的布局文件中引用 R.drawable.foo 时,1.5 模拟器因此无法为该 ID 找到合适的资源。之所以难以追踪,是因为在引用 foo.png 时并没有立即发生错误,而是在引用的 NEXT 资源(即 bg.png)上引发了错误。 Google 已确认这是一个错误。

    将 foo.png 的 mdpi 版本添加到 drawable/ 目录可以解决问题。

    【讨论】:

    • 哇,这在 5 个月后又咬了我一口。 Stackoverflow ftw。
    【解决方案2】:

    如果您使用 Android 1.6 构建项目并将 minSDKVesrion 设置为 3,则只能创建 3 个文件夹 drawable-hdpi、drawable-mdpi、drawable-ldpi。我在我的项目中重新创建了您的问题,当我更改 Res 文件夹结构时,它开始完美运行。你一定可以试一试(你知道有一个 Android 1.5 问题。许多 1.5 mdpi 设备从 drawable-ldpi 文件夹中获取资源。)

    【讨论】:

    • 嗨,Amit,1.5 版的模拟器根本无法识别 drawable-mdpi 目录。如果我将 drawable/ 资源移动到 drawable-mdpi/,则无法找到其中的任何一个(包括应用程序图标)。如果我将它们留在 drawable/ 中,它至少会找到应用程序图标(尽管由于某种原因不是 bg.png)
    【解决方案3】:

    几天前我遇到了同样的问题。我找到的唯一解决方案是从头开始创建一个新项目并将源文件和 res 文件添加到其中。这肯定会解决问题。

    【讨论】:

    • 嗯,我刚试过,好像没什么区别
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多