क्या एपीके पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कुंजी के हस्ताक्षर को पुनर्प्राप्त करने का कोई तरीका है? मैंने अपने कीस्टोर से अपनी कुंजी के साथ अपने एपीके पर हस्ताक्षर किए। मैं इसे प्रोग्रामेटिक रूप से कैसे प्राप्त कर सकता हूं?एपीके हस्ताक्षर हस्ताक्षर कैसे प्राप्त करें?
उत्तर
आप PackageManager वर्ग http://developer.android.com/reference/android/content/pm/PackageManager.html
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs)
{
Trace.i("MyApp", "Signature hashcode : " + sig.hashCode());
}
मैं इस का उपयोग किया है मेरी डिबग कुंजी के लिए hashCode के साथ तुलना करने का उपयोग कर, की पहचान करने के APK नहीं है कि क्या इस तरह APK के हस्ताक्षर हस्ताक्षर का उपयोग कर सकते एक तरीके के रूप एक डीबग एपीके या एक रिलीज एपीके।
आप कैसे जानते हैं कि यह डीबग या रिलीज कुंजी के साथ हस्ताक्षरित है या नहीं? मुझे मिलता है: 08-08 08: 24: 36.668: I/Platform (1 9 131): हस्ताक्षर हैशकोड: -1907392821 मुझे यह भी नहीं पता कि यह कैसे सत्यापित किया जाए कि यह मेरा पैकेज है या नहीं ... (I यह सत्यापित करने की आवश्यकता है कि com.mypackage.myapp मुझसे संबंधित है या नहीं) – Zennichimaro
http://stackoverflow.com/questions/6122401/android-compare-ignature-of-current-package-with-debug-keystore?rq=1 मुझे डीबग या रिलीज एपीके के बीच अंतर करने देता है, लेकिन क्या एपीके वास्तव में मुझसे आता है यह सत्यापित करने के लिए मेरी सार्वजनिक कुंजी के खिलाफ मेरे हस्ताक्षर को सत्यापित करने का कोई तरीका है? धन्यवाद! – Zennichimaro
कोई स्थापित एप्लिकेशन के हस्ताक्षर प्राप्त करने का कोई तरीका नहीं है? उदाहरण के लिए यदि मेरे पास .apk फ़ाइल – Ruzard
पैकेज प्रबंधक आपको किसी भी स्थापित पैकेज के लिए हस्ताक्षर प्रमाणपत्र देगा। फिर आप हस्ताक्षर कुंजी के विवरण प्रिंट कर सकते हैं, उदा।
final PackageManager packageManager = context.getPackageManager();
final List<PackageInfo> packageList = packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);
for (PackageInfo p : packageList) {
final String strName = p.applicationInfo.loadLabel(packageManager).toString();
final String strVendor = p.packageName;
sb.append("<br>" + strName + "/" + strVendor + "<br>");
final Signature[] arrSignatures = p.signatures;
for (final Signature sig : arrSignatures) {
/*
* Get the X.509 certificate.
*/
final byte[] rawCert = sig.toByteArray();
InputStream certStream = new ByteArrayInputStream(rawCert);
try {
CertificateFactory certFactory = CertificateFactory.getInstance("X509");
X509Certificate x509Cert = (X509Certificate) certFactory.generateCertificate(certStream);
sb.append("Certificate subject: " + x509Cert.getSubjectDN() + "<br>");
sb.append("Certificate issuer: " + x509Cert.getIssuerDN() + "<br>");
sb.append("Certificate serial number: " + x509Cert.getSerialNumber() + "<br>");
sb.append("<br>");
}
catch (CertificateException e) {
// e.printStackTrace();
}
}
}
संबंधित धारावाहिक संख्या के साथ फ़ाइल को सत्यापित करने का आदेश क्या है: unzip -p [path_to_apk] मेटा-आईएनएफ/सीईआरटी.आरएसए | keytool -printcert – JY2k
मेरी स्थिति यह है कि मेरे पास एक पूर्व-स्थापित एपीके है जो गलत कुंजी-स्टोर का उपयोग करता है। तो सीधे स्थापित करने से असंगत हस्ताक्षर की वजह से असफल हो जाएगा। मुझे यह सुनिश्चित करने के लिए पहले हस्ताक्षर की जांच करनी होगी कि इसे आसानी से इंस्टॉल किया जा सके।
यहां मेरा समाधान है।
this code कहता है, आप एक स्थापित एपीके से हस्ताक्षर प्राप्त कर सकते हैं।
विवरण:
Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
दूसरी बात: releaseApk hashCode तुलना करने के लिए मिलता है। मेरे मामले में, मैंने अपने सर्वर से यह एपीके डाउनलोड किया, और इसे sd_card में रखा।
Signature releaseSig = context.getPackageManager().getPackageArchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0];
अंत में, हैशकोड की तुलना करें।
return sig.hashCode() == releaseSig.hashCode;
मैंने ऊपर दिए गए कोड को आजमाया है, यह ठीक काम करता है। यदि हैशकोड अलग है, तो आपको केवल uninstall पुराना एपीके होना चाहिए या यदि यह एक सिस्टम ऐप है और डिवाइस रूट है, तो आप केवल रनटाइम का उपयोग remove it पर कर सकते हैं, और फिर नया हस्ताक्षर एपीके इंस्टॉल कर सकते हैं।
getPackageArchiveInfo, getPackageAchiveInfo नहीं – frogoscar
- 1. एंड्रॉइड एप्लिकेशन एपीके हस्ताक्षर?
- 2. सिस्टम हस्ताक्षर के साथ एंड्रॉइड ऐप पर हस्ताक्षर कैसे करें?
- 3. एमएसआई पर हस्ताक्षर कैसे करें?
- 4. जीपीजी हस्ताक्षर
- 5. हस्ताक्षर/हस्ताक्षरित
- 6. एक्सएमएल हस्ताक्षर
- 7. डिजिटल हस्ताक्षर
- 8. ऑटो हस्ताक्षर
- 9. जार फ़ाइल से विधि हस्ताक्षर कैसे प्राप्त करें?
- 10. क्लिकऑन एप्लिकेशन पर हस्ताक्षर कैसे करें
- 11. पोस्ट करें और उसी विधि हस्ताक्षर के साथ प्राप्त करें
- 12. आउटलुक हस्ताक्षर में छवि कैसे एम्बेड करें?
- 13. विभिन्न हस्ताक्षर
- 14. विधि हस्ताक्षर
- 15. वीएफवाई: हस्ताक्षर
- 16. मेरे वीबी.नेट आवेदन पर हस्ताक्षर कैसे करें?
- 17. एक जार हस्ताक्षर कैसे नवीनीकृत करें?
- 18. आईफोन एसडीके: हस्ताक्षर कैप्चर कैसे कार्यान्वित करें?
- 19. सेवाओं पर एकल हस्ताक्षर कैसे करें?
- 20. एंड्रॉइड: मंच स्रोत बनाने के बाद, प्लेटफॉर्म कुंजी के साथ मनमानी एपीके पर हस्ताक्षर कैसे करें?
- 21. पीकेसीएस # 7 अलग हस्ताक्षर
- 22. एंड्रॉइड बिलिंग v3 - कोई हस्ताक्षर
- 23. हस्ताक्षर मैलवेयर पहचान
- 24. रनटाइम पर कोड हस्ताक्षर पहचान प्राप्त करना?
- 25. सी #: विधि हस्ताक्षर?
- 26. बाजार के लिए एंड्रॉइड ऐप पर हस्ताक्षर कैसे करें?
- 27. हस्ताक्षर मान्य त्रुटि नहीं
- 28. जावा: सुपरक्लास विधि हस्ताक्षर
- 29. प्रकार हस्ताक्षर प्रकार, आदि
- 30. हस्ताक्षर किए गए चार *
आप इसे साइन करने के लिए एक चींटी स्क्रिप्ट का उपयोग कर सकते हैं। लेकिन इसके लिए आपको अपने पासवर्ड कहीं भी स्टोर करने की आवश्यकता होगी जो असुरक्षित है। – clamp
मुझे बस इसके अंदर अपने ऐप से हस्ताक्षर प्राप्त करने की आवश्यकता है, उदा। मेरी पहली गतिविधि में मैं किसी भी तरह से अपना ऐप हस्ताक्षर प्राप्त करता हूं। अब तक मुझे नहीं पता कि कैसे – Waypoint
आह मैं समझता हूं। मुझे यकीन नहीं है कि यह संभव है या नहीं। – clamp