1. 程式人生 > >關於我被Cts坑的不要不要的那些事

關於我被Cts坑的不要不要的那些事

公司的手機最近也開始進行CTS測試了。分配了幾個bug給我,改的我欲仙欲死。 1:run cts -m CtsViewTestCases -t android.view.cts.PixelCopyTest#testWindowProducerCopyToRGBA16F 錯誤原因:未知 解決方案:修改以下檔案 frameworks/base/libs/hwui/Extensions.cpp

+mHasRenderableFloatTexture = extensions.has("GL_OES_texture_half_float");

frameworks/base/libs/hwui/Extensions.h

+ inline bool hasRenderableFloatTextures() const {
+ return (mVersionMajor >= 3 && mVersionMinor >= 2) || mHasRenderableFloatTexture;
+ }
+ bool mHasRenderableFloatTexture;

+ bool mHasRenderableFloatTexture;

- if (bitmap->colorType() == kRGBA_F16_SkColorType && !caches.extensions().hasFloatTextures()) {
+ if (bitmap->colorType() == kRGBA_F16_SkColorType &&
+ !caches.extensions().hasRenderableFloatTextures()) {
ALOGW("Can't copy surface into bitmap, RGBA_F16 config is not supported");
return CopyResult::DestinationInvalid;
}

請看清楚加減號哦 2:run cts -m CtsViewTestCases -t android.view.cts.ViewTest#testSetBackgroundResource 首先看報錯log。

java.lang.AssertionError: expected null, but was:<[email protected]> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotNull(Assert.java:755) at org.junit.Assert.assertNull(Assert.java:737) at org.junit.Assert.assertNull(Assert.java:747) at android.view.cts.ViewTest.testSetBackgroundResource(ViewTest.java:674) at java.lang.reflect.Method.invoke(Native Method) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:148) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:145) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:764)

可以看到是viewTest的674行,繼續追蹤

 @Test
    public void testSetBackgroundResource() {
        View view = new View(mActivity);

        assertNull(view.getBackground());

        view.setBackgroundResource(R.drawable.pass);
        assertNotNull(view.getBackground());

        view.setBackgroundResource(0);
        assertNull(view.getBackground());
    }

可以看到最後兩句程式碼他把view的背景設定為空進行斷言判斷,卻發現view的背景並不為空,所以導致本項測試fail。也就是說view.setBackgroundResource為空失敗。那麼我們進入view原始碼裡面看看。果不其然發現同事在其中加了個判斷。修改下就能Pass了

int if_auto_switch_wallpaper=android.provider.Settings.System.getInt(mContext.getContentResolver(),"AUTO_SWITCH_WALLPAPER",1);
        if(resid==0&&if_auto_switch_wallpaper==1){
            return;
        }

3:run cts -m CtsShortcutManagerTestCases -m android.content.pm.cts.shortcutmanager.ShortcutManagerClientApiTest#testShortcutInfoMissingMandatoryFields 找了我n久,最後問了mtk才知道是豁免項,百度竟然沒有。心痛。 Google bug id : 112251274 4:run cts -m CtsSecurityTestCases -t android.security.cts.PackageSignatureTest#testPackageSignatures 這個百度倒是挺多的,原因是因為使用了谷歌預設的key,需要自己生成key替換掉。 具體解決方法: 第一步:生成自定義的key,進入/android_src/development/tools目錄。使用目錄下的make_key工具。

development/tools$ sh make_key releasekey '/C=CN/ST=JiangSu/L=NanJing/O=Company/OU=Department/CN=YourName/emailAddress=YourE-mailAddress'
Enter password for 'releasekey' (blank for none; password will be visible): mypassword     <------- 設定你的密碼
creating platform.pk8 with password [mypassword]
Generating RSA private key, 2048 bit long modulus

這是我百度到的一段程式碼。說實話,把我坑的夠慘,不管怎麼樣設定密碼為空都成功不了。博主也未說明。找了半天才知道這是本來就有的坑。需要換一種方式寫法才行,直接用./,而不是sh make_key

./make_key '/C=CN/ST=GuangDong/L=ShenZhen/O=Forme/OU=Development/CN=Forme/[email protected]' releasekey
C   --->  Country Name (2 letter code)
ST  --->  State or Province Name (full name)
L   --->  Locality Name (eg, city)
O   --->  Organization Name (eg, company)
OU  --->  Organizational Unit Name (eg, section)
CN  --->  Common Name (eg, your name or your server’s hostname)
emailAddress --->  Contact email address

請一定要注意生成key的時候設定密碼為空。make編譯的時候是不會給你輸密碼的。會報錯的。而且需要生成releasekey,media,shared,platform,都是需要的, 第二部:把生成的8個檔案替換掉預設key,路徑:專案名/build/make/target/product/security 第三部:更改專案配置。build/make/core/Makefile,在BUILD_KEYS := test-keys下新增以下語句。

BUILD_KEYS := test-keys
endif
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
 BUILD_KEYS := release-keys

路徑:device/mediatek/common/device.mk新增以下語句。

PRODUCT_DEFAULT_DEV_CERTIFICATE :=  build/target/product/security/releasekey

然後重新編譯一次就行就可以pass這個測試了。

5:run cts -m CtsSystemUiTestCases -t android.systemui.cts.LightBarTests#testLightStatusBarIcons 原因:未知 測試過程中發現systemui裡面有個變數報空。按道理來說應該是不可能報空的,因為我們沒有修改過那裡,不知道是怎麼回事。給那個變數加個為空判斷就PASS了

--- a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -265,7 +265,8 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
         mStatusBarIconController.getTransitionsController().dump(fd, pw, args);
         pw.println();
         pw.println(" NavigationBarTransitionsController:");
-        mNavigationBarController.dump(fd, pw, args);
+	if(mNavigationBarController!=null){mNavigationBarController.dump(fd, pw, args);}
+        
         pw.println();
     }
 }

嘛。暫時就這些。如有不對,請多指教。