অ্যান্ড্রয়েড স্টুডিও ১.০ এ আপডেট হওয়ার সাথে সাথে এনডিকে টুলচেন সমর্থনটি প্রচুরভাবে উন্নত হয়েছে ( দ্রষ্টব্য: নতুন পরীক্ষামূলক গ্রেডল প্লাগইন এবং অ্যান্ড্রয়েড স্টুডিও ১.৫ সহ ব্যবহার দেখতে দয়া করে এই পোস্টের নীচে আমার আপডেটগুলি পড়ুন )।
অ্যান্ড্রয়েড স্টুডিও এবং এনডিকে যথেষ্ট সংহত হয়েছে যাতে আপনার মডিউলের বিল্ড.gradle এ আপনাকে কেবল একটি এনডি কে}} ব্লক তৈরি করতে হবে এবং আপনার উত্স ফাইলগুলি (মডিউল) / এসআরসি / প্রধান / জনি ডিরেক্টরিতে সেট করতে হবে - এবং আপনি সম্পন্ন!
কমান্ড লাইন থেকে আর কোনও এনডিকে-বিল্ড নেই।
আমি আমার ব্লগ পোস্টে এটি সম্পর্কে সমস্ত এখানে লিখেছি: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
মূল বিষয়গুলি হ'ল:
এখানে দুটি জিনিস আপনার জানা দরকার। ডিফল্টরূপে, যদি আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে লোড হওয়া চাই এমন বাহ্যিক libs থাকে তবে সেগুলি ডিফল্টরূপে (মডিউল) / src / main / jniLibs এ সন্ধান করা হবে। আপনি আপনার মডিউলের বিল্ড.gradle এ SourceSets.main.jniLibs.srcDirs সেট করে এটি পরিবর্তন করতে পারেন। আপনি যে প্রতিটি আর্কিটেকচারকে টার্গেট করছেন তার জন্য আপনার লাইব্রেরি সহ একটি উপ-ডিরেক্টরি প্রয়োজন হবে (যেমন x86, আর্ম, মিপস, আর্ম 64-ভি 8 এ, ইত্যাদি ...)
আপনি যে কোডটি এনডিকে সরঞ্জামচেন দ্বারা ডিফল্টরূপে সংকলন করতে চান তা (মডিউল) / এসসিআর / মেইন / জনিতে অবস্থিত হবে এবং অনুরূপভাবে উপরে, আপনি আপনার মডিউলের বিল্ড.gradle এ উত্সসেটস.মেইন.জিনি.সিআরসিডিআর সেট করে এটি পরিবর্তন করতে পারবেন can
এবং এটি আপনার মডিউলটির বিল্ড।
ndk {
moduleName "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cFlags "-std=c++11 -fexceptions" // Add provisions to allow C++11 functionality
stl "gnustl_shared" // Which STL library to use: gnustl or stlport
}
এটি আপনার সি ++ কোডটি সংকলনের প্রক্রিয়া, সেখান থেকে আপনাকে এটি লোড করতে হবে এবং র্যাপারগুলি তৈরি করতে হবে - তবে আপনার প্রশ্নটি বিচার করে আপনি ইতিমধ্যে কীভাবে কীভাবে করবেন তা জানেন, তাই আমি পুনরায় হ্যাশ করব না।
এছাড়াও, আমি এখানে উদাহরণের একটি গিথুব রেপো রেখেছি: http://github.com/sureshjoshi/android-ndk-swig-example
আপডেট: 14 জুন, 2015
অ্যান্ড্রয়েড স্টুডিও ১.৩ বের হয়ে গেলে জেটব্রেইনস সিএলআইআন প্লাগইনটির মাধ্যমে সি ++ এর জন্য আরও ভাল সমর্থন থাকা উচিত। আমি বর্তমানে অনুমানের আওতায় আছি যে এটি অ্যান্ড্রয়েড স্টুডিওর মধ্যে থেকে জাভা এবং সি ++ বিকাশের অনুমতি দেবে; তবে আমি মনে করি আমাদের উপরে এখনও উল্লিখিত হিসাবে গ্রেডল এনডিকে বিভাগটি ব্যবহার করা দরকার। অতিরিক্ত হিসাবে, আমি মনে করি জাভা <-> সি ++ র্যাপার ফাইলগুলি লেখার এখনও দরকার আছে, যদি না ক্লিওন সেগুলি স্বয়ংক্রিয়ভাবে না করে।
আপডেট: 5 জানুয়ারী, 2016
সর্বশেষ পরীক্ষামূলক গ্রেডল প্লাগইন (0.6.0-alpha3) সহ অ্যান্ড্রয়েড স্টুডিও 1.5 ব্যবহার করতে আমি আমার ব্লগ এবং গিথুব রেপো (বিকাশ শাখায়) আপডেট করেছি।
http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
http://github.com/sureshjoshi/android-ndk-swig-example
এনডিকে বিভাগের জন্য গ্রেডল বিল্ডটি এখন এর মতো দেখায়:
android.ndk {
moduleName = "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cppFlags.add("-std=c++11") // Add provisions to allow C++11 functionality
cppFlags.add("-fexceptions")
stl = "gnustl_shared" // Which STL library to use: gnustl or stlport
}
এছাড়াও, বেশ আশ্চর্যের সাথে, অ্যান্ড্রয়েড স্টুডিওতে সি ++ - এর জন্য জাভা উত্পাদিত র্যাপারগুলি 'নেটিভ' কীওয়ার্ড ব্যবহার করে স্বয়ংক্রিয়ভাবে পূর্ণ হয়েছে:
তবে এটি পুরোপুরি গোলাপী নয় ... আপনি যদি কোডটি অটো-জেনারেট করার জন্য কোনও লাইব্রেরি মোড়ানোর জন্য SWIG ব্যবহার করেন, এবং তারপরে স্থানীয় কীওয়ার্ড অটো-জেনারেশনটি ব্যবহার করার চেষ্টা করেন, এটি কোডটি আপনার সুইগ _র্যাপে ভুল জায়গায় রাখবে .cxx ফাইল ... সুতরাং আপনার এটিকে "বহিরাগত সি" ব্লকে স্থানান্তর করতে হবে:
আপডেট: 15 অক্টোবর, 2017
আমি স্মরণ করবো যদি আমি উল্লেখ না করি যে অ্যান্ড্রয়েড স্টুডিও ২.২ এর পরে গ্র্যাডল এবং সিএমকেকের মাধ্যমে এনডি কে সরঞ্জামচেনের জন্য মূলত 'নেটিভ' (কোনও পাং) সমর্থন নেই। এখন, আপনি যখন একটি নতুন প্রকল্প তৈরি করবেন, কেবল সি ++ সমর্থন নির্বাচন করুন এবং আপনি যেতে ভাল।
আপনাকে এখনও নিজের জেএনআই লেয়ার কোড তৈরি করতে হবে, বা আমি উপরে উল্লিখিত SWIG কৌশলটি ব্যবহার করতে হবে, তবে অ্যান্ড্রয়েড প্রকল্পে সি ++ এর ভাস্কর্যটি এখন তুচ্ছ।
সিএমকেলিস্ট ফাইলগুলিতে পরিবর্তনগুলি (এটি যেখানে আপনি আপনার সি ++ উত্স ফাইলগুলি রেখেছেন) অ্যান্ড্রয়েড স্টুডিওতে বাছাই করা হবে এবং এটি স্বয়ংক্রিয়ভাবে কোনও সম্পর্কিত লাইব্রেরি পুনরায় সংকলন করবে।