一个关于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: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的时候,我知道了,有的手机反应慢,这个问题大家现在应该是不是都理解,明白。
……..