转载自 http://blog.sina.com.cn/s/blog_82f640ed010166ub.html
--------------------------------------------------------------------------------------------------
11-15 15:39:53 I/0123456789ABCDEF:android.holo.cts.HoloTest#testHolo FAIL
junit.framework.AssertionFailedError: Failed bitmap names:[holo_button, holo_button_pressed, holo_progressbar,holo_progressbar_small, holo_progressbar_large,holo_radiogroup_vertical, holo_ratingbar_0, holo_ratingbar_2point5,holo_ratingbar_5, holo_ratingbar_0_pressed,holo_ratingbar_2point5_pressed, holo_ratingbar_5_pressed,holo_searchview, holo_searchview_query, holo_searchview_query_hint,holo_seekbar_0, holo_seekbar_50, holo_seekbar_100, holo_switch,holo_switch_checked, holo_tabhost, holo_toggle_button,holo_toggle_button_checked] Check/mnt/sdcard/cts-holo-assets/failed and/mnt/sdcard/cts-holo-assets/diff for details.
at android.holo.cts.HoloTest.runThemeTest(HoloTest.java:143)
at android.holo.cts.HoloTest.testHolo(HoloTest.java:35)
at java.lang.reflect.Method.invokeNative(Native Method)
atandroid.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
atandroid.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
atandroid.test.ActivityInstrumentationT
atandroid.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
atandroid.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
atandroid.test.InstrumentationTestRunne
atandroid.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
--------------------------------------------------------------------------------------------------
花了一个周的时间,终于把Android.hole Test分析清楚,解决了这个问题.
所有源代码路径:
cts\tests\tests\holo\src\android\holo\cts
framework\base\core\java\android\view\
1.
1.1)
runThemeTest(HoloTest.java)->startActivityForResult(ThemeTestActivity.java)->setTheme(LayoutTestActivity.java)->initializeTheme(ContextThemeWrapper.java)
1.2)
protected voidonPreExecute() {
mBitmap =getBitmap();
private booleancompareTo(Bitmap bitmap, Bitmap reference, int threshold){
int w =bitmap.getWidth();
int h =bitmap.getHeight();
ByteBufferbuffer1 = ByteBuffer.allocate(bitmap.getByteCount());
ByteBufferbuffer2 = ByteBuffer.allocate(reference.getByteCount());
bitmap.copyPixelsToBuffer(buffer1);
reference.copyPixelsToBuffer(buffer2);
final int length= w*h;
for (int i = 0; i< length; i++) {
//在这里比较图片,注意表示的颜色
Referrencebitmap在哪里?
cts\tests\tests\holo\res 里面的drawable, 里面是不是有好多drawable啊,你知道为什么吗?懂得应用程序开发的估计都知道,这个就是为了适应各种LCD尺寸和denisity的。(这个很重要哦)
1.3) 如果两个bitmap不一致,就保存到手机上 /mnt/sdcard/diff 和/mnt/sdcard/failed两个文件夹里面。
saveBitmap(LayoutTestActivity.java) ->
显示效果图如下:
注意红色表示的就是两个bitmap差异之处,具体看源代码。
2.
在网上查找了几天,用百度没有搜索出任何有用信息,最后还是google出大拿的一话,恍然大悟:
Android.hool test failed depends onscreen type and dpi, this test still fail with 1280x720 resolutionwith density 320, but can pass with density 240.
原来我的手机屏幕是1280x720 320dpi的,所以显示效果会有差异,导致失败了。
3.
# vimdevice/xxx/system.prop
rild.libpath=/system/lib/libreference-ril.so
rild.libargs=-d /dev/ttyS0
ro.sf.lcd_density=320
修改其中ro.sf.lcd_density=240
重新烧录编译img文件下载,重新测试,结果如下:
11-15 15:03:56 I:android.holo.cts.HoloTest#testHolo PASS
11-15 15:05:06 I:android.holo.cts.HoloTest#testHoloDialog PASS
11-15 15:06:13 I/emulator-5554:android.holo.cts.HoloTest#testHoloDialogMinimumWid
11-15 15:07:17 I:android.holo.cts.HoloTest#testHoloDialogNoActionBa
11-15 15:08:24 I/emulator-5554:android.holo.cts.HoloTest#testHoloDialogNoActionBa
11-15 15:09:31 I:android.holo.cts.HoloTest#testHoloDialogWhenLarge PASS
11-15 15:10:40 I/emulator-5554:android.holo.cts.HoloTest#testHoloDialogWhenLargeN
11-15 15:11:41 I:android.holo.cts.HoloTest#testHoloInputMethod PASS
11-15 15:12:53 I:android.holo.cts.HoloTest#testHoloLight PASS
11-15 15:14:04 I:android.holo.cts.HoloTest#testHoloLightDarkActionB
11-15 15:15:12 I:android.holo.cts.HoloTest#testHoloLightDialog PASS
11-15 15:16:20 I:android.holo.cts.HoloTest#testHoloLightDialogMinim
11-15 15:17:24 I:android.holo.cts.HoloTest#testHoloLightDialogNoAct
11-15 15:18:31 I:android.holo.cts.HoloTest#testHoloLightDialogNoAct
11-15 15:19:42 I:android.holo.cts.HoloTest#testHoloLightDialogWhenL
11-15 15:20:54 I/:android.holo.cts.HoloTest#testHoloLightDialogWhenL
11-15 15:22:06 I/:android.holo.cts.HoloTest#testHoloLightNoActionBar
11-15 15:23:17 I/:android.holo.cts.HoloTest#testHoloLightNoActionBar
11-15 15:24:18 I/:android.holo.cts.HoloTest#testHoloLightPanel PASS
11-15 15:25:26 I/:android.holo.cts.HoloTest#testHoloNoActionBar PASS
11-15 15:26:36 I/:android.holo.cts.HoloTest#testHoloNoActionBarFulls
11-15 15:27:36 I:android.holo.cts.HoloTest#testHoloPanel PASS
11-15 15:28:49 I:android.holo.cts.HoloTest#testHoloWallpaper PASS
11-1515:30:01 I: android.holo.cts.HoloTest#testHoloWallpaperNoTitle
4.