2011-07-30 9 views
17

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

public void RunAsRoot{String[] commands = {"sysrw", "rm /data/local/bootanimation.zip", "sysro"};{ 
    Process p = Runtime.getRuntime().exec("su"); 
    DataOutputStream os = new DataOutputStream(p.getOutputStream());    
    for (String tmpCmd : commands) { 
    os.writeBytes(tmpCmd+"\n"); 
    }   
    os.writeBytes("exit\n"); 
    os.flush(); 
} 

के लिए एप्लिकेशन को अभी भी मिल गया है लेकिन मेरे logcat केवल पता चलता उनमें से दो को अस्वीकार कर दिया हो रही है नहीं

07-30 03:14:11.112: WARN/su(3593): request rejected (10047->0 /system/bin/sh) 
07-30 03:14:11.132: DEBUG/su(3592): 10047 com.bba.stormdroid executing 0 /system/bin/sh using shell /system/bin/sh : sh 
07-30 03:14:11.152: WARN/su(3594): request rejected (0->0 /system/bin/sh) 
07-30 03:14:11.182: WARN/su(3595): request rejected (0->0 /system/bin/sh) 
07-30 03:14:11.202: WARN/su(3596): request rejected (0->0 /system/bin/sh) 
07-30 03:14:11.242: DEBUG/su(3597): 10047 com.bba.stormdroid executing 0 /system/bin/sh using shell /system/bin/sh : sh 

उन दो नज़र sysrw और sysro आदेशों होने के लिए, फिर भी है जब मैं इस कोड को ट्रिगर करता हूं तो रूट अनुमति मांगता है। मैं रूट सामान के साथ काम करने के लिए नया हूं और मुझे लगता है कि यह काम करने के लिए कैसे प्राप्त किया जा सकता है।

public void RunAsRoot(String[] cmds){ 
      Process p = Runtime.getRuntime().exec("su"); 
      DataOutputStream os = new DataOutputStream(p.getOutputStream());    
      for (String tmpCmd : cmds) { 
        os.writeBytes(tmpCmd+"\n"); 
      }   
      os.writeBytes("exit\n"); 
      os.flush(); 
} 

जहां तार की एक सरणी में पारित, प्रत्येक स्ट्रिंग एक आदेश की जरूरत है कि जा रहा है निष्पादित किया जाना है:

+0

क्या मुझे इस नमूने की एक कार्यप्रणाली मिल सकती है? –

+0

यह मेरे लिए काम नहीं कर रहा है और मुझे जावा में कोई फ़ाइल नॉटफाउंड अपवाद या कुछ भी नहीं मिल रहा है। इसके अलावा, सुपरएसयू रूट अनुरोध को रोकता है और मैं इसे प्रदान करने में सक्षम हूं इसलिए मुझे पता है कि 'getRuntime() 'काम कर रहा है। किसी कारण से यह मुझे '/ system/media' फ़ोल्डर में फ़ाइलों में हेरफेर करने नहीं देगा। – anon58192932

+0

आह ऐसा लगता है जैसे sysrw और sysro अज्ञात कमेंट हैं। – anon58192932

उत्तर

27

जड़ आदेशों को चलाने के लिए, आपको flllowing प्रारूप का उपयोग करने के लिए है। उदाहरण के लिए:

String[] commands = {"sysrw", "rm /data/local/bootanimation.zip", "sysro"}; 
+0

जब मैं इसे अपने ऑनक्लिक में डालता हूं, तो यह कहता है कि() के आसपास (स्ट्रिंग [] सेमीडीएस) होना चाहिए; जो, जब मैं ऐसा करता हूं तो अधिक त्रुटियों को जोड़ता है। – Ben

+0

मैंने स्ट्रिंग सरणी का एक उदाहरण दिखाने के लिए अपना मूल उत्तर संपादित किया है जिसे – user496854

+0

में पारित करने की आवश्यकता है जब तक कि मैं यह गलत नहीं कर रहा हूं, यह RunAsRoot को हाइलाइट कर रहा है और कह रहा है कि शून्य एक RunAsRoot के लिए एक अवैध प्रकार है। मैंने अपने प्रश्न को कोड के साथ अपडेट किया है जो अब मेरे पास है – Ben

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