我正在编写一个 Android 应用程序,如果他/她的设备上安装了任何 PHA(潜在有害应用程序),它将向用户报告(以及其他 SafetyNet 数据)。
为此,我正在使用SafetyNet Verify Apps API。我的电话isVerifyAppsEnabled()
工作正常,但拨打电话listHarmfulApps()
一无所获。
两者在语法上是相同的,所以我相信我的代码是可以的,但无论如何:
SafetyNetClient safetyNetClient = SafetyNet.getClient(this.getContext());
safetyNetClient.listHarmfulApps()
.addOnCompleteListener(new OnCompleteListener<SafetyNetApi.HarmfulAppsResponse>() {
@Override
public void onComplete(@NonNull Task<SafetyNetApi.HarmfulAppsResponse> task) {
Log.d("FragmentSafetyNet", "Received listHarmfulApps() result");
if (task.isSuccessful()) {
SafetyNetApi.HarmfulAppsResponse result = task.getResult();
List<HarmfulAppsData> appList = result.getHarmfulAppsList();
if (appList.isEmpty()) {
Log.d("FragmentSafetyNet", "There are no known potentially harmful apps installed.");
} else {
Log.e("FragmentSafetyNet", "Potentially harmful apps are installed!");
for (HarmfulAppsData harmfulApp : appList) {
Log.e("FragmentSafetyNet", "Information about a harmful app:");
Log.e("FragmentSafetyNet", " APK: " + harmfulApp.apkPackageName);
Log.e("FragmentSafetyNet", " SHA-256: " + harmfulApp.apkSha256);
Log.e("FragmentSafetyNet", " Category: " + harmfulApp.apkCategory);
}
}
} else {
Log.d("FragmentSafetyNet", "An error occurred. " +
"Call isVerifyAppsEnabled() to ensure " +
"that the user has consented.");
}
}
})
.addOnSuccessListener(new OnSuccessListener<SafetyNetApi.HarmfulAppsResponse>() {
@Override
public void onSuccess(SafetyNetApi.HarmfulAppsResponse harmfulAppsResponse) {
Log.d("listHarmfulApps()", "Sucess! Received listHarmfulApps() result");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("listHarmfulApps()", "Error: " + e.getMessage());
}
});
代码实际上并不多:它基本上是Google 页面上的代码,适用于使用 GMS 11.0.2 中的新 API 调用(上述页面上的示例都使用不推荐使用的调用),但它不适用于全部。没有一个听众被触发。
要么我搞砸了,要么我正在测试的设备上根本没有任何 PHA。
因此我的3个问题:
1)我的代码正确吗?
2) 是否有任何我可以安装的 PHA 会被列入黑名单,出现在名单上,但实际上并没有害处?(如用于测试杀毒软件的EICAR病毒)。
3)最后,如果(1)和(2)不可能,我可以安装任何 PHA 吗?在这种情况下,我将使用受控的、一次性的环境,例如我将在之后擦除的有根模拟器。
先感谢您。