2012-03-15 10 views
5

मैं अपने आवेदन में एक प्रकार का vnc (oNaiPs के droid-vnc-server के आधार पर) को लागू करने का प्रयास कर रहा हूं। चूंकि माउस इवेंट्स मेरे डिवाइस के साथ काम नहीं करते हैं, इसलिए मैं निम्न कोशिश कर रहा हूं: देशी वीएनसी फ्रेमबफर सर्वर से डेटाग्राम भेजें, उन्हें Service में पकड़ें और Instrumentation के sendPointerSync का उपयोग करें। और यह वह जगह है जहां अनुमति की आवश्यकता है। मैंने सुना है कि यदि आप रूट एक्सप्लोरर, chmod और रीसेट के साथ .apk को /system/app पर धक्का देते हैं तो आप सभी आवश्यक अनुमतियां प्राप्त कर सकते हैं, लेकिन यह मेरे मामले में काम नहीं करता है, और मुझे अभी भी SecurityException मिलता है। मैंने /data/system/packages.xml फ़ाइल को मैन्युअल रूप से संपादित करने का भी प्रयास किया है।रूट डिवाइस पर INJECT_EVENTS अनुमति

क्या अनुमति प्राप्त करने का कोई और तरीका है (शायद यह किसी भी तरह के सुरक्षा स्तर को कम कर सकता है? चूंकि मुझे केवल इस ऐप को मेरे डिवाइस पर काम करने की ज़रूरत है), या संभवतः मैं जो करने की कोशिश करता हूं उसे करने का एक अलग तरीका है?

धन्यवाद!

उत्तर

0

क्या आपने अपने मैनिफेस्ट में INJECT_EVENTS उपयोग-अनुमति जोड़ दी है।

+1

बेशक। मैंने सिस्टम/ऐप और रीसेट करने के बाद, स्टार्टअप पर अभी भी मुझे अनुमति अस्वीकार कर दिया है: ' डब्ल्यू/पैकेज मैनेजर (115): com.vnc.test पैकेज करने के लिए android.permission.INJECT_EVENTS अनुमति नहीं दे रहा है (protectionLevel = 2 झंडे = 0xbe47) ' – alchemiss

+2

यह अनुमति नियमित प्रकार नहीं है इसलिए इसे मैनिफेस्ट में जोड़ने से थोड़ा प्रभाव पड़ता है। काम करने की इस अनुमति के लिए, एपीके को सिस्टम प्रमाणपत्र के साथ हस्ताक्षर किया जाना चाहिए। नियमित डेवलपर्स के लिए नहीं, केवल प्लेटफार्म निर्माताओं के लिए। – radhoo

2

तो, गुगलिंग और शोध के कुछ दिनों के बाद, मुझे ऐसा करने का कोई तरीका नहीं मिला (ठीक है, सिस्टम हस्ताक्षर प्राप्त करने के लिए एंड्रॉइड का अपना संस्करण बनाने जैसी स्पष्ट रूप से असंभव चीजों को छोड़कर), और एक प्रकार का वर्कअराउंड: वीएनसी सर्वर (droid-vnc-server v.0.72 से लिया गया) एक सॉकेट खोलता है और इसमें सभी पॉइंटर ईवेंट लिखता है (प्रकार और निर्देशांक); तो एक ऐसी सेवा है जो इस सॉकेट से पढ़ती है और कई sendevent कमांड के माध्यम से ईवेंट इंजेक्ट करती है (मैं शायद इसे देशी कोड से भी कर सकता हूं, लेकिन जब से मैं सी ++ पर चूसता हूं, तो मैंने परेशान न करने का फैसला किया :))।

यह ठीक काम करता है (आश्चर्यजनक रूप से!), लेकिन मैं पूरी तरह से संतुष्ट नहीं हूं, क्योंकि विभिन्न उपकरणों पर विभिन्न स्थिरांक (जैसे, घटनाओं के प्रकार, न्यूनतम और अधिकतम मूल्य इत्यादि) हैं, और मुझे करना होगा या तो उन्हें getevent -p से पार्स करें, या कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट करें।

3

तो शायद आपने पर्याप्त खोज नहीं की थी। हां यह एक दयालु बात है कि एंड्रॉइड इसे डिफ़ॉल्ट रूप से पेश नहीं करता है, लेकिन इसका मतलब यह नहीं है कि यह करने योग्य नहीं है।

एकमात्र पकड़ आपको रूट की आवश्यकता होगी। तो यदि आपके पास रूट है, तो आप लिखने के लिए/dev/input/eventX फ़ाइलों की अनुमति को बदल सकते हैं।

यदि फ़ाइलें लिखने योग्य हैं तो आप इनपुट ईवेंट नोड्स को सीधे लिखकर किसी भी एप्लिकेशन को कस्टम कुंजी इंजेक्ट कर सकते हैं और ईवेंट स्पर्श कर सकते हैं।

मैं एक छोटा सा पुस्तकालय, यहाँ खुला स्रोत के रूप में उपलब्ध लिखा है: http://code.google.com/p/android-event-injector/

यह करता है सिर्फ इतना है कि: इनपुट devs पर अनुमतियों को सेट करने के लिए स्वत: chmod, और देशी फ़ाइलों इंटरफेस करने JNI का उपयोग करता है। फिर यह आपके एंड्रॉइड प्रोजेक्ट में उपयोग करने के लिए एक साधारण जावा इंटरफेस का खुलासा करता है।

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