2012-05-21 18 views
7

मैं अपने जावा कोड से सिस्टम ऐप इंस्टॉल करने की कोशिश कर रहा हूं, और अब तक, मुझे कोई सफलता नहीं मिली है।

के बाद मैं अब तक क्या किया है है:एंड्रॉइड: प्रोग्रामेटिक रूप से एपीके/सिस्टम/ऐप को कॉपी करना

  1. मेरा डिवाइस निहित है।
  2. मेरा "इंस्टॉलर" ऐप सिस्टम ऐप के रूप में स्थापित है। (इसे मैन्युअल रूप से/system/app में कॉपी किया गया)
  3. मैंने प्लेटफ़ॉर्म कुंजी के साथ इंस्टॉलर एपीके पर हस्ताक्षर किए हैं, और मेरे पास मैनिफेस्ट में android:sharedUserId="android.uid.system" है।
  4. मैं Runtime.getRuntime.exec("su") के लिए कोशिश कर रहा हूं (और कोशिश कर रहा हूं, और फिर कुछ और)। मैं सिस्टम विभाजन को rw के रूप में माउंट करना चाहता हूं, एपीके के लिए cat करें, और फिर सिस्टम विभाजन ro बनाएं। निम्नलिखित आदेशों की सूची निम्नलिखित है:

    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br> 
    cat /sdcard/application.apk > /system/app/application.apk<br> 
    mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system<br><br>The application.apk here is the app being installed from the installer app. This app is also signed with platform key, and has the sharedUserId configured. 
    
  5. मैंने मैनिफेस्ट में INSTALL_PACKAGES अनुमति के लिए अनुरोध किया है।

मैंने निष्पादन ("") प्रारूप में कई बदलावों की कोशिश की है, जिसमें प्रत्येक आदेश के साथ 'su -c' का उपयोग करना शामिल है। मुझे टूटा हुआ पाइप अपवाद और सुरक्षा अपवाद मिला है। कभी-कभी, मुझे अपवाद नहीं मिलता है, लेकिन फ़ाइल की प्रतिलिपि नहीं बनाई जाती है।


कृपया मुझे बताएं कि मैं यहां क्या खो रहा हूं। क्या किसी ने यह काम किया है?

धन्यवाद!

+0

संबंधित नोट पर, प्लेटफ़ॉर्म कुंजी के साथ हस्ताक्षरित ऐप और sharedUserId = system के बीच क्या अंतर है; और एक ऐप/सिस्टम/एप में मौजूद है? – Chaitanya

+0

/सिस्टम/ऐप में अनुप्रयोगों के पास अनुमति स्तर 2 तक पहुंच है (जहां तक ​​मुझे पता है 1)। अनुमतियों के बावजूद * अनुमोदित *, सिस्टम के एक साझा यूज़र आईडी के साथ अनुप्रयोग "पैरेंट" एप्लिकेशन को दी गई अनुमतियों का उत्तराधिकारी प्राप्त करते हैं, और इसके अतिरिक्त उसी प्रोसेस आईडी में "पैरेंट" के रूप में चलाया जाता है। विभिन्न एपीआई ऐप की प्रोसेस आईडी की जांच करते हैं, और यदि वे एक विशिष्ट प्रकार के नहीं हैं तो उन्हें एक्सेस से इनकार कर दें। यद्यपि 2 अधिकतर कसकर जुड़े हुए हैं, लेकिन वे हमेशा हाथ में नहीं जाते हैं।यह वर्णन करने का गैर-तकनीकी तरीका है, मुझे यकीन है कि अन्य लोग बेहतर काम करेंगे ... – slinden77

उत्तर

4

मैं खुदाई पर रखा, और यहाँ परिणाम हैं:

  • एंड्रॉयड su.c में यह चेक दिया गया है: [ "एंड्रॉयड स्रोत की जड़" /system/extras/su/su.c]
/* Until we have something better, only root and the shell can use su.*/ 
myuid = getuid(); 
if (myuid != AID_ROOT && myuid != AID_SHELL) { 
    fprintf(stderr,"su: uid %d not allowed to su\n", myuid); 
    return 1; 
} 

ChainsDD (सुपर उपयोगकर्ता) और विषैली गैस मॉड अपने स्वयं के su.c को लागू करने से इस के आसपास मिलता है: https://github.com/CyanogenMod/android_system_su/blob/master/su.c

  • /system/app के बारे में विशेष क्या है? ऐसा लगता है कि यह तथ्य यह है कि विभाजन केवल गैर-जड़ वाले उपकरणों पर पढ़ा जाता है, जो वहां रखे गए अनुप्रयोगों के संशोधन/अनइंस्टॉल को रोकता है। https://android.stackexchange.com/questions/17871/what-are-the-differences-between-a-system-app-and-user-app

  • कोई एप्लिकेशन मंच कुंजी से हस्ताक्षरित और sharedUserId = system के साथ अपने उद्देश्यों के लिए 'काफी अच्छा' है, मैं विशेष रूप से करने के लिए/system/app इसे कॉपी की जरूरत नहीं है।

मैं इसे अभी उत्तर के रूप में स्वीकार कर रहा हूं।

+0

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

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