2013-06-29 6 views
8

मैं एक एंड्रॉइड देशी कमांडलाइन एप्लिकेशन को एपीके में पैकेज करना चाहता हूं। मेरे पास ndk-build के साथ एप्लिकेशन बिल्डिंग है जो jni/Android.mk का उपयोग करती है। आउटपुट libs/armeabi/<MyApp> में है। मेरे पास चींटी के साथ एपीके इमारत भी है। हालांकि, एपीके कमांडलाइन एप्लिकेशन नहीं लेता प्रतीत होता है। अगर मैं एपीके को अनजिप करता हूं तो ऐप वहां नहीं है।एपीके में देशी कमांडलाइन एप्लिकेशन को कैसे पैकेज करें?

पूर्व-निर्मित कमांडलाइन ऐप को शामिल करने के लिए चींटी प्राप्त करने के लिए मुझे क्या करने की आवश्यकता है?

इसके अलावा, मुझे ऐसा करने की क्या ज़रूरत है ताकि चींटी एनएनडी-बिल्ड चला सके? (यह पहले से ही उत्तर दिया गया था: Android NDK build with ANT script)

उत्तर

10

Android NDK build with ANT script देखें।

यदि आप एंटी का उपयोग कर एपीके में बाइनरी जोड़ सकते हैं तो एंटी libs/armeabi से स्वचालित रूप से इसकी प्रतिलिपि नहीं बनाता है, Documentation for aapt element in Ant script देखें।

मेरा मानना ​​है कि फ़ाइल को निष्पादन योग्य अनुमतियों के साथ /data/data/your.package.full.name/lib पर सही ढंग से निकाला जाएगा। डीबग बिल्ड केवल के लिए बाद -

चींटी निर्माण एक कदम "ApkBuilder" कहा जाता है, जो केवल libs/armeabi कि खाने वाला पैटर्न ^.+\.so$ या gdbserver से फाइल कहते हैं शामिल है।

लेकिन यह के लिए निष्पादन योग्य नाम बदलने के लिए पर्याप्त नहीं है "myexecutable.so": इस फाइल डिवाइस पर APK संस्थापक द्वारा निकाले नहीं किया जाएगा।

यह के लिए निष्पादन योग्य का नाम बदलने के लिए पर्याप्त है " myexecutable lib .so": इस फाइल निष्पादन अनुमतियों के साथ, /data/data/your.package.full.name/lib को डिवाइस पर APK संस्थापक पैकेज प्रबंधक द्वारा निकाला जाएगा।

मैं व्यक्तिगत रूप से यह वास्तव में एक पुस्तकालय कुछ विशेष नाम देना पसंद नहीं करता, उदा। lib...ffmpeg...so

+0

मैंने यह किया, सुनिश्चित करें कि मैं एनएनडी-बिल्ड चलाने के लिए एक चींटी कार्य जोड़ सकता हूं और यह काम करता है। चींटी स्वचालित रूप से निष्पादन योग्य प्रतिलिपि नहीं करता है। मैं एपेट के साथ बाइनरी भी जोड़ सकता हूं (या तो कमांडलाइन या चींटी से)। दुर्भाग्यवश, परिणामी एपीके स्थापित नहीं है? (किसी प्रकार का प्रकट त्रुटि) निष्पादन योग्य निश्चित रूप से एपीके में है, जैसा कि अनजिप के साथ चेक किया जा सकता है। यह सहायक था लेकिन पूरी तरह से काम नहीं करता है, क्या आपके पास और सुझाव हैं? –

+0

@Alex क्या प्रकट त्रुटि? क्या आप अधिक विशिष्ट हो सकते हैं? –

+0

ठीक है, यहां धोखा देने का एक तरीका है: अपने निष्पादन योग्य "gdbserver" को कॉल करें, और यह दोनों एपीके में 'lib/armeabi' निर्देशिका में सही ढंग से पैक किया जाएगा, और '/data/data/your.package.name पर स्थापित किया जाएगा डिवाइस पर/lib' निर्देशिका। जैसा कि आपने देखा, दो बाधाएं हैं। एक, एपीके को बाइनरी जोड़कर, एक कस्टम एएनटी चरण के रूप में किया जा सकता है, लेकिन एपीके पर हस्ताक्षर करने से पहले आपको वहां पर ध्यान रखना चाहिए। डिवाइस पर दूसरा कदम, ट्रिकियर हो सकता है। –

2

सामान्य तौर पर, आप Assets फ़ोल्डर में अपने कमांडलाइन एप्लिकेशन रखना चाहिए, फिर अपने संपत्ति को निकालने के लिए में AssetManager का उपयोग करें (यह chmod निकासी के बाद करने के लिए मत भूलना!)। लेकिन वहां एक समस्या होगी जहां इसे निकालना है, क्योंकि एंड्रॉइड में प्रत्येक निर्देशिका निष्पादन योग्य बाइनरी स्टोर नहीं कर सकती है। एंड्रॉइड 2.2 पर मैंने /cache की कोशिश की है और यह काम करता है। नए Androids के लिए मत कहो। क्षमा करें, चींटी के बारे में कोई सिफारिश नहीं दे सकते हैं।

+0

मैं एंड्रॉइड 4.0/4.1/4.2 के लिए ऐसा करने की कोशिश कर रहा हूं। निष्पादन योग्य बाइनरी/डेटा/स्थानीय काम में। –

+3

/डेटा/लोकल कई एंड्रॉइड रिलीज पर प्रतिबंधित (और संभवतः भी पढ़ा जाता है) लिखता है। शायद इसे रखने के लिए सबसे अच्छी जगह ऐप के निजी स्टोरेज में है, लेकिन फ़ाइल पर अनुमतियों को विश्व स्तर पर पठनीय और निष्पादन योग्य पर सेट करें यदि यह अन्य ऐप्स या एडब शैल के साथ साझा करने का इरादा रखता है। –

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