1) नहीं, सिस्टम फ़ाइलों तक पहुंचने वाले लोगों के अलावा कोई बाधा नहीं होनी चाहिए और इस प्रकार रूट की आवश्यकता है। कहीं और प्रदूषण से बचने के लिए सबसे अच्छी जगह सीधे/डेटा/डेटा/[your_package_name] होगी।
2) देशी पुस्तकालयों के खिलाफ संकलन के बारे में एक बहुत अच्छी चर्चा यहां पाई जा सकती है: http://www.aton.com/android-native-libraries-for-java-applications/। एक और विकल्प हाथ के लिए एक क्रॉस-कंपाइलर है (यहां कर्नेल को संकलित करने के लिए उपयोग किया जाता है, यह मुफ़्त है: http://www.codesourcery.com/sgpp/lite/arm)। यदि आप अपनी कैमांड निष्पादित करने वाली सेवा को बनाए रखने की योजना बनाते हैं, तो चेतावनी दी जानी चाहिए कि किसी भी समय एंड्रॉइड द्वारा सेवाओं को रोका जा सकता है और पुनरारंभ किया जा सकता है।
3) अब, यदि आपके पास स्रोत कोड नहीं है, तो मुझे उम्मीद है कि आपकी फ़ाइल कम से कम एक हाथ निष्पादन योग्य के रूप में संकलित की जाएगी। यदि नहीं, तो मैं नहीं देखता कि आप इसे कैसे चला सकते हैं।
आप अपने जावा वर्ग में निम्न कमांड चलाकर फ़ाइल निष्पादित करेंगे:
String myExec = "/data/data/APPNAME/FILENAME";
Process process = Runtime.getRuntime().exec(myExec);
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream osRes = new DataInputStream(process.getInputStream());
मैं अपने निष्पादन के बारे में कुछ भी नहीं पता है, तो आप या वास्तव में InputStream और outputStream प्राप्त करने की आवश्यकता नहीं हो सकता है ।
मुझे लगता है कि एडीबी चल बाइनरी फ़ाइल पुश करने के लिए यह सोचते हैं रहा हूँ, इसलिए मैं एक स्वच्छ जिस तरह से यह पैकेज करने के लिए देख रहा था सवाल से बाहर है। मुझे आपके ऐप में निष्पादन योग्य समेत एक शानदार पोस्ट मिली। यहाँ देखें:
एंड्रॉयड जावा एप्लिकेशन से, assets
फ़ोल्डर
पद assets
फ़ोल्डर का उपयोग करता है, कि एंड्रॉयड स्थिर फ़ाइलों के लिए पता चलता है raw
फ़ोल्डर के insted:
युक्ति: यदि आप संकलन समय पर अपने आवेदन में एक स्थिर फ़ाइल को बचाने के लिए चाहते हैं, फ़ाइल को अपने प्रोजेक्ट res/raw/निर्देशिका में सेव करें। आप RRraw को पारित करके, OpenRawResource() के साथ इसे खोल सकते हैं। संसाधन आईडी यह विधि एक इनपुटस्ट्रीम देता है जिसका उपयोग आप फ़ाइल को पढ़ने के लिए कर सकते हैं (लेकिन आप मूल फ़ाइल में नहीं लिख सकते हैं)।
डेटा फ़ोल्डर को एक्सेस करने के लिए आपको यहां दिए गए निर्देशों का पालन कर सकते: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal इसके अलावा, वहाँ है File#setExecutable(boolean);
विधि है कि शेल कमांड के बजाय काम करता है चाहिए।
तो, सब कुछ एक साथ डाल, मैं कोशिश करेंगे:
InputStream ins = context.getResources().openRawResource (R.raw.FILENAME)
byte[] buffer = new byte[ins.available()];
ins.read(buffer);
ins.close();
FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(buffer);
fos.close();
File file = getFileStreamPath (FILENAME);
file.setExecutable(true);
बेशक, यह सब स्थापना के बाद केवल एक बार किया जाना चाहिए। आप onCreate()
के अंदर एक त्वरित जांच कर सकते हैं या फ़ाइल की उपस्थिति के लिए जो कुछ भी जांचता है और फ़ाइल नहीं है, तो यह सभी आदेश निष्पादित करता है।
अगर यह काम करता है तो मुझे बताएं। सौभाग्य!
@Aleadam: आपके उत्तर के लिए धन्यवाद। हाँ, स्रोत कोड एआरएम निष्पादन योग्य के रूप में संकलित किया गया है और मैंने इसे कमांड लाइन से रूट किए गए एंड्रॉइड फोन पर निष्पादित करने का प्रयास किया है और यह काम करता है। मुझे यह निष्पादन योग्य पैकेज करने का एक तरीका है मेरे एंड्रॉइड प्रोजेक्ट के अंदर, इसे आंतरिक फ़ाइल सिस्टम (/ डेटा/डेटा/) पर कॉपी करें और फिर इसे वहां से निष्पादित करें। –
Samuh
कूल, तो मुझे लगता है कि आप अच्छे आकार में हैं। क्या आपको उस निष्पादन योग्य को सभी को चलाने की आवश्यकता है समय या यह सिर्फ एक विशिष्ट, त्वरित नौकरी कर रहा है? – Aleadam
@ सैमुह अद्यतन उत्तर की जांच करें। – Aleadam