NotFoundException和FileNotFoundException异常在Android 1.5上运行应用程序时
我试图反向移植一个Android 1.6+应用到Android 1.5。NotFoundException和FileNotFoundException异常在Android 1.5上运行应用程序时
继建议位置:
- http://comments.gmane.org/gmane.comp.handhelds.android.devel/97051
- http://groups.google.com/group/android-developers/browse_thread/thread/ff22f6e42a4a46d2/4201a20aaa23069d
- Android 2.2 SDK breaks compatibility with older phones
- https://developer.android.com/guide/topics/resources/providing-resources.html#ScreenCompatibility
...我也做了以下内容:
- 修改AndroidManifest.xml中来的minSdkVersion设为3
- 移动我的所有文件,在绘制-MDPI以前/以绘制/
- 重命名绘制,华电国际/以绘制-HDPI-V4/
在我看来,这应该保证1.5设备在绘制使用文件/ 1.6的同时,后来器件绘制使用的文件/文件和绘制-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 /绘制/ bg.png图像与此设置?
更新:如Providing screen resource compatibility for Android 1.5中所述,我使用Android SDK r6并将我的mdpi资源放在drawable /目录中。另外,我已经验证过这个问题并没有与bg.png隔离。如果我在xml中删除对断开的drawable的引用,则应用程序会在setContentView()期间中断下一个和后续图形。
成功!
的问题是我在绘制-HDPI-V4 /一个foo.png资源,这是不存在的绘制/目录。当我从布局文件引用R.drawable.foo时,1.5模拟器因此无法为该id找到合适的资源。是什么让追踪变得如此困难,是因为在引用foo.png时这个错误并没有立即发生,而是在所引用的下一个资源bg.png上抛出了错误。谷歌已经证实这是一个错误。
将foo.png的mdpi版本添加到drawable /目录解决了问题。
我几天前面临同样的问题。我发现的唯一解决方案是从头开始创建一个新项目,并为它们添加源文件和res文件。这肯定会解决这个问题。
嗯,我只是试过了,它似乎没有任何区别 – emmby 2010-07-29 15:09:45
如果您使用Android 1.6将minSDKVesrion设置为3来构建项目,则只能创建3个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi。我在我的项目中重新创建了您的问题,并且当我更改Res文件夹结构时,它开始正常工作。你一定能试试看(有一个Android 1.5的问题,你知道的。许多1.5 MDPI设备从绘制,LDPI夹中选取资源。)
嗨Amit,1.5模拟器根本无法识别drawable-mdpi目录。如果我将drawable /资源移动到drawable-mdpi /,则无法找到它们中的任何一个(包括应用程序图标)。如果我把它们放在可绘制的/中,它至少会找到应用程序图标(虽然由于某种原因不是bg.png) – emmby 2010-07-30 13:49:12
哇,这只是在5个月后再次咬住我。 Stackoverflow ftw。 – emmby 2011-02-04 21:01:47