Il existe différentes façons de vérifier si l'application est construite avec un certificat debug ou release, mais la méthode suivante me semble la meilleure.
D'après les informations contenues dans la documentation d'Android Signature de la demande La clé de débogage contient le nom distinctif suivant : " CN=Android Debug,O=Android,C=US ". Nous pouvons utiliser cette information pour tester si le paquet est signé avec la clé de débogage sans coder en dur la signature de la clé de débogage dans notre code.
Compte tenu de ce qui précède :
import android.content.pm.Signature;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
Vous pouvez implémenter une méthode isDebuggable de cette manière :
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;
}
0 votes
Reprise de l'édition de Phil. Il ne s'agit pas de savoir si le programme est distribué légalement sur le marché ou non. Il s'agit de savoir si le programme est toujours en "mode débogage".
0 votes
Cette méthode est la plus simple : stackoverflow.com/a/23844716/2296787