51Testing软件测试论坛

标题: Launcher应用在CTS测试中出现的几个问题总结 [打印本页]

作者: 一纸荒年    时间: 2018-4-11 15:51
标题: Launcher应用在CTS测试中出现的几个问题总结
问题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的问题,供遇到同样情况的开发者参考。


作者: qqq911    时间: 2018-4-11 17:13
感谢分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2