android GMS认证之testNoDebuggable

这里写图片描述

一个关于CTS的fail项

现在有一个CTS的fail项:

TablesAreCool
android.permission.cts.DebuggableTest
– testNoDebuggable failjunit.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:null
01-14 09:56:53.467: I/hexiaoming_dd(11872): className:null
01-14 09:56:53.467: I/hexiaoming_dd(11872): nativeLibraryDir:/system/priv-app/ApeCloudFileManager/lib/arm
01-14 09:56:53.467: I/hexiaoming_dd(11872): publicSourceDir:/system/priv-app/ApeCloudFileManager/ApeCloudFileManager.apk
01-14 09:56:53.474: I/hexiaoming_dd(11872): processName:com.android.bluetooth
01-14 09:56:53.474: I/hexiaoming_dd(11872): publicSourceDir:/system/app/Bluetooth/Bluetooth.apk

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

……..

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfreeman2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值