zme*_*eda 15 android signature apk
正如我们所做的那样,当它处于开发模式(构建)时,我有一个由debug.keystore(默认情况下)签名的应用程序.当它投入生产时,我们用我们的私钥签名.有没有办法在运行时确定当前包是用debug.keystore签名的(处于开发模式)还是用我们的私钥签名(处于生产模式).
我尝试过类似的东西
PackageManager packageManager = getPackageManager();
try {
Signature[] signs = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature signature : signs) {
Log.d(TAG, "sign = " + signature.toCharsString());
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我不知道下一步该做什么?这是正确的做法吗?如何获得类似的debug.keystore签名?
我知道存在MD5指纹,keytool -list -keystore ~/.android/debug.keystore但在Signature类中没有"md5指纹"式方法.我想这样做是因为MapView Key,Logging,LicenseChecker和类似的东西.
Jcs*_*Jcs 18
PackageInfo由于tha字段不包含包签名而是签名者X509证书链,因此签名似乎没有很好地命名.请注意(大多数情况下)此链似乎仅限于一个单一的自签名证书.
根据Android开发人员页面签名您的应用程序,使用此DN生成调试签名证书:CN=Android Debug,O=Android,C=US
因此,很容易测试应用程序是否已在调试模式下签名:
private static final X500Principal DEBUG_DN = new X500Principal("CN=Android Debug,O=Android,C=US");
/* ... */
Signature raw = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(raw.toByteArray()));
boolean debug = cert.getSubjectX500Principal().equals(DEBUG_DN);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11310 次 |
| 最近记录: |