2010-10-21 15 views
5

मैं एक ऐप की योजना बना रहा हूं जहां मुझे सिस्टम फ़ाइल को संपादित करने की आवश्यकता है।फ़ाइल संपादित करने के लिए सुपरसियर अधिकारों का अनुरोध करें

मैं केवल उस फ़ाइल को रूट अधिकारों के साथ संपादित कर सकता हूं। मेरे पास superuser.apk स्थापित एक रूट देव फोन है। रूट के लिए आवश्यक अन्य ऐप्स पहली शुरुआत पर रूट पहुंच का अनुरोध करते हैं। मैं वही करना चाहता हूं लेकिन मुझे अपने ऐप के सुपरसियर अधिकारों का अनुरोध करने के बारे में कोई संकेत नहीं मिल रहा है।

मुझे एक इरादा android.intent.action.superuser के बारे में कुछ मिला लेकिन जब मैं उस इरादे की कार्रवाई के लिए एक गतिविधि लॉन्च करने का प्रयास करता हूं तो मुझे ActivityNotFoundException मिलता है।

कोई विचार?

उत्तर

2

इरादा वास्तव में आपको सुपरसियर अधिकार नहीं मिलता है, यह सिर्फ सुपरसुर ऐप की अनुमति देने की अनुमति के साथ बातचीत करता है।

असली कुंजी यह समझना है कि एंड्रॉइड के अंतर्निहित लिनक्स उपयोगकर्ता के विशेषाधिकारों की वृद्धि का समर्थन नहीं करता है। इसके बजाए, यह सुपरसियर के रूप में _some_other_process_ को चलाने का अनुरोध करने के लिए उपयोगकर्ता के लिए एक तंत्र का समर्थन करने के लिए (/ समर्थन में संशोधित किया गया है) का समर्थन करता है।

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

सुपरसियर के रूप में करने की कोशिश करने वाले किसी भी चीज़ में बहुत सी विचार रखें ... गड़बड़ करना या पीछे की समस्याएं छोड़ना आसान है। यदि आप ऐप को दूसरों को तैनात कर रहे हैं, तो सुरक्षा के छेद के बारे में भी सोचें जो आप बनाएंगे।

+0

धन्यवाद। मैं वर्तमान में उस "बिल्ली" कमांड के साथ एक फाइल पढ़ने की कोशिश कर रहा हूं। "su -c 'बिल्ली '" एडीबी शैल के भीतर से ठीक काम करता है। दुर्भाग्यवश वही आदेश मेरे ऐप के अंदर से चलाए जाने पर कुछ भी वापस नहीं करता है (Runtime.getRuntime()। exec ("su -c 'cat '");)। – Goddchen

+0

आपको इस बारे में थोड़ा सोचना चाहिए कि आपको क्या करना चाहिए - यह 'कुछ भी वापस' उपयोगी नहीं होगा। यदि आप इसे लॉन्च करते हैं तो स्टडआउट को हुक करते हैं तो आपको कुछ मिल सकता है (टर्मिनल ऐप का स्रोत देखें)। सादगी के लिए su के बिना एक अप्रतिबंधित केस का परीक्षण करें, या stdout या stdin के आधार पर फ़ाइल-टू-फ़ाइल का उपयोग करें। –

+0

अब यह काम कर रहा है: मुझे खोल खोलने के लिए निष्पादित करना था ("su sh")। फिर डेटाआउटपुट स्ट्रीम बनाएं और उस शेल को कमांड लिखें। – Goddchen

0

शायद क्योंकि आपको "android.intent.action.superuser" चुनना चाहिए? मुझे लगता है कि यह समस्या हो सकती है। इस पर स्रोत मिला: http://forum.xda-developers.com/showpost.php?p=2954887&postcount=7

+0

टाइपो के लिए खेद है, निश्चित रूप से मेरा मतलब android.intent.action.superuser था। और यह वही उदाहरण है जिसका मैं संदर्भ दे रहा हूं। – Goddchen

+0

मुझे लगता है कि आपको एक अलग सुपरसुर ऐप इंस्टॉल करना होगा - शायद थ्रेड की शुरुआत में समझाया गया है: http://forum.xda-developers.com/showthread.php?p=2954887 – mreichelt

+0

मुझे अभी पता चला कि Runtime.getRuntime()। exec ("su"); सुपरसुर सही संवाद बुलाता है। लेकिन मैं इस तरह एक फाइल कैसे पढ़ और लिख सकता हूं? संकेत के लिए – Goddchen

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

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