android GMS认证之testNoDebuggable

来源:互联网 发布:淘宝店茶叶招牌 编辑:程序博客网 时间:2024/05/17 21:59

这里写图片描述

一个关于CTS的fail项

现在有一个CTS的fail项:

Tables Are Cool android.permission.cts.DebuggableTest – testNoDebuggable fail junit.framework.AssertionFailedError: Packages marked debuggable: [com.apploaded.device_info_lanix] at android.permission.cts.DebuggableTest.testNoDebuggable(DebuggableTest.java:45)

从fail信息来看,是我们的手机中有一个应用—-com.apploaded.device_info_lanix,开户了debug权限,只要找到这个app,将其删除就OK了。

于是,我在整个应用中查找关键字(com.apploaded.device_info_lanix):

grep -rnw "com.apploaded.device_info_lanix" ./

让人吃惊的事情发生了,在整个工程中没有关于这个关键字,这……….。好吧,我只有放大招了。

我提了一个case给高通,高通很快给了一个回复:

Dear customer: Set<String> debuggableApps = new HashSet<String>(); List<ApplicationInfo> apps = getPackageManager() .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); for (ApplicationInfo app : apps) { String appName = app.packageName; if ((app.flags & ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE) { debuggableApps.add(appName); System.out.println(app.sourceDir); System.out.println(appName); } } app.sourceDir 可以确定这个app的安装位置。 

从高通回复,我们能看到其意思就是找到开启debug权限的app,看到其位置信息和名称。

好了,够了,动手写了一个test应用,将其代码写入,立刻得到了这个apk:

DeviceInfoLanix

,然后,在mk文件中将其删除,再测试,可以pass了,问题解决了。

android获取app的信息

再回过头来,我们看解决这个问题的关键,是要能得到app的信息,我们将这个高通的回复再完善一下,得到下面这个方法。这个方法可以得到app的信息如下:apk的位置,名称,类名,数据位置,包名,库的位置,权限,进程名,是否是debug等等。

/*** showAppInfo :* @param * @return void* @throws */private void showAppInfo() {// TODO Auto-generated method stub    List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);     for (int i=0;i<apps.size();i++) {         Log.i(TAG, "---------第"+i+"个app------");        Log.i(TAG, "app.sourceDir:"+apps.get(i).sourceDir);        Log.i(TAG, "name:"+apps.get(i).name);        Log.i(TAG, "className:"+apps.get(i).className);        Log.i(TAG, "dataDir:"+apps.get(i).dataDir);        Log.i(TAG, "packageName:"+apps.get(i).packageName);        Log.i(TAG, "nativeLibraryDir:"+apps.get(i).nativeLibraryDir);        Log.i(TAG, "backupAgentName:"+apps.get(i).backupAgentName);        Log.i(TAG, "permission:"+apps.get(i).permission);        Log.i(TAG, "processName:"+apps.get(i).processName);        Log.i(TAG, "publicSourceDir:"+apps.get(i).publicSourceDir);        Log.i(TAG, "taskAffinity:"+apps.get(i).taskAffinity);        Log.i(TAG, "flags:"+apps.get(i).flags);        Log.i(TAG, "app is debugable:"                +((apps.get(i).flags & ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE));    }       }

一个app简单的输出信息:

01-14 09:56:53.467: I/hexiaoming_dd(11872): ---------第118个app------01-14 09:56:53.467: I/hexiaoming_dd(11872): name:null01-14 09:56:53.467: I/hexiaoming_dd(11872): className:null01-14 09:56:53.467: I/hexiaoming_dd(11872): nativeLibraryDir:/system/priv-app/ApeCloudFileManager/lib/arm01-14 09:56:53.467: I/hexiaoming_dd(11872): publicSourceDir:/system/priv-app/ApeCloudFileManager/ApeCloudFileManager.apk01-14 09:56:53.474: I/hexiaoming_dd(11872): processName:com.android.bluetooth01-14 09:56:53.474: I/hexiaoming_dd(11872): publicSourceDir:/system/app/Bluetooth/Bluetooth.apk

当我看到是第118个app的时候,这还是没有安装任何三方app的时候,我知道了,有的手机反应慢,这个问题大家现在应该是不是都理解,明白。

……..

0 0
原创粉丝点击