51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1759|回复: 1
打印 上一主题 下一主题

Launcher应用在CTS测试中出现的几个问题总结

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-6 16:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-4-11 15:51:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    问题1、CTS Failed:release的apk版本为测试版本,非正式版本

    Launcher通过eclipse编译Run As——AndroidApplication后,在项目bin目录生成的apk为测试版,可以通过以
    下代码测试当前包名apk是否为测试版:

    1. private boolean isApkDebugable(Contextcontext, String packageName) {

    2.                   try{

    3.                           PackageInfopkginfo = context.getPackageManager().getPackageInfo(packageName, 1);

    4.                           if(pkginfo != null) {

    5.                                    ApplicationInfoinfo = pkginfo.applicationInfo;

    6.                                    return(info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;

    7.                           }



    8.                   }catch (Exception e) {



    9.                   }

    10.                   returnfalse;

    11.          }

    复制代码


    因此eclipse正确的release方式为,eclipse——Android Tools——Export SignedApplication Package…或者
    Export UnSignedApplication Package…



    问题2、CTS Failed:Launcher CTS测试项BYODManaged Provisionging——Badged work apps visible in
    Launcher生成的work文件夹图标没有置灰



    Work文件夹中图标置灰功能,在Android7.0Launcher CTS上才增加的一个测试项,Android6.0版本的L
    auncher代码没有关于该属性的配置。所以将Android7.0 Launcher相关代码导入即可,涉及到主要Java类如下:

    com.android.laucnher3.compat.LauncherAppsCompat.java

    com.android.laucnher3.compat.UserHandleCompat.java

    com.android.laucnher3.compat.UserManagerCompat.java

    com.android.laucnher3.compat.UserManagerCompatV16.java

    com.android.laucnher3.compat.UserManagerCompatVN.java



    问题3、CTS Failed:Launcher CTS测试项BYODManaged Provisionging——Badged work apps visible in Laun
    cher生成的work文件夹里面图标没有显示公文包图标,或者有些显示有些未显示



    分析:CTS——BYOD Managed Provisioning——Badged work apps visible in Launcher测试项,是在当前系统
    中添加不同用户work类型的APPS,在设置-系统应用列表中可看到(例如会生成两个Contacts应用,一个带
    公文包图标,另一个没有),然后生成一个Work的文件夹,并把相关work信息的APPS放到work文件夹里。
    生成文件夹的操作在Launcher代码中执行,具体流程如下:
    ——LauncherModel.loadAllApps(监听是否有生成work文件夹操作)

    1. finalManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(mContext,user);

    2.                 if (heuristic != null) {

    3.                     final Runnable r = newRunnable() {

    4.                         @Override

    5.                         public void run() {

    6.                            heuristic.processUserApps(apps);

    7.                         }

    8.                     };

    9.                     runOnMainThread(new Runnable() {

    10.                         @Override

    11.                         public void run() {

    12.                             // CheckisLoadingWorkspace on the UI thread, as it is updated on

    13.                             // the UI thread.

    14.                             if(mIsLoadingAndBindingWorkspace) {

    15.                                 synchronized(mBindCompleteRunnables) {

    16.                                    mBindCompleteRunnables.add(r);

    17.                                 }

    18.                             } else {

    19.                                runOnWorkerThread(r);

    20.                             }

    21.                         }

    22.                     });

    23.                 }

    24. ——ManagedProfileHeuristic. processUserApps(判断work文件夹是否已创建)

    25. public voidprocessUserApps(List<LauncherActivityInfoCompat> apps) {

    26.         initVars();



    27.         HashSet<String> packageSet = newHashSet<>();

    28.         final boolean userAppsExisted =getUserApps(packageSet);



    29.         boolean newPackageAdded = false;

    30.         for (LauncherActivityInfoCompat info :apps) {

    31.             String packageName =info.getComponentName().getPackageName();

    32.             if(!packageSet.contains(packageName)) {

    33.                 packageSet.add(packageName);

    34.                 newPackageAdded = true;

    35.                markForAddition(info, info.getFirstInstallTime());

    36.             }

    37.         }



    38.         if (newPackageAdded) {

    39.            mPrefs.edit().putStringSet(mPackageSetKey, packageSet).apply();

    40.             // Do not add shortcuts on thehomescreen for the first time. This prevents the launcher

    41.             // getting filled with the manageduser apps, when it start with a fresh DB (or after

    42.             // a very long time).

    43.             finalizeAdditions(userAppsExisted);

    44.         }

    45.     }

    46. ——ManagedProfileHeuristic.finalizeWorkFolder(创建work文件夹)

    47.     private void finalizeWorkFolder() {

    48.         if (mWorkFolderApps.isEmpty()) {

    49.             return;

    50.         }

    51.         sortList(mWorkFolderApps);



    52.         // Try to get a work folder.

    53.         String folderIdKey = USER_FOLDER_ID_PREFIX+ mUserSerial;

    54.         if (mPrefs.contains(folderIdKey)) {

    55.             long folderId =mPrefs.getLong(folderIdKey, 0);

    56.             final FolderInfo workFolder =mModel.findFolderById(folderId);



    57.             if (workFolder == null || !workFolder.hasOption(FolderInfo.FLAG_WORK_FOLDER)){

    58.                 // Could not get a work folder.Add all the icons to homescreen.

    59.                mHomescreenApps.addAll(mWorkFolderApps);

    60.                 return;

    61.             }

    62.             saveWorkFolderShortcuts(folderId,workFolder.contents.size());



    63.             final ArrayList<ShortcutInfo>shortcuts = mWorkFolderApps;

    64.             // FolderInfo could already bebound. We need to add shortcuts on the UI thread.

    65.             new MainThreadExecutor().execute(newRunnable() {



    66.                 @Override

    67.                 public void run() {

    68.                     for (ShortcutInfo info :shortcuts) {

    69.                         workFolder.add(info);

    70.                     }

    71.                 }

    72.             });

    73.         } else {

    74.             // Create a new folder.

    75.             final FolderInfo workFolder = newFolderInfo();

    76.             workFolder.title =mContext.getText(R.string.work_folder_name);

    77.            workFolder.setOption(FolderInfo.FLAG_WORK_FOLDER, true, null);



    78.             // Add all shortcuts before adding it tothe UI, as an empty folder might get deleted.

    79.             for (ShortcutInfo info :mWorkFolderApps) {

    80.                 workFolder.add(info);

    81.             }



    82.             // Add the item to home screen andDB. This also generates an item id synchronously.

    83.             ArrayList<ItemInfo> itemList= new ArrayList<ItemInfo>(1);

    84.             itemList.add(workFolder);

    85.            mModel.addAndBindAddedWorkspaceItems(mContext, itemList);

    86.             mPrefs.edit().putLong(USER_FOLDER_ID_PREFIX+ mUserSerial, workFolder.id).apply();



    87.            saveWorkFolderShortcuts(workFolder.id, 0);

    88.         }

    89.     }


    复制代码

    在Work文件夹中的Apps没有生成公文包图标是因为Launcher将原生的All Apps放到桌面上,然后添加去重复
    APP操作LauncherModel.verifyApplications。去重复APP操作,只是将当前重复数组遇到的第一位去除,导致
    过滤数组将带公文包APP排在首位,过滤掉了带公文包图标的APP。而且由于Launcher在后台是多个线程去
    操作,线程执行的先后顺序不同,造成添加的过滤数组排序不一样,导致在桌面上Apps有时带公文包有时
    不带公文包。




    修改方案是优化去重复APP条件,考虑多用户条件,使其符合CTS规范要求。



    以上是近期Launcher在CTS测试中遇到的几个Failed的问题,供遇到同样情况的开发者参考。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-10 22:43 , Processed in 0.069697 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表