在我的Android应用程序中,我想仅为root设备提供特定功能。检查的唯一方法是知道我是否可以运行超级用户命令?这个检查够了吗?有更多方法可以检测越狱的Android设备吗?
答案 0 :(得分:2)
查看RootTools,这是一个非常棒的图书馆,旨在简化根设备开发应用程序。
来自examples:
if (RootTools.isRootAvailable()) {
// su exists, do something
} else {
// do something else
}
答案 1 :(得分:1)
对于那些仍然想知道如何检测到已生根的设备的人,现在有一种方法可以实现。
您现在可以使用SafetyNet Attestation API
。
Here是文档的链接。
以下是如何使用文档中的API的代码段。
// The nonce should be at least 16 bytes in length.
// You must generate the value of API_KEY in the Google APIs dashboard.
SafetyNet.getClient(this).attest(nonce, API_KEY)
.addOnSuccessListener(this,
new OnSuccessListener<SafetyNetApi.AttestationResponse>() {
@Override
public void onSuccess(SafetyNetApi.AttestationResponse response) {
// Indicates communication with the service was successful.
// Use response.getJwsResult() to get the result data.
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// An error occurred while communicating with the service.
if (e instanceof ApiException) {
// An error with the Google Play services API contains some
// additional details.
ApiException apiException = (ApiException) e;
// You can retrieve the status code using the
// apiException.getStatusCode() method.
} else {
// A different, unknown type of error occurred.
Log.d(TAG, "Error: " + e.getMessage());
}
}
});
要使用以下API,您必须从Google API控制台生成一个API密钥。该密钥就是您传递给.attest()
方法的密钥。
还添加SafetyNet依赖关系。
implementation 'com.google.android.gms:play-services-safetynet:15.0.1'
有关最新的依赖项版本,请参见https://developers.google.com/android/guides/setup。
API返回以下内容:
{
"nonce": "R2Rra24fVm5xa2Mg",
"timestampMs": 9860437986543,
"apkPackageName": "com.package.name.of.requesting.app",
"apkCertificateDigestSha256": ["base64 encoded, SHA-256 hash of the
certificate used to sign requesting app"],
"apkDigestSha256": ["base64 encoded, SHA-256 hash of
the APK installed on a user's device"],
"ctsProfileMatch": true,
"basicIntegrity": true,
}
ctsProfileMatch
和basicIntegrity
设备的完整性。
答案 2 :(得分:0)
有许多方法可用于越狱手机;大多数是硬件相关的和/或软件相关的。有些手机默认都配有超级用户访问权限!检查所有这些方法没有意义,因为最终结果是相同的:您拥有超级用户访问权限。所以是的,最简单/最简单/最好的答案是尝试执行超级用户命令。
如果你担心这还不够,或许你可以解释一下你正在尝试做什么。