मैंने ऐप में ऐप बिलिंग में लागू किया है, और अब मैं इसे और अधिक सुरक्षित करना चाहता हूं। पढ़ना डेवलपर सामग्री यह कहता है:इनएप बिलिंग सुरक्षा और दूरस्थ विधि आमंत्रण
एक कहानियो कार्यक्रम चलाने के अलावा, हमारी सलाह है कि आप अपने एप्लिकेशन के तहत बिलिंग कोड अंधेरा करना निम्न तकनीक का उपयोग करें।
अन्य विधियों में इनलाइन विधियों।
उन्हें स्थिरांक के रूप में परिभाषित करने के बजाय फ्लाई पर स्ट्रिंग का निर्माण करें।
कॉल विधियों के लिए जावा प्रतिबिंब का उपयोग करें।
http://developer.android.com/guide/market/billing/billing_best_practices.html
कहानियो - ठीक मैं ऐसा कर सकते हैं = ProGuard
अन्य तरीकों मेंइनलाइन तरीकों - यह एक बार कह रहा है मेरी कोड पूरा, मैं के रूप में ज्यादा OO से छुटकारा पाने के है क्या मैं अपने सभी कोड को कई पंक्तियों में डाल सकता हूं क्योंकि मैं (मेरे ऐप के बिलिंग हिस्से के लिए) एक विधि में कर सकता हूं? क्या इसमें कक्षाओं को रेखांकित करना शामिल है? एंड्रॉइड उदाहरण में उनके पास एक स्थिरांक वर्ग है, क्या मैं इन सभी को इनलाइन कर दूंगा?
मक्खी परनिर्माण तार - हाँ तो लाइन में सभी वर्ग लगातार चर के लिए कदम - ठीक ProGuard इस
उपयोग जावा प्रतिबिंब को शामिल करना चाहिए - यह मेरा मुख्य सवाल है। क्या मुझे सभी बुलाए जाने के बजाय मेरे तरीकों का आह्वान करना चाहिए?
अपने आप को कुछ प्रयास को बचाने के लिए मैं कर सकता यह:
private static Object invokeMethod(String name, Class<?>[] params, Object[] args){
try {
return MySpecificClass.class.getMethod(name, params).invoke(null, args);
} catch (IllegalArgumentException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (SecurityException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (IllegalAccessException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (InvocationTargetException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (NoSuchMethodException e) {
// Should never happen in my code, ignore and cancel in app charge
}
return null;
}
मैं तो इस तरह की बातें कर सकता है:
private static boolean someMethod() {
return true; // just an example
}
params = new Class<?>[0];
if ((Boolean) invokeMethod("someMethod", params, null)) {
// Do something
}
इस अच्छा सुरक्षा है, या यह सिर्फ कोड ब्लोट और मेरी बना रही है असली उपयोगकर्ता मुद्दों के लिए ऐप undebuggable?
धन्यवाद।
मैं "इनलाइन विधियों" और "प्रतिबिंब का उपयोग" बिंदुओं के बारे में भी सोच रहा था। यह सब एक विशाल दर्द की तरह लगता है। मुझे लगता है कि अपनी विधियों को विशाल-सुपर-विधियों में बदलना थोड़ा सा मदद कर सकता है, espuscating नामों के बाद esp। लेकिन हर जगह प्रतिबिंब का उपयोग करने के लिए ... (अगली टिप्पणी में जारी) –
.. लेकिन प्रतिबिंब का उपयोग करने के लिए हर जगह मेरा सिर विस्फोट कर देगा। प्रतिबिंब के लिए आपका दृष्टिकोण दिलचस्प है, लेकिन मुझे यकीन नहीं है कि यह उन तरीकों के लिए जिम्मेदार है जो अन्य अपवादों को फेंकते हैं (आपने सभी को पकड़ नहीं लिया: 'पकड़ो (अपवाद सबकुछ) ')। मुझे लगता है कि आप इसे फिर से हटा सकते हैं और इसे कहां कहलाते हैं इसे संभालें। ** लेकिन ** आपको 'प्रोगुर्ड' के लिए भी खाता लेना होगा। चूंकि आप नामों को खराब कर देंगे, जो आपके प्रतिबिंब को तोड़ देगा, इसलिए आपको प्रोजेवार्ड कॉन्फ़िगरेशन फ़ाइलों को '-keep' नियम' जोड़ना होगा। तो शायद वे विधियां थोड़ा कम सुरक्षित होंगी क्योंकि उनके पास शायद सार्थक नाम होंगे। –
हे प्रोजेगार्ड आपके तारों को छिपाता नहीं है। रनटाइम पर निर्माण करने के लिए स्ट्रिंग कॉन्सटेनेशन का मतलब नहीं है। यह आमतौर पर उन्हें बाइट्स या एन्कोडेड मानों और रनटाइम –