Có nhiều cách khác nhau để kiểm tra xem ứng dụng có được xây dựng bằng cách sử dụng gỡ lỗi hoặc phát hành chứng chỉ hay không, nhưng cách sau đây có vẻ tốt nhất 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 = Gỡ lỗi Android, 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ó được ký bằng khóa gỡ lỗi mà không mã hóa 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ể thực hiện một 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;
}
Phil-back ủng hộ chỉnh sửa. Đây không phải là câu hỏi về chương trình được phân phối hợp pháp trên thị trường hay không. Đó là câu hỏi về chương trình trong "chế độ gỡ lỗi".
– Hoàng Hiểu Vân 07:14:08 17/08/2011Cách này là cách dễ nhất để làm như vậy: stackoverflow.com/a/23844716/2296787
– Bùi Phước Nghĩa 09:06:57 30/11/2015