Android-EDLA 对pm list features方式的测试添加过滤逻辑
CTS 测试中的 hasFeature方法如下:
public static boolean hasFeature(ITestDevice device, String feature) throws Exception {
String features = device.executeShellCommand("pm list features");
StringTokenizer featureToken = new StringTokenizer(features, "\\n");
while (featureToken.hasMoreTokens()) {
if (("feature:" + feature).equals(featureToken.nextToken())) {
return true;
}
}
return false;
}
修改位置: frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java#getSystemAvailableFeatures
@Override
public @NonNull ParceledListSlice<FeatureInfo> getSystemAvailableFeatures() {
Slog.d("stb-debug-pms", "getSystemAvailableFeatures calling !! ");
// allow instant applications
ArrayList<FeatureInfo> res;
res = new ArrayList<>(mAvailableFeatures.size() + 1);
res.addAll(mAvailableFeatures.values());
final FeatureInfo fi = new FeatureInfo();
fi.reqGlEsVersion = SystemProperties.getInt("ro.opengles.version",
FeatureInfo.GL_ES_VERSION_UNDEFINED);
res.add(fi);
// ==========remove android.software.secure_lock_screen ==========
if ( SystemProperties.getBoolean("persist.sys.stb.edlatest", false)){
String targetFeatureToRemove = "android.software.secure_lock_screen";
Iterator<FeatureInfo> iterator = res.iterator();
while (iterator.hasNext()) {
FeatureInfo featureInfo = iterator.next();
if (targetFeatureToRemove.equals(featureInfo.name)) {
Slog.d("stb-debug-pms", "Intercepted and removed feature: " + targetFeatureToRemove);
iterator.remove();
break;
}
}
}
// ==========remove android.software.secure_lock_screen ==========
return new ParceledListSlice<>(res);
}
效果:
执行 adb shell pm list features 时将不再显示该条目,CTS 测试中的 hasFeature 也会自然返回 false。
如果对你有帮助,就一键三连呗(关注+点赞+收藏),我会持续更新更多干货~~






