Android के लिए C या C ++ में एप्लिकेशन लिखें? [बन्द है]


286

मैं एंड्रॉइड के लिए एक गेम विकसित / पोर्ट करने की कोशिश कर रहा हूं, लेकिन यह सी में है, और एंड्रॉइड जावा का समर्थन करता है, लेकिन मुझे यकीन है कि वहां पर सी ऐप प्राप्त करने का एक तरीका होना चाहिए, किसी को भी इसे पूरा करने का एक तरीका पता है?


यदि आप फोन AFAIK को जेलब्रेक करते हैं तो ही।
कोगसी

64
IPhones के लिए जेलब्रेकिंग नहीं है?
राबर्ट गोल्ड

1
G1 डिफ़ॉल्ट रूप से रूट एक्सेस की अनुमति नहीं देता है, और 'एंड्रॉइड' वातावरण के बाहर निष्पादित किए जाने के संबंध में बहुत सारे प्रतिबंध हैं। मुझे एंड्रॉइड के भीतर से मूल कोड को निष्पादित करने का तरीका खोजने की बहुत उम्मीद नहीं होगी।
कोगसी

2
लेकिन मैंने बाज़ार से Android के लिए DOOM डाउनलोड किया है। तो यह उल्लेखनीय होना चाहिए
रॉबर्ट गॉल्ड

जवाबों:


247

Google के माध्यम से इस पर आने वाले किसी के लिए, ध्यान दें कि एसडीके 1.6 एंड्रॉइड से शुरू होने पर अब एक आधिकारिक देशी एसडीके है।

आप यहाँ से Android NDK (Native Development Kit) डाउनलोड कर सकते हैं: https://developer.android.com/ndk/downloads/index.html

इसके अलावा NDK के बारे में एक ब्लॉग पोस्ट है:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html


5
ठीक है, तो अब C # और .Net के बारे में कैसे? -)
Avi

4
नहीं देख सकते हैं। नेट समर्थन कभी भी हो रहा है
विक्रिक


2
कृपया इस लिंक को देखें androidsnippets.wordpress.com/2012/08/30/…
KK_07k11A0585

2
.net / c # कोड और एंड्रॉइड के लिए xamarin
bbqchickenrobot

41

एंड्रॉयड NDK एक टूलसेट आप मूल कोड में अपने ऐप के कुछ हिस्सों को लागू, इस तरह के C और C ++ के रूप में भाषाओं का उपयोग करने देता है। कुछ प्रकार के ऐप्स के लिए, यह आपको उन भाषाओं में लिखे कोड पुस्तकालयों का पुन: उपयोग करने में मदद कर सकता है।

मूल विकास के साथ आरंभ करने के बारे में अधिक जानकारी के लिए, इस लिंक का अनुसरण करें

नमूना आवेदन यहां देखे जा सकते हैं


1
या 2009, 2010, 2011, 2012 या 2013
क्रिस्टोफर बर्मन

19

आम तौर पर, आपको निम्न करना होगा:

  1. Google Android NDK इंस्टॉल करें। इसमें लिबास, हेडर, मेकफाइल उदाहरण और जीसीसी टूलचैन शामिल हैं
  2. एआरएम के लिए अपने सी कोड से एक निष्पादन योग्य बनाएं, यदि आवश्यक हो तो प्रदान किए गए कामों के साथ इसे अनुकूलित और लिंक करें
  3. दिए गए adb इंटरफ़ेस का उपयोग करके फ़ोन से कनेक्ट करें और अपने निष्पादन योग्य का परीक्षण करें

यदि आप एक ऐप बेचना चाहते हैं:

  1. अपने C कोड से एक लाइब्रेरी बनाएं
  2. सरल जावा कोड बनाएं जो इस लाइब्रेरी का उपयोग करेगा
  3. इस लाइब्रेरी को एप्लिकेशन पैकेज फ़ाइल में एम्बेड करें
  4. अपने ऐप का परीक्षण करें
  5. इसे बेचो या मुफ्त में बांटो

मैं NDK में एक नया हूँ और मैं Android में C lan चलाना चाहता हूँ।
पराग चौहान

14

Google ने एक मूल विकास किट (NDK) ( http://www.youtube.com/watch?v=Z5whfaLH1-E के अनुसार 00:07:30) जारी किया है।

उम्मीद है कि जानकारी Google समूह पृष्ठ ( http://groups.google.com/group/android-ndk ) पर अपडेट की जाएगी , क्योंकि यह कहता है कि यह अभी तक जारी नहीं किया गया है।

मुझे यकीन नहीं है कि इसके लिए एक सरल डाउनलोड कहां से मिलेगा, लेकिन मैंने सुना है कि आप डोनट शाखा के तहत Google की गिट रिपॉजिटरी से NDK की एक प्रति प्राप्त कर सकते हैं।


12

आधिकारिक स्थिति से लगता है कि यह ऐसा कुछ नहीं है जिसे आप कभी "करना चाहते हैं"। देखें इस सूत्र Android डेवलपर की सूची पर। Google विभिन्न उपकरणों (CPU, डिस्प्ले, आदि) की एक किस्म पर चलने वाले Android की परिकल्पना करता है। इसलिए विकास को सक्षम करने का सबसे अच्छा तरीका है कि (पोर्टेबल) प्रबंधित कोड का उपयोग किया जाए जो दलविक वीएम को लक्षित करता है। इस कारण से, Android SDK C / C ++ का समर्थन नहीं करता है।

लेकिन, इस पृष्ठ पर एक नज़र डालें :

एंड्रॉइड में C / C ++ लाइब्रेरी का एक सेट शामिल है जिसका उपयोग एंड्रॉइड सिस्टम के विभिन्न घटकों द्वारा किया जाता है। ये क्षमताएं Android एप्लिकेशन ढांचे के माध्यम से डेवलपर्स के सामने आती हैं।

इन पुस्तकालयों के शीर्ष-स्तर पर प्रबंधित अनुप्रयोग ढांचा स्तरित दिखता है। पृष्ठ C / C ++ लिबास: मानक C लाइब्रेरी, मीडिया, 3D, SQL लाइट और अन्य को सूचीबद्ध करता है।

तो आपको बस एक संकलक श्रृंखला है जो C1 / C ++ को उपयुक्त CPU (ARM, G1 के मामले में) संकलित करेगी। ऐसा करने के तरीके पर कुछ संक्षिप्त निर्देश हैं यहाँ

मुझे नहीं पता कि इन पुस्तकालयों द्वारा प्रदान किए जाने वाले एपीआई के विवरण कहां से मिलेंगे। मुझे लगता है कि SDK में कहीं हेडर फाइल दफन हो सकती है, लेकिन प्रलेखन स्केच / गायब हो सकता है। लेकिन मुझे लगता है कि यह किया जा सकता है!

आशा है कि उपयोगी है। रिकॉर्ड के लिए, मैंने कोई देशी एंड्रॉइड ऐप नहीं लिखा है - बस कुछ सरल प्रबंधित।

एंडी


4
Downvoting। एनडीके अब एंड्रॉइड देशी कोड के लिए एक आधिकारिक संकलक प्रतीत होता है। इस उत्तर को अप्रचलित बनाना।
unixman83

8

आप सी (या अन्य जीसीसी भाषाओं) का अनुवाद करने के लिए नेस्टेडम को जावा बाइटकोड में उपयोग कर सकते हैं , और अपने पोर्ट के आधार के रूप में उपयोग कर सकते हैं। उदाहरण के लिए, साइमन टाथम्स पोर्टेबल पहेली संग्रह का एंड्रॉइड पोर्ट देखें ।

मुझे उम्मीद है कि यह विधि NDK द्वारा अप्रचलित है, लेकिन ऐसा नहीं हो सकता है यदि कुछ नेटवर्क या कुछ लोग अपने फोन को अपग्रेड करने की अनुमति नहीं देते हैं।


1
NDK के विकल्प के लिए +1, हालांकि NDK अप्रचलित है।
tobsen

Nestedvm अधिक उपकरणों के साथ संगत नहीं है?
चारो

8

Google ने पहले ही Google I / O 2011 लॉन्च कर दिया है : C और C ++ गेम्स को Android सत्र में लाया जा रहा है जो http://www.youtube.com/watch?v=5yorhsSPFG4 पर उपलब्ध है

जो android के लिए c और c ++ में एप्लीकेशन लिखने के लिए NDK के उपयोग को समझने के लिए अच्छा है।

यदि आप किसी भी कंसोल आधारित देशी गेम को संकलित करना चाहते हैं और उन्हें एंड्रॉइड पर चलाना चाहते हैं, तो इस अनुच्छेद ने उसी के लिए 3 तरीके दिखाए हैं।

1: स्टैंडअलोन टूलकिन का उपयोग करके स्थैतिक संकलन

2: Android NDK के टूलचिन का उपयोग करके क्रॉस संकलन

3: AOSP स्रोत कोड का उपयोग करके क्रॉस संकलन


7

शायद आप इस के लिए देख रहे हैं?

http://www.mosync.com/

यह c ++ का उपयोग करके कई मोबाइल प्लेटफार्मों के लिए विकसित करने के लिए एक मध्य परत है।


2
लिंक 404 नहीं मिला है। साइट के मालिक द्वारा लॉटरी जीतने, उसकी पत्नी को तलाक देने और बहमास में स्थानांतरित करने के मामले में मूल पोस्ट से कुछ सामग्री डालना हमेशा एक अच्छा विचार है।
ज़ुज़्लक्स

7

इसे देखकर ऐसा लगता है कि यह संभव है:

"तथ्य यह है कि केवल जावा भाषा समर्थित है इसका मतलब यह नहीं है कि आप अन्य भाषाओं में एप्लिकेशन विकसित नहीं कर सकते हैं। यह कई डेवलपर्स, हैकर्स और विशेषज्ञों द्वारा मोबाइल के लिए एप्लिकेशन डेवलपमेंट में साबित किया गया है। एजलिब के पीछे कंपनी एलिमेंट्स इंटरएक्टिव बीवी में लोग हैं। लाइब्रेरी, एंड्रॉइड प्लेटफ़ॉर्म पर देशी C ++ एप्लिकेशन को चलाने में सफल रहा, यहां तक ​​कि इस समय भी डिस्प्ले और साउंड ... आदि पर कई मुद्दे हैं। इसमें S-Tris2 गेम और एडगैब का 3 डी एनिमेशन डेमो शामिल है। "


6

2009 से इस मामले पर एक विकास चल रहा है।
Necessitas - क्यूटी (सी ++ ढांचे) Android के लिए
आरंभ कर रहे हैं वीडियो


अच्छी बात। एक अतिरिक्त नोट के रूप में, नूविटास एंड्रॉइड एनडीके का उपयोग करता है।
Jaime Ivan Cervantes


5

मुझे यकीन नहीं है कि एनडीके आधिकारिक जावा एपीआई की पूर्ण कवरेज प्रदान करता है।

से http://developer.android.com/sdk/ndk/index.html#overview :

कृपया ध्यान दें कि NDK आपको केवल-मूल एप्लिकेशन विकसित करने में सक्षम नहीं करता है। एंड्रॉइड का प्राथमिक रनटाइम Dalvik वर्चुअल मशीन है।




2

मैं एक ट्यूटोरियल नहीं जानता लेकिन एक अच्छा विकास उपकरण: आइडियावर्क्स लैब्स से एयरप्ले एसडीके। (हाल ही में " Marmelade " को रीब्रांड किया गया है ) C / C ++ का उपयोग करके आप विंडोज मोबाइल, आईफ़ोन, एंड्रॉइड के लिए ऐप बना सकते हैं। एकमात्र घटक जो मुझे पसंद नहीं था वह जीयूआई संगीतकार था - एक छोटी गाड़ी, लेकिन आप हमेशा इसे नोटपैड के साथ स्थानापन्न कर सकते हैं।


2

आप c4droid डाउनलोड कर सकते हैं और फिर जीसीसी प्लगइन स्थापित कर सकते हैं और अपने एसडी पर इंस्टॉल कर सकते हैं। शेल से मैं सिर्फ उस निर्देशिका की ओर जाता हूं जहां जीसीसी बाइनरी है और फिर इसे ऑन बोर्ड एग्जीक्यूटेबल बनाने के लिए कॉल करता है।

ढूँढें / -नाम जीसीसी

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

cat> test.c

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

./arm-linux-androideabi-gcc test.c -o परीक्षण

।/परीक्षा

नमस्ते हाथ!



2

मूल C / c ++ फ़ाइलें libstdc ++। * आपके Ubuntu से x86 (या x86_64) बायनेरी हैं, लेकिन Android डिवाइस और एमुलेटर ARM हैं। बेशक, यह वैसे भी काम नहीं करेगा, भले ही आप सही सोनम को सेट करेंगे। यह बहुत भोला तरीका है जो कहीं नहीं जाता है। एंड्रॉइड को C ++ का बहुत सीमित समर्थन है जिसका कोई अपवाद नहीं है, मानक C ++ लाइब्रेरी (STL सहित) और RTTI। यदि आपको ऐसी कार्यक्षमता की आवश्यकता है, तो मेरे कस्टम NDK वितरण का उपयोग करें

http://crystax.net/android/ndk.php - यह ऊपर सूचीबद्ध पूर्ण C ++ सुविधाओं का समर्थन करता है।

त्रुटि क्यों है: '__cxa_end_cleanup' लिंक त्रुटि के लिए अपरिभाषित संदर्भ। Android stlport

समय। क्योंकि libstdc + + का कोई लिंक नहीं है। ए तो गलत है।

चूँकि यह कुछ स्टैटिक लाइब्रेरी का उपयोग करता है, इसलिए इसे पूर्ण libstdc + + से जोड़ना आवश्यक है। एक कर सकते हैं

http://crystax.net/android/ndk.php पैकेज डाउनलोड करने के लिए यहाँ

स्रोत \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi निर्देशिका।

Android का अपना libstdc + + समर्थन सीमित है, इसे पूर्ण libstdc + + से जोड़ा जाना चाहिए। एक काम।

Android.mk में फ़ाइल जोड़ें LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

 $ (LOCAL_PATH) / libs / liblua.a \
 `$ (LOCAL_PATH) / libs / libstdc + +. A`  

और LOCAL_CPPFLAGS + =-lstdc + +-fexceptionsसंकलित किया जा सकता है


1

एंड्रॉइड के अगले एसडीके संस्करण में कोड / सी ++ लाइब्रेरी की अनुमति देने की योजना है (कोडनेम एक्लेयर?) आज तक, यह एंड्रॉइड जावा एसडीके के माध्यम से संभव नहीं है। हालाँकि, आप बड़ी खुली स्रोत परियोजना को पकड़ सकते हैं, अपने स्वयं के पुस्तकालयों को रोल कर सकते हैं, और फिर अपने स्वयं के डिवाइस को फ्लैश कर सकते हैं ... लेकिन जो कोई भी आपके पुस्तकालय का उपयोग करना चाहता है उसे आपके कस्टम बिल्ड को भी फ्लैश करना होगा।


-7

संक्षिप्त उत्तर: आप नहीं कर सकते।

@ बैकस्लैश 17: इंस्टॉलेशन निर्देशों के साथ लेख और निम्नलिखित लिंक को देखते हुए, सभी कंपनी को काम करना है, एंड्रॉइड फ्रेमवर्क को दरकिनार करते हुए, एमुलेटर पर एक आत्म संकलित निष्पादन योग्य लॉन्च करना है। एक बार आपके पास एमुलेटर होने के बाद आप इसमें टेलनेट कर सकते हैं और एक लिनक्स शेल है। एक लिनक्स प्रोग्राम चलाना, निश्चित रूप से तुच्छ है। लेकिन यह जेलब्रेक (उर्फ रूट एक्सेस) के बिना फोन के लिए काम नहीं कर रहा है और न ही बाजार में पहुंचाने योग्य है।

जब तक Google अन्य अवसरों को नहीं खोलता है या कोई व्यक्ति एक कस्टम कंपाइलर लिखता है जो लैंग्वेज एक्स को डाल्विक बायटेकोड में संकलित करता है (डेल्विक वह वीएम है जो एंड्रॉइड प्रोग्राम चलाता है) तो आप मूल कोड नहीं लिख पाएंगे।


सही है, इसीलिए मैंने लिखा है "ऐसा लगता है ..."। विश्वास करना देखें!
बैकस्लैश 17
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.