응용 프로그램이 디버그 또는 릴리스 인증서를 사용하여 빌드되었는지 확인하는 다른 방법이 있지만 다음 방법이 가장 좋습니다.
Android 문서 Signing Your Application 의 정보에 따르면 디버그 키에는 " CN = Android Debug, O = Android, C = US " 라는 제목의 고유 이름이 포함 됩니다. 이 정보를 사용하여 디버그 키 서명을 코드에 하드 코딩하지 않고 디버그 키로 패키지가 서명되었는지 테스트 할 수 있습니다.
주어진:
import android.content.pm.Signature;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
다음과 같이 isDebuggable 메소드를 구현할 수 있습니다.
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;
}