2012-02-15 6 views
13

में संरक्षित एंड्रॉइड आईडी, एंड्रॉइड स्रोत कोड में किसी भी समय बिताए गए उपयोग के लिए, यह खबर नहीं है कि android.R कक्षा में उत्पन्न आईडी 1: 1 में पाए गए वास्तविक संसाधनों को प्रतिबिंबित नहीं करती है आपूर्ति किए गए जार की res/ निर्देशिकाएं। android.R.xxx का संदर्भ देकर कई ड्रॉबल्स/स्टाइल/लेआउट "सार्वजनिक" नहीं हैं और एप्लिकेशन तक पहुंच योग्य नहीं हैं।आरजेवा

मेरा प्रश्न है कि कोई भी ऐसे तंत्र को जानता है जिसके द्वारा Android वास्तविक संसाधन ग्राफ़ से भिन्न R.java क्लास उत्पन्न करने में सक्षम है? दूसरा, क्या यह एक तंत्र है (निर्माण नियमों का उपयोग करके, आदि) कि हम डेवलपर्स के रूप में पुस्तकालयों के रूप में उपयोग किए जाने वाले अनुप्रयोगों में सार्वजनिक रूप से उन आयतों की आंशिक रूप से रक्षा करने के लिए लाभ उठा सकते हैं?

अग्रिम धन्यवाद!

उत्तर

1

एपेट का उपयोग कर एंड्रॉइड पैकेज संसाधन, और निर्माण प्रक्रिया के दौरान इस उपकरण का उपयोग कर आर फ़ाइल उत्पन्न करता है। इस चरण में, एक्सएमएल फाइलों को बाइनरी में संकलित किया जाता है और अन्य संसाधनों को बस पैक किया जाता है। आप एक ज़िप संग्रह के रूप में एक .apk फ़ाइल खोल सकते हैं और सभी संसाधन फ़ाइलों तक पहुंच सकते हैं। लाइब्रेरी प्रोजेक्ट्स में केवल स्रोत फ़ाइलों और संसाधन होते हैं जिन्हें संकलित समय पर प्रोजेक्ट में जोड़ा जाता है, इसलिए वे किसी भी तरह से .apk फ़ाइल में मौजूद होंगे। शायद लेआउट 1: 1 नहीं हैं क्योंकि एक्सएमएल पहले ही लाइब्रेरी प्रोजेक्ट के लिए संकलित है। संभवतः एक तरीका है कि आप लाइब्रेरी प्रोजेक्ट से फ़ाइलों को बिल्ड समय में शामिल करने से हटाने के लिए एपेट का उपयोग कर सकते हैं, लेकिन फिर वे आपके प्रोजेक्ट में पहुंच योग्य नहीं होंगे। एपेट और चींटी का उपयोग करके संकलन समय पर आपके संसाधन नामों को खराब करने का एक तरीका भी हो सकता है, लेकिन फिर उन्हें उन तक पहुंचने में सक्षम होने से नहीं रोकता है।

मुझे यकीन नहीं है कि आप वास्तविक संसाधन ग्राफ से अलग आरजेजा वर्ग क्यों चाहते हैं। या तो उन संसाधनों को निर्माण समय पर शामिल न करें या वे एपीके में होंगे। आपके लेआउट आउटपुट में बाइनरी फाइलों के रूप में संपीड़ित होते हैं, इसलिए मुझे यकीन नहीं है कि वे किसी अन्य प्रोजेक्ट में डिकंपाइल या पुन: उपयोग करना कितना आसान हैं।

यहां अंतराल क्या है? यदि यह आपके संसाधनों की रक्षा करना है, तो यह कठिन होगा। अगर किसी के पास अपने फोन को रूट करने की क्षमता है तो एंड्रॉइड बेहद असुरक्षित है। यदि आप अपने आईपी की रक्षा करना चाहते हैं, जो मैं मान रहा हूं वह अंतराल है, तो मैं अपनी परियोजना को एक एपीके में संकलित और संकलित करता हूं और देखता हूं कि क्या मैं एपीके से महत्वपूर्ण संसाधनों को विघटित या निकाल सकता हूं। हो सकता है कि कुछ obfuscation कोशिश करें, लेकिन फिर, मैं संकलित एक्सएमएल फाइलों के बारे में पर्याप्त नहीं जानता कि वे आसानी से अपरिवर्तित नहीं होने के लिए पर्याप्त obfuscated हो।

अगर कोई गलत है तो कोई मुझे सही करने के लिए स्वतंत्र महसूस करता है, लेकिन यह सिर्फ 2 सेंट है।

+0

प्रश्न का प्राथमिक लक्ष्य यह जानने के लिए है कि कैसे एंड्रॉइड रॉम आर.जावा का निर्माण संसाधनों को बाहर करने में सक्षम है। आपके पास दो चरणों में संकलित होने वाले लेआउट के बारे में एक दिलचस्प बिंदु है, हालांकि यह तर्क उन ड्रॉबल्स के लिए काम नहीं करेगा जो बाहर हैं, इसलिए खेल में एक और तरीका होना चाहिए। दूसरे प्रश्न के संबंध में, सुरक्षा ऐसी चिंता नहीं है जितनी कि अंतिम आरजेजा फ़ाइल में लाइब्रेरी प्रोजेक्ट्स के साथ होने वाले प्रदूषण को साफ करने के रूप में सभी आईड्स मुख्य पैकेज में एक 'आर' कक्षा संदर्भ में संयोजन करते हैं , अक्सर ओवरलैप करने के लिए अग्रणी। – Devunwired

+0

@Devunwired क्या आप प्रोगार्ड या ऑब्फिशिश टूल का उपयोग कर रहे हैं? जब मैं अपनी एपीके फाइलों को देखता हूं तो मेरे सभी ड्रॉबल्स (जैसे .png छवियां) बस अपने संबंधित स्थान में res फ़ोल्डर में स्थित होते हैं। दोबारा, जैसा कि मैंने कहा, आरजेवा फ़ाइल संकलन चरण के एपेट चरण के दौरान बनाई गई है, इसलिए यदि आप जो कुछ भी चाहते हैं, वह संभव है, तो वह उस चरण से पहले या उसके दौरान होगा। – onit

+0

यह बिल्कुल मेरा मुद्दा है, लेकिन अपने स्वयं के ऐप के बजाय android.jar के साथ वह अभ्यास करें। आप देखेंगे कि 'res/'निर्देशिका में आपके कोड में' android.R.drawable.xxx' को कॉल करके संदर्भित करने में सक्षम होने की तुलना में बहुत अधिक ड्रॉबल्स हैं। – Devunwired