2009-06-12 19 views
52

से डाउनलोड किया गया था, मेरे पास एक एंड्रॉइड लाइब्रेरी है जो एक परीक्षण सर्वर और उत्पादन सर्वर पर डेटा अपलोड करती है। मैं विकासशील होने पर परीक्षण सर्वर का उपयोग करने के लिए डेवलपर्स और एंड्रॉइड मार्केट से ऐप डाउनलोड होने पर उत्पादन सर्वर चाहता हूं।पता लगाएं कि ऐप एंड्रॉइड मार्केट

यह संभव किसी ऐप बताने के लिए यह जहां (मार्केट या गैर बाजार?) से आया है मैं एक पर हस्ताक्षर किए JAR फ़ाइल की उपस्थिति का पता लगा सकता कल्पना कर सकते हैं है।

+0

क्या आप जानना चाहते हैं कि ऐप प्रकाशित है या अंत उपयोगकर्ता ने ऐप डाउनलोड किया है? पसंद है, या तो उपयोगकर्ता ने ऐप को बाजार से लोड किया है, इसलिए बाजार ऐप्स उत्पादन सर्वर का उपयोग करते हैं, या ऐप प्रकाशित किया गया था, इसलिए उस ऐप की सभी प्रतियां उत्पादन ऐप्स बन गईं। – Grant

+0

अनुदान, जो अंतर मैं वास्तव में खोज रहा हूं वह डेवलपर-टाइम बनाम उत्पादन-समय है, इसलिए मैं डेवलपर प्रतियां परीक्षण सर्वर पर रहना चाहता हूं। मैं बस किसी भी ऐप को चाहता हूं जो उत्पादन सर्वर का उपयोग करने के लिए "जंगली में" डाउनलोड किया गया था। – sehugg

+0

कोई अन्य एप्लिकेशन बनाएं जो कुछ भी नहीं करता है, फिर डीबग बिल्ड को इंगित करने के लिए उस की उपस्थिति के लिए परीक्षण करें? विकास फोन पर ऐप इंस्टॉल करें। – OJW

उत्तर

38

हां, आप इसके लिए हस्ताक्षर का उपयोग कर सकते हैं। यदि आप विकास के दौरान अपने ऐप पर हस्ताक्षर करने के लिए डीबग कुंजी का उपयोग करते हैं और बाजार में अपना ऐप अपलोड करते समय रिलीज कुंजी का उपयोग करते हैं तो आप उस हस्ताक्षर की जांच कर सकते हैं जिस पर ऐप पर हस्ताक्षर किए गए थे और उस परीक्षण परीक्षण या उत्पादन सर्वर के आधार पर।

try { 
     PackageManager manager = context.getPackageManager(); 
     PackageInfo appInfo = manager.getPackageInfo(
      YOUR_PACKAGE_NAME, PackageManager.GET_SIGNATURES); 

     // Now test if the first signature equals your debug key. 
     boolean shouldUseTestServer = 
      appInfo.signatures[0].toCharsString().equals(YOUR_DEBUG_KEY); 

    } catch (NameNotFoundException e) { 
     // Expected exception that occurs if the package is not present. 
    } 

YOUR_PACKAGE_NAME 'com.wsl.CardioTrainer' की तरह कुछ होना चाहिए: अपने ऐप के हस्ताक्षर को पढ़ने के लिए एक छोटा सा कोड टुकड़ा है। यह आपके AndroidManifest.xml में उपयोग किया जाने वाला पैकेज नाम होना चाहिए। गुड लक

निशान

+1

क्या यह कठिन कोड YOUR_RELEASE_KEY है? क्या रिवर्स इंजीनियरिंग इसे प्रकट करेगा? – Thushan

+4

इससे समस्या हल हो सकती है लेकिन अगर मैं आप थे तो मैं निश्चित रूप से अपने कोड में अपनी पूरी निजी कुंजी नहीं डालूंगा। शायद आप कुंजी या कुछ के 20 char सबसेट का उपयोग कर दूर हो सकते हैं? –

+5

मुझे लगता है कि आपकी कुंजी और हार्ड कोडिंग पर किसी प्रकार का हैश का उपयोग करके, फिर पैकेज जानकारी में संग्रहीत कुंजी को हैश करना, फिर जांच करना कि किसी को वास्तविक कुंजी को देखने से रोक दिया जाए, यदि यह रिवर्स इंजीनियर था। –

1

आप उत्पादन परिवेश के लिए अपने को डिफ़ॉल्ट कॉन्फ़िगरेशन और एक कस्टम Instrumentation कि परीक्षण पर्यावरण के लिए विन्यास सेट इस्तेमाल कर सकते हैं। एंड्रॉइड बाजार में प्रकाशित करने से पहले इंस्ट्रुमेंटेशन हटा दिया जाना चाहिए।

3
मैं क्या बता सकते हैं कुछ भी नहीं है कि बाजार आवेदन करने के लिए "झंडा" एक कहना है कि यह बाजार से डाउनलोड किया गया आवेदन करता है से

मैं इस मुद्दे को एक और एंड्रॉयड पुस्तकालय द्वारा एक अलग ढंग से संपर्क किया देखा है। AdMob एंड्रॉइड एसडीके on their wiki वर्णित डाउनलोड और उपयोग करने के लिए स्वतंत्र है। यह लाइब्रेरी विज्ञापन प्रदान करती है, इसलिए उनके पास यह निर्धारित करने में सक्षम होना चाहिए कि वर्तमान में चल रहे एप्लिकेशन को डेवलपर द्वारा परीक्षण किया जा रहा है या यदि इसका उपयोग "जंगली में" किया जा रहा है। उनके दृष्टिकोण की आवश्यकता थी कि डेवलपर एक्सएमएल में "परीक्षण" विशेषता सेट करे या लाइब्रेरी को "सेटटेस्टिंग (बूलियन)" फ़ंक्शन को कॉल करने के लिए लाइब्रेरी को यह बताए कि कौन से विज्ञापन सेवा करते हैं। यह स्पष्ट रूप से एक मैन्युअल दृष्टिकोण से अधिक है जो डेवलपर पर प्रकाशित होने से पहले कोड या एक्सएमएल की एक पंक्ति को बदलने के लिए निर्भर करता है।

+1

हाँ, यह एक दृष्टिकोण है .. समस्या यह है कि जब आप प्रकाशित करते हैं तो इसे वापस बदलना याद रखना मुश्किल होता है :) मैं एक ऐसा तरीका ढूंढ रहा था जो स्वचालित होगा। ओह अच्छा। – sehugg

+1

रिलीज बनाम डीबग बिल्डिंग के बीच चर को स्वैप करने के लिए आप 'build.xml' चींटी बिल्ड स्क्रिप्ट को कस्टमाइज़ कर सकते हैं। मैंने इसे इस तरह से किया है कि एक कॉन्फ़िगरेशन क्लास (फेसबुक और ट्विटर कुंजी के लिए) और एक संसाधन फ़ाइल (Google मानचित्र के लिए) स्वचालित रूप से बदल दी जाती है। –

0

शायद आप "डेवलपर मोड" के लिए अपने ऐप के लिए सेटिंग जोड़ सकते हैं।

एक और संभावना है, यह एक विशेष फ़ाइल या एसडी कार्ड पर विन्यास फाइल, और कहा कि के बंद कुंजी खोजें की है।

10

एपीआई 5 के साथ शुरू, आप PackageManager.getInstallerPackageName(String) उपयोग कर सकते हैं। प्रलेखन से:

पैकेज स्थापित करने वाले एप्लिकेशन के पैकेज नाम को पुनर्प्राप्त करें। यह पहचानता है कि पैकेज किस बाजार से आया था।

एंड्रॉइड मार्केट का पैकेज प्राप्त करने के लिए, this post मदद कर सकता है।

संबंधित मुद्दे