Có nhiều cách khác nhau để kiểm tra xem ứng dụng đang được xây dựng bằng cách sử dụng gỡ lỗi hoặc chứng chỉ phát hành, nhưng cách sau có vẻ tốt nhất đối với tôi.
Theo thông tin trong tài liệu Android Ký ứng dụng của bạn , khóa gỡ lỗi chứa tên phân biệt chủ đề sau: " CN = Android Debug, O = Android, C = US ". Chúng tôi có thể sử dụng thông tin này để kiểm tra xem gói được ký bằng khóa gỡ lỗi mà không cần mã hóa cứng chữ ký khóa gỡ lỗi vào mã của chúng tôi hay không.
Được:
import android.content.pm.Signature;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
Bạn có thể triển khai phương thức isDebuggable theo cách này:
private static final X500Principal DEBUG_DN = new X500Principal("CN=Android Debug,O=Android,C=US");
private boolean isDebuggable(Context ctx)
{
boolean debuggable = false;
try
{
PackageInfo pinfo = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(),PackageManager.GET_SIGNATURES);
Signature signatures[] = pinfo.signatures;
CertificateFactory cf = CertificateFactory.getInstance("X.509");
for ( int i = 0; i < signatures.length;i++)
{
ByteArrayInputStream stream = new ByteArrayInputStream(signatures[i].toByteArray());
X509Certificate cert = (X509Certificate) cf.generateCertificate(stream);
debuggable = cert.getSubjectX500Principal().equals(DEBUG_DN);
if (debuggable)
break;
}
}
catch (NameNotFoundException e)
{
//debuggable variable will remain false
}
catch (CertificateException e)
{
//debuggable variable will remain false
}
return debuggable;
}