Android CTS 相容性測試的Fail的一些修改
1、直接設定問題
estUnknownSourcesOffByDefault |
fail |
junit.framework.AssertionFailedError: Deviceshould not ship with 'Unknown Sources' enabled by default.expected:<0> butwas:<1> atandroid.provider.cts.Settings_SecureTest.testUnknownSourcesOffByDefault(Settings_SecureTest.java:183) |
這種fail最好解決,直接按照字面理解就OK,設定---
2、permission
-- testSensorFeatures |
fail |
junit.framework.AssertionFailedError:PackageManager#hasSystemFeature(android.hardware.sensor.accelerometer)returns true but SensorManager#getSensorList(1) shows sensors []expected:<true> butwas:<false> atandroid.app.cts.SystemFeaturesTest.assertFeatureForSensor(SystemFeaturesTest.java:300) |
一般情況修改 - > frameworks/base/data/etc/*.xml 檔案,例如
android.hardware.camera.xml,platform.xml等檔案,這邊的檔案定義了裝置具有的一些許可權。
--------------------------------------------------------------------------------------------------------------------
android.app.cts.SystemFeaturesTest#testSensorFeaturesFAIL
junit.framework.AssertionFailedError:PackageManager#hasSystemFeature(android.hardware.sensor.light) returns true butSensorManager#getSensorList(5) shows sensors [] expected:<true> butwas:<false>
原因:手機無光感解決方法:去除..\mediatek\config\{PROJECT}\android.hardware.sensor.light.xml及 android.hardware.sensor.proximity.xml檔案中相應選項
3、由測試而引起的非測試項出錯
-- testRecordingHint |
fail |
java.lang.RuntimeException: start failed. atandroid.media.MediaRecorder.start(Native Method) |
這種情況要根據Logcat去檢視RuntimeException的具體錯誤。通常可以先不改,因為很難查錯。
4、網路問題
-- test_isReachable |
fail |
java.net.UnknownHostException: Unable to resolvehost "www.google.com": No address associated with hostname atjava.net.InetAddress.lookupHostByName(InetAddress.java:426) |
這類問題是由於國內的網路無法訪問國外網站導致的,最好的辦法就在公司搭建一個VPN,連結出去。
5、系統檔案許可權
-- testAllFilesInSysAreNotWritable |
fail |
junit.framework.AssertionFailedError: Foundwritable: [/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_power,/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_en_file,/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_Calibrate] atandroid.permission.cts.FileSystemPermissionTest. testAllFilesInSysAreNotWritable(FileSystemPermissionTest.java:364) |
-- testNoSetuidTcpdump |
fail |
junit.framework.AssertionFailedError at android.security.cts.BannedFilesTest. assertNotSetugid(BannedFilesTest.java:59) |
這些問題是系統檔案許可權的問題,解決方法比較土,就是全域性搜尋該檔案,檢視那些對該檔案操作的指令碼,然後修改即可。
上面兩個fail的解決方法是:
a. 修改kernel/drivers/input/touchscreen/malata_ts.c
__ATTR(ts_power, 0777, NULL,ts_set_point),
__ATTR(ts_en_file, 0777, NULL,ts_set_point),
__ATTR(ts_ Calibrate, 0777,NULL, ts_set_point),
b. 修改system/core/include/private/android-filesystem-config.h
{ 06755, ADD_ROOT, ADD_ROOT,“system/xbin/tcpdump”}
-------------------------------------------------------------------------------------------------
android.app.cts.SystemFeaturesTest |
||
-- testLocationFeatures |
fail |
junit.framework.AssertionFailedError: PackageManager#hasSystemFeature should NOT return true for android.hardware.location.networkat android.app.cts.SystemFeaturesTest.assertNotAvailable(SystemFeaturesTest.java:375) |
原因:未配置相對應功能(開啟Locationaccess中所有開關(gps和wifi))解決方法:將..\frameworks\base\data\etc\android.hardware.location.gps.xml拷貝到..\mediatek\config\{PROJECT}\android.hardware.location.gps.xml目錄下並做修改
<permissions> <feature name="android.hardware.location" /> ----開啟 <feature name="android.hardware.location.network" /> ----開啟 <feature name="android.hardware.location.gps" /> ---無GPS則關此項 </permissions>
6、這種情況最多的。
-- testFocusDistances |
fail |
junit.framework.ComparisonFailure:expected:<infinity> butwas:<auto> at android.hardware.cts.CameraTest.testFocusDistancesByCamera (CameraTest.java:1386) |
對於這個fail的原因是CTS對攝像頭測試時,對攝像頭進行引數設定,然後在讀取引數後,引數出錯。
這 種情況要找到CameraTest原始碼,通常在source/cts/...下面,我們編譯時沒有編譯到這裡,僅檢視程式碼,例如找到 CameraTest.java,開啟後找到1386行,行數一般情況下不會有出入,除非source下面的cts版本和下載的cts版本不一致才會找不到,找到testFocusDistancesByCamera,然後根據程式碼檢視具體的測試,然後在找camera的原始碼,使用Log跟蹤,當然這個測試一定要結合做該模組的人一起改才行,不然很容易引起其他問題。
其中camera CTS測試程式碼在:
source/cts/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
攝 像頭設定的相關程式碼在:Source/device/Samsung/exynos4/libcamera/下面,有SecCameraHWInterface_zoom.cpp、SecCameraHWInterface_zoom.h、 SecCamera_zoom.cpp、SecCamera_zoom.h
找到之後通過修改後測試再修改後再測試直到CTS PASS。
(對於攝像頭,應注意是幾個攝像頭,不然測試可能會對兩個一起測試,這樣就算一個攝像頭調好了,能PASS了,另外一個過不了也是FAIL的。)
---------------------------------------------------------------------------
android.app.cts.SystemFeaturesTest#testCameraFeaturesFAIL
junit.framework.AssertionFailedError: PackageManager#hasSystemFeature shouldNOT return true for android.hardware.camera.autofocus
原因:手機無自動對焦功能 解決方法:去除..\mediatek\config\{PROJECT}\android.hardware.camera.xml檔案中 <featurename="android.hardware.camera.autofocus" />
7.Android.app.cts.SystemFeaturesTest#testLocationFeatures
該項是測試裝置利用無線網路訊號進行粗略定位的功能
Root Cause:缺少google網路定位的服務包NetworkLocation.apk,但是機器用getSystemFeature依然有這項功能。
Solution:要麼移植服務包,要麼disablesystemFeature。我暫時選擇後者。將/framework/base/data/etc/目錄下xml檔案裡面的所有 .”android.hardware.location.network”註釋掉即通過
8.Android.holo.cts.HoloTest包
該項是測試裝置顯示的widget view是否跟他提供的圖片相一致,精確到畫素點。
Root Cause:解析度設定問題
Solution:將修改build.prop
ro.sf.lcd_density=160可以通過測試,但是Blaze Launcher選單顯示不能全屏,考慮修改api
9.Android.mediastress包
該項是測試裝置能否正常播放google提供的視訊檔案
Root Cause:確定是否將cts-media包copy到sdcard目錄、確定是否正常播放視訊檔案。不能正常掃描播放,可能是視訊驅動問題
Solution:將cts-media檔案放到sdcard,檢檔案能正常掃描播放,測試通過。
10.Android.permissin.cts.DebugableTest#testNoDebuggable
該項是測試相應的app是否有debugable的標誌
Root Cause:AndroidManifest檔案裡面android:debuggable=“true”
Solution:將android:debuggable=“true”改為false
11.Android.security.cts.PackageSignatureTest#testPackageSignatures
該項是測試應用包是否使用google預設的簽名檔案
Root Cause:使用預設的簽名編譯code
Solution:build/target/product/security/下面的簽名換成自己做的。做法在該目錄下README有詳細說明
12.Libcore cts部分
Libcorects部分主要測試的是裝置裡面javaapi是否正常工作。當某部分異常的時候,cts對該項測試就會失敗。
根據實際的工作成果,得出一般libcore測試失敗大部分都跟你cts配置是否正確有關,而不是javaapi存在問題,比如測試之前是否factory reset就會影響其部分測試結果。所以在嘗試各種方法無果後,進行一下reset可能它就能過。以下是我做過的一些cts debug項。
1>.Libcore.java.text.dataFormateSymbolsTest
#test_getInstance_invalid_locale
Root Cause:
Solution:執行factory reset後,pass
2>.Libcore.java.text.SimpleDateFormateTest#testNonDstZoneNameWithDstTimestamp
Root Cause:該測試失敗原因是因為java的SimpleDateFormate類無法解析Daylight time夏令時區造成的
Solution:追api無果下,factory reset。Daylight時區正常解析,pass
3>.Libcore.java.util.OldTimeZoneTest包
Root Cause:java無法解析daylight夏令時區造成
Solution:factory reset
4>.Org.apache.harmony.luny.tests.java.net.URLConnectionTest#test_getAllowUserInteraction
Root Cause:java無法連線onearth.jpl.nasa.gov網站造成,nexus機器同樣無法通過該測試
Solution:無解。Google在新版本的cts測試中已經去掉連線該網站的邏輯部分。
13、DisplayRefreshRateTest
android.view.cts.DisplayRefreshRateTest |
||
-- testRefreshRate |
fail |
junit.framework.AssertionFailedError at android.view.cts.DisplayRefreshRateTest.testRefreshRate(DisplayRefreshRateTest.java:168) |
A3.關於這個刷幀率的問題,採用臨時修改的方法
./frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp下在硬體初始化階段
1. mRefreshRate = fbDev->fps-5;
1. mRefreshRate = fbDev->fps-5;
調整為:
1. mRefreshRate = fbDev->fps-4;
1. mRefreshRate = fbDev->fps-4;
14、
Test |
Result |
Details |
android.permission.cts.FileSystemPermissionTest |
||
-- testAllFilesInSysAreNotWritable |
fail |
junit.framework.AssertionFailedError: Found writable: [/sys/devices/virtual/input/input3/enable_ps, /sys/devices/pci0000:00/0000:00:03.4/i2c-5/5-0068/delay, /sys/devices/virtual/input/input3/delay_ps, /sys/devices/virtual/input/input3/enable_als, /sys/devices/virtual/input/input3/delay_als, /sys/devices/pci0000:00/0000:00:03.4/i2c-5/5-0068/enable, /sys/devices/virtual/input/input3/enable_gs] at android.permission.cts.FileSystemPermissionTest.testAllFilesInSysAreNotWritable(FileSystemPermissionTest.java:577) |
將相應的delay_ps這些檔案進行設定許可權,rw-r-r
15、
Test |
Result |
Details |
android.view.cts.DisplayRefreshRateTest |
||
-- testRefreshRate |
fail |
junit.framework.AssertionFailedError at android.view.cts.DisplayRefreshRateTest.testRefreshRate(DisplayRefreshRateTest.java:198) |
可以從Log中看到需要設定的重新整理率的大小。需要讓驅動修改該值
16、
android.media.cts.StreamingMediaPlayerTest |
||
-- testHLS |
fail |
junit.framework.AssertionFailedError: Stream did not play successfully after all attempts at android.media.cts.MediaPlayerTestBase.playVideoWithRetries(MediaPlayerTestBase.java:196) |
-- testHTTP_H264Base_AAC_Video1 |
fail |
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'junit.framework.AssertionFailedError''. Check device logcat for details |
-- testHTTP_H264Base_AAC_Video2 |
fail |
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'junit.framework.AssertionFailedError''. Check device logcat for details |
HLS測試是這樣:頻寬分為200000,360000,500000, 800000, 1200000,客戶端會根據當前獲取的頻寬值選擇是否播放高清還是普通視訊,
公司的頻寬比較大,但實際真正的頻寬可能會小好多,導致去播放高清視訊是會很卡,然後失敗
解決方法:
參考8x25平臺做法,在system.prop裡面對頻寬做限制:
media.httplive.max-bw = 360000
最大頻寬限制在360000,這樣,測試HLS的時候,就只會去播放200000的普通視訊,基本可以通過。