我正在尝试将 android 1.6+ 应用程序向后移植到 android 1.5。
遵循此处的建议:
- http://comments.gmane.org/gmane.comp.handhelds.android.devel/97051 http://comments.gmane.org/gmane.comp.handhelds.android.devel/97051
- http://groups.google.com/group/android-developers/browse_thread/thread/ff22f6e42a4a46d2/4201a20aaa23069d http://groups.google.com/group/android-developers/browse_thread/thread/ff22f6e42a4a46d2/4201a20aaa23069d
- Android 2.2 SDK 破坏了与旧手机的兼容性 https://stackoverflow.com/questions/2923823/android-2-2-sdk-breaks-compatibility-with-older-phones
- https://developer.android.com/guide/topics/resources/providing-resources.html#ScreenCompatibility https://developer.android.com/guide/topics/resources/providing-resources.html#ScreenCompatibility
...我做了以下事情:
- 修改AndroidManifest.xml,将minSdkVersion设置为3
- 将之前在drawable-mdpi/中的所有文件移动到drawable/
- 将drawable-hdpi/重命名为drawable-hdpi-v4/
在我看来,这应该确保1.5设备使用drawable/中的文件,而1.6及更高版本的设备酌情使用drawable/和drawable-hdpi-v4/中的文件。 drawable/ 和drawable-hdpi-v4/ 目录是我的res 文件夹中唯一的drawable 目录。
但是,在 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 图像?
UPDATE:如中所述提供Android 1.5的屏幕资源兼容性 https://developer.android.com/guide/topics/resources/providing-resources.html#ScreenCompatibility,我正在使用 Android SDK r6 并将我的 mdpi 资源放在drawable/目录中。另外,我已经验证问题不仅仅局限于 bg.png。如果我在 xml 中删除对损坏的可绘制对象的引用,则应用程序会在 setContentView() 期间在下一个图形和每个后续图形上中断。
成功!!!
问题是我在drawable-hdpi-v4/中有一个foo.png资源,但它不存在于drawable/目录中。当我从布局文件中引用 R.drawable.foo 时,1.5 模拟器无法为该 id 找到合适的资源。导致追踪如此困难的原因是,在引用 foo.png 时错误并未立即发生,而是在引用的下一个资源(即 bg.png)上引发了错误。谷歌已确认这是一个错误。
将 foo.png 的 mdpi 版本添加到 drawable/ 目录修复了该问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)