android源码和eclipse编译项目分辨率问题

1.android源码默认没有编译hdpi资源

大多数情况我们做的应用eclipse开发编译,最后还剩要在源码下编译过达到工程化。但肯定很多朋友也遇到过这个问题:

源码编译出的apk显示出来和eclipse编译的不一样
前面作者有篇文章讲到过这问题,但并非特别确定是否是android:targetSdkVersion引起的。

这里作者记录下类似的问题,很多应用都需要使用多分辨率,好不容易再加了一套超清1080p的资源和布局,eclipse编译测试通过,然而在
android源码里编译出来运行时却提示找不到资源文件。

最后对比2个apk,发现源码默认编译时,drawable_hdpi文件夹没编译进去

android源码和eclipse编译项目分辨率问题

这什么原因呢?

分析下android的源码编译过程和build目录中的选项,这里主要看下编译的第一步,打包资源文件。具体的全部编译过程,
http://blog.csdn.net/luoshengyang/article/details/8744683老罗灰常给力的说的很清楚,不过篇幅有点长,还是很难看懂,多看几遍O(∩_∩)O~

我这里遇到的问题就是因为下面这个原因导致的eclipse和android源码编译的差异:
在源码目录build/target/product/generic.mk中加入一句:

CUSTOM_LOCALES:= hdpi
默认是不编译hdpi资源的 ,加上之后,就会编译出这drawable-hdpi资源文件夹。这在多分辨率设备上很多遇到运行时找不到资源的异常,可能是此问题导致的


2.资源文件编译进去了,运行时还是提示找不到资源文件

这里来看下android系统是怎么选择正确的资源文件的?
http://developer.android.com/guide/topics/resources/providing-resources.html#LocaleQualifier
官网上面是这么说的:

启动apk时,会根据device configuration,大致如下的信息:

Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key

再上面表格中定义的限定符的优先级(表格从上到下的顺序),来遍历apk中的res目录,排除不符合的限定符的文件夹,到剩下最后一个为止。

但这里作者有个很重要的疑问:这个devive configuration是在哪里获取?prop属性里么?希望知道的朋友能指点,thks

感觉是不应该每个设备都有一个这样的配置文件?
可能是每个设备的配置不同,导致最后没有刷选到合适匹配的资源文件;
故有些机子要适应多分辨率,一定要设置如上图nodpi这个修饰符,原因就有可能是他们的配置中包含着nodpi。
作者把nodpi去掉,运行时就提示找不到资源,但在另一台不同厂家的设备上就没问题





你可能感兴趣的:(android源码和eclipse编译项目分辨率问题)