2012-09-27 17 views
6

क्या रूट अनुमति के बिना एंड्रॉइड सिस्टम ऐप चलाने का कोई तरीका है? मैं इस तरह के रूप एडीबी के माध्यम से सिस्टम एप्लिकेशन पर अमल कर सकते हैं:रूट अनुमति के बिना एंड्रॉइड सिस्टम ऐप कैसे चलाएं?

adb shell /system/bin/screencap -p /sdcard/screen.png

मेरे अपने आवेदन में, मैं बिना "सु" कमांड ऐसे ही एक शेल कमांड चलाने करना चाहते हैं। क्या कोई रास्ता है? एंड्रॉइड सिस्टम ऐप को निष्पादित करने के लिए उपयोगकर्ता ऐप्स को कैसे रोकता है?

उत्तर

7

आप जावा कोड में इस आदेश को चलाने के लिए सक्षम होना चाहिए:

Runtime.getRuntime().exec("screencap -p /sdcard/screen.png"); 

कुछ खोल आदेशों आप रूट बिना निष्पादित कर सकते हैं कर रहे हैं। तो आपको "सु" चलाने की आवश्यकता नहीं है। मुझे यकीन नहीं है कि क्या आप स्क्रीनकैप निष्पादित कर सकते हैं। निश्चित रूप से आपको अपने ऐप में SD_CARD को लिखने की अनुमति की आवश्यकता है।

android.permission.WRITE_EXTERNAL_STORAGE 

लेकिन आप अपने स्क्रीनशॉट बनाने के लिए एंड्रॉइड एपीआई का उपयोग क्यों नहीं करते? अधिक जानकारी के लिए इस पोस्ट को स्टैक ओवरफ्लो पर पढ़ें: How to programmatically take a screenshot in Android?

लिनक्स की तरह उपयोगकर्ता आईडी पर एंड्रॉइड सुरक्षा मॉडल आधार। प्रत्येक ऐप को अपना यूज़र आईडी मिल जाता है। तो आपके ऐप में 1001 की तरह उपयोगकर्ता आईडी है। यदि आपके उपयोगकर्ता को कमांड चलाने की अनुमति है, तो अन्यथा आपको एक त्रुटि प्राप्त होगी।

संपादित करें:
आप रूट की जरूरत स्क्रीनशॉट लेने या एक प्रणाली आवेदन किया जाना है। READ_FRAME_BUFFER की अनुमति है लेकिन जब आप सिस्टम एप्लिकेशन होते हैं तो आप केवल इसे प्राप्त कर सकते हैं। यह एक सुरक्षा समस्या है जब कोई ऐप आपके डिवाइस के स्क्रीनशॉट ले सकता है।

मुझे यह API http://code.google.com/p/android-screenshot-library/ मिला है जो रूट के बिना स्क्रीनशॉट लेने का वादा करता है। मैंने इसका परीक्षण नहीं किया। पुस्तकालय एक मूल सेवा शुरू करता है जो तब आपके लिए स्क्रीनशॉट लेता है। लेकिन जब भी आपका फोन बूट होता है तो आपको सेवा को चलाने की ज़रूरत होती है। तो यह सिस्टम विशेषाधिकार प्राप्त करता है। यही कारण है कि निष्कर्ष वास्तव में आरामदायक नहीं है ...

: कोड से जड़ के बिना स्क्रीनशॉट लेने के लिए कोई अच्छा तरीका नहीं है ...

+0

AFAIK, स्क्रीनशॉट कैप्चर करने के लिए कोई एपीआई नहीं। तो, मैं खोल कमांड के माध्यम से स्क्रीन कैप निष्पादित करने का प्रयास करता हूं। लेकिन मैं रूट अनुमति के बिना इसे निष्पादित नहीं कर सकता। –

+0

ऐसा लगता है। कोई एपीआई नहीं है और आपको स्क्रीन कैप चलाने के लिए रूट की आवश्यकता है। मुझे यह लाइब्रेरी मिली है http://code.google.com/p/android-screenshot-library/ इसके साथ आप रूट के बिना स्क्रीनशॉट लेने में सक्षम होना चाहिए। यह एक मूल सेवा स्थापित करता है, जिसे एडब शैल के माध्यम से बूट पर शुरू किया जाता है। तो यह स्क्रीनशॉट लेने में सक्षम है। – mcia

+0

मैंने पहले इसे आजमाया है। यह एंड्रॉइड 3.x और एंड्रॉइड 4.x पर काम नहीं करता है क्योंकि फ्रेमबफर वहां टूटा हुआ था। स्वीकार्य तरीका यह है कि शेल कमांड के माध्यम से कॉल स्क्रीनकैप (रूट परमिसन के तहत) –

2

Is there any way to run android system app without root permission?

यह नहीं होना जरूरी है, लेकिन कुछ समय, कुछ कार्य करता है जो सार्वजनिक उपयोग के लिए अभी भी का उपयोग किया जा सकता है। मैंने जावा प्रतिबिंब का उपयोग करके उदाहरण देखे हैं।

I can execute system app via adb such as: ...

In my own application, I wanna run a shell command like that without "su" command. Is there any way? How does android prevent user apps to execute system app?

मुझे लगता है, नहीं।

बात adb शेल और उपयोगकर्ता के आधार पर अलग-अलग सुरक्षा स्तर और समूह आईडी (यूआईडी और GID) है उपयोगकर्ता एप्लिकेशन है।

और जानकारी: http://android-dls.com/wiki/index.php?title=Android_UIDs_and_GIDs

के अलावा, वहाँ की गई अनुमतियों को और hiden & आंतरिक कक्षाएं, प्रक्रियाओं, आदि जो आंतरिक उपयोग के लिए बनाया के माध्यम से सीमाएं हैं।

पीएस .: स्क्रीनशॉट के बारे में। एंड्रॉइड मार्केट (गूगल प्ले) पर कुछ ऐप हैं जो रूट एक्सेस के बिना स्क्रीनशॉट प्रदान करते हैं।तो, यह संभव है। हालांकि, एंड्रॉइड 4.0 स्क्रीनशॉट "बॉक्स से" उपलब्ध हैं।

+0

विस्तार से देखभाल करने के लिए कौन से ऐप्स यह कर सकते हैं? हम उन्हें विघटित कर सकते हैं और यह पता लगा सकते हैं कि यह कैसे काम करता है। –

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