2011-12-30 6 views
7

के लिए रनटाइम पर एपीके हस्ताक्षर पुनर्प्राप्त करें क्या रनटाइम पर एपीके हस्ताक्षर के बारे में जानकारी पुनर्प्राप्त करने का कोई तरीका है?एंड्रॉइड

उदाहरण के लिए मेरे पास 2 अलग-अलग हस्ताक्षरों के साथ एक ही ऐप पर हस्ताक्षर किए गए हैं: ऐप-1. एपीके और ऐप-2.एपीके और मैं रन एपीके में एपीके दोनों को अलग करने में सक्षम होना चाहता हूं। क्या यह संभव है?

मेरा लक्ष्य बाहरी सर्वर का उपयोग करके लाइसेंसिंग सिस्टम को लागू करना और एप्लिकेशन के संस्करण कोड और हस्ताक्षर के आधार पर लागू करना है।

उत्तर

8

आप पैकेजमैनेजर का उपयोग करके एपीके हस्ताक्षर तक पहुंच सकते हैं। पैकेज प्रबंधक में परिभाषित पैकेजइन्फो ध्वज पैकेज में शामिल हस्ताक्षरों के बारे में जानकारी लौटाता है।

Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES).signatures;  
for (Signature sig : sigs) 
{ 
    Log.i("App", "Signature : " + sig.hashCode()); 
} 

http://developer.android.com/reference/android/content/pm/PackageManager.html

+3

ठीक है, सिवाय इसके कि क्या API कॉल 'हस्ताक्षर' वास्तव में हस्ताक्षर करने के _certificate_ है। कच्चे प्रमाण पत्र प्राप्त करने के लिए 'toByteArray()' पर कॉल करें। इसके अतिरिक्त, 'हैशकोड()' आपको बहुत अधिक नहीं खरीदता है, आपको तुलना के लिए प्रमाणपत्र हैश मान की गणना करने के लिए 'MessageDigest' का उपयोग करने की आवश्यकता है। –

+0

@ निकोलेएलेनकोव यह एक पुरानी पोस्ट हो सकती है लेकिन मुझे इस कोड को लागू करने की आवश्यकता है। हस्ताक्षर प्रमाण और कच्चे प्रमाण के बीच क्या अंतर है? जब मैं 'हैशकोड()' के बजाय आपकी विधि 'toByteArray() 'का उपयोग करता हूं, तो हर बार जब मैं' .apk' चलाता हूं, तो' हैशकोड ') का उपयोग करते समय चेकशम बदलता है, जबकि केवल' हैशकोड() 'का उपयोग करके इसे तब तक स्थिर रखता है जब तक कि मैंने एप्लिकेशन को पुन: संकलित नहीं किया। मैं चाहता हूं कि '.apk' पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कीस्टोर की पहचान करें। – Synaero

+1

'हैशकोड()' MD5 चेकसम को वापस नहीं करता है, यह रनटाइम पर ऑब्जेक्ट की पहचान करने वाला एक कम या कम यादृच्छिक मान है। 'MessageDigest.getInstance ("MD5") का उपयोग करें। डाइजेस्ट (sigs [0] .toByteArray()) '। बीटीडब्ल्यू, 'कीस्टोर' की पहचान करने में कोई बात नहीं है, आपको हस्ताक्षर कुंजी/प्रमाण पत्र की पहचान करने की आवश्यकता है। –

2

यह एक अलग दृष्टिकोण हो सकता है, लेकिन आप केवल कस्टम अनुमति क्यों लागू नहीं करते हैं, यह हस्ताक्षर आधारित है? फिर अनुमति देने के लिए आप पैकेज प्रबंधक (या प्रसारण) का उपयोग कर सकते हैं।

यदि यह है, तो दोनों हस्ताक्षर समान हैं, अगर वे अलग नहीं हैं।