2011-10-10 4 views
6
W/PackageManager(61): Not granting permission android.permission.SET_ACTIVITY_WATCHER to package 

यह अनुमति का ऐसा एक उदाहरण है जो प्लेटफ़ॉर्म हस्ताक्षर का उपयोग करके हस्ताक्षरित किए बिना एप्लिकेशन को नहीं दिया जाएगा। इसके साथ में कहा गया है कि मैं जानना चाहता हूं कि रूट डिवाइस पर किसी भी एप्लिकेशन को कैसे चल रहा है (/ system/bin/su और superUser.apk) को इनमें से कोई भी अनुमति दी जा सकती है।रूट के माध्यम से एंड्रॉइड सिस्टम अनुमतियां

Process p = Runtime.getRuntime().exec("su"); 
p.waitFor(); 

ऐसा करने से "स्वीकार" या के साथ सुपर उपयोगकर्ता संवाद संकेत देता है "अस्वीकार," लेकिन SecurityException रों अभी भी फेंक दिया जाता है।

उत्तर

2

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="[your package name]" 
     android:sharedUserId="android.uid.system"> 

अधिक जानकारी में इस प्रकार यहां पाया जा सकता के रूप में आप sharedUserId स्थापना करके एक प्रणाली एप्लिकेशन के रूप में चलाने के लिए अपने अनुप्रयोग की घोषणा कर सकते हैं: How to sign Android app with system signature?

+2

क्या मैं इस एप्लिकेशन को संकलित कर सकता हूं और इसे किसी भी रूट डिवाइस पर चला सकता हूं और इसे एंड्रॉइड मार्केट पर सुरक्षित रूप से वितरित कर सकता हूं? मैं एक कस्टम रोम नहीं बना रहा हूं, सिर्फ जड़ वाले उपकरणों के लिए एक ऐप। – Tom

+0

नहीं। आप Android Market पर सिस्टम स्तर की पहुंच के साथ ऐप्स वितरित नहीं कर सकते हैं। – spatulamania

+1

तब वह नहीं है जिसे मैं ढूंढ रहा हूं। मैं जड़ वाले डिवाइस पर ऐसी अनुमतियां प्राप्त करने का कोई तरीका ढूंढ रहा हूं, जो मेरा स्वयं का फर्मवेयर नहीं चला रहा है। जहां तक ​​वितरण हो जाता है, SetCPU या स्क्रीनशॉट ऐप्स की संख्या देखें, वे बिना किसी समस्या के ऐसी अनुमतियों का उपयोग करते हैं। – Tom

1

आप अपनी कॉपी करने की जरूरत है एपीके फ़ाइल '/ system/apps' पर। यह प्रोग्रामिक रूप से किया जा सकता है। आप केवल तभी ऐसा कर सकते हैं जब आपके पास रूट अनुमतियां हों। एक बार कॉपी हो जाने पर, डिवाइस को रीबूट करें (यदि आपके पास रूट है तो रीबूट प्रोग्रामेटिक रूप से भी किया जा सकता है) और आपको अपनी मेनिफेस्ट फ़ाइल में उल्लिखित सभी अनुमतियां दी जाएंगी। आप इसे बाजार पर भी वितरित कर सकते हैं।

+1

हाँ, मेरे पास यह विचार था लेकिन अभी भी कुछ अनुमतियां हैं जिन्हें केवल प्लेटफ़ॉर्म हस्ताक्षर के साथ हस्ताक्षरित एप्लिकेशन को दिया जाता है। अपने ऐप को/system/ऐप में रखना आपको उनमें से कुछ देता है, लेकिन सभी नहीं। इसे रीबूट की भी आवश्यकता होती है, जो कि अजीब तरह का है, और इसका मतलब है कि आप ऐप को रूट एक्सप्लोरर जैसे ऐप के बिना अनइंस्टॉल नहीं किया जा सकता है। – Tom

+1

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

+0

मुझे यकीन है कि यह अच्छी तरह से किया जा सकता है, लेकिन रीबूट और आसानी से अनइंस्टॉल करने में असमर्थता मेरे लिए बहुत अधिक है। शुरुआत करने वालों के लिए, क्या आपको अपनी सभी साझा प्राथमिकताओं फ़ाइलों, कैश आदि पर प्रतिलिपि बनाना होगा? वह, और मैं अभी भी थके हुए हूं कि STATUS_BAR_SERVICE जैसे Manifest.permission में अनुमति नहीं दी जाएगी क्योंकि उन्हें हस्ताक्षर-स्तर के रूप में नामित नहीं किया गया है, सिस्टम-स्तर। – Tom