1. 程式人生 > >Android CTS 相容性測試的Fail的一些修改

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的普通視訊,基本可以通過。