डिबग या रिलीज़ सर्टिफिकेट का उपयोग करके एप्लिकेशन का निर्माण किया जाता है या नहीं यह जांचने के लिए अलग-अलग तरीके हैं, लेकिन निम्नलिखित तरीका मुझे सबसे अच्छा लगता है।
एंड्रॉइड डॉक्यूमेंटेशन साइनिंग योर एप्लिकेशन में दी गई जानकारी के अनुसार , डिबग की में निम्नलिखित विषय विशिष्ट नाम होते हैं: " CN = Android डिबग, O = Android, C = US "। हम इस जानकारी का उपयोग परीक्षण करने के लिए कर सकते हैं कि क्या हमारे कोड में हार्डकॉग डीबग कुंजी हस्ताक्षर के बिना पैकेज डिबग कुंजी के साथ हस्ताक्षरित है।
दिया हुआ:
import android.content.pm.Signature;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
आप इस तरह एक अलग विधि लागू कर सकते हैं:
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;
}