অ্যান্ড্রয়েড ওএসে একটি হাস্কেল প্রোগ্রাম চালানো


216

পূরনোট: এটি থ্রেডের একটি এক্সটেনশন যা / আর / হ্যাশেল থেকে শুরু হয়েছিল

আসল তথ্য দিয়ে শুরু করা যাক:

  • অ্যান্ড্রয়েড একটি দুর্দান্ত অপারেটিং সিস্টেম
  • হাস্কেল গ্রহের সেরা প্রোগ্রামিং ভাষা

সুতরাং, স্পষ্টতই, তাদের একত্রিত করে অ্যান্ড্রয়েড বিকাশকে আরও উন্নত করে তুলবে। সুতরাং মূলত আমি কীভাবে Android OS এর জন্য হাস্কেল প্রোগ্রাম লিখতে পারি তা জানতে চাই। আমার প্রশ্নটি হ'ল:

অ্যান্ড্রয়েড ওএসে চালনা / চালানোর জন্য আমি কীভাবে একটি হাস্কেল প্রোগ্রাম পেতে পারি?

উত্তর:


81

আপনি এটি কীভাবে প্রথমে একটি হাস্কেল সংকলক পেয়ে যা অ্যান্ড্রয়েড এনডিকে দিয়ে সি টার্গেট করতে পারে যা এআরএম আর্কিটেকচারের জন্য জিসিসি বন্দর নিয়ে আসে। জেএইচসি খুব ছোট্ট ইনফ স্টাইল ফাইলের সাহায্যে তুচ্ছভাবে এটি করতে পারে যা প্ল্যাটফর্মের বর্ণনা দেয় (শব্দের আকার, সি-সংকলক, ইত্যাদি) আমি এটি Wii হোমব্রু ডেভ কিট দিয়ে করেছি এবং এটি বেশ সহজ ছিল। তবে জেএইচসি-র এখনও জটিল কোড সহ কিছু স্থায়িত্বের সমস্যা রয়েছে যেমন আইওর সাথে একটি মোনাড ট্রান্সফর্মার স্ট্যাক ব্যবহার করা হলেও জেএইচসি গত months মাসে অনেক উন্নতি করেছে। জেএইচসিতে কেবলমাত্র একজন ব্যক্তি কাজ করছেন আমি চেয়েছি আরও লোক তাকে সহায়তা করতে পারে।

অন্য বিকল্পটি হ'ল এন এইডিসি জি সি সি কে লক্ষ্য করে জিএইচসি একটি "অনিবন্ধিত" পোর্ট তৈরি করা, এটি অনেক বেশি জড়িত প্রক্রিয়া কারণ এই মুহুর্তে জিএইচসি সত্যিকারের ক্রস-সংকলক নয় এবং আপনার কোন অংশগুলির প্রয়োজন সেই বিল্ড সিস্টেমটি বুঝতে হবে you পরিবর্তন. আর একটি বিকল্প হ'ল এনএইচসি যা সি-তে ক্রস-সংকলন করতে পারে, জিএইচসি-র মতো আপনাকে সি সি সংকলককে লক্ষ্য করে এনএইচসি তৈরি করতে হবে, এনএইচসি-তে জিএইচসির মতো অনেক হাস্কেল এক্সটেনশন নেই।

একবার আপনার কাছে এনডিকে জিসিসিকে লক্ষ্য করে হাস্কেল সংকলকটি তৈরি হয়ে গেলে, আপনাকে অ্যান্ড্রয়েড এনডিকে জেএনআই আঠালো কোডের কাঠামোতে (অ্যান্ড্রয়েড ২.৩ থেকে যুক্ত) বা বাইন্ডিংগুলি লিখতে হবে অথবা আপনাকে জাভা-সি-হাস্কেলের মধ্যে জেএনআই আঠালো কোড লিখতে হবে, পূর্ববর্তী বিকল্পটি সহজ সমাধান এবং যদি আমি সঠিকভাবে মনে করি তবে এটি অবশ্যই 2.3 এর নীচে অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলির সাথে সামনের দিকে সামঞ্জস্যপূর্ণ।

একবার আপনার এটি হয়ে গেলে আপনার অবশ্যই হাস্কেল কোডটি ভাগ করে নেওয়া লাইব্রেরি বা স্থিতাগত লাইব্রেরি হিসাবে তৈরি করতে হবে যা এনডিকে জাভা আঠালো কোডের সাথে সংযুক্ত হয়ে যায় (যা নিজেই একটি ভাগ করা লাইব্রেরি। যতদূর আমি সচেতন আপনি আনুষ্ঠানিকভাবে অ্যান্ড্রয়েডে নেটিভ এক্সিকিউটেবল চালাতে পারবেন না। আপনি সম্ভবত এটি একটি মূলযুক্ত ফোন দিয়ে করতে পারেন, এইভাবে আমি ধরে নিই এর অর্থ এটি হ'ল এনডিকে জিসিসি পোর্ট যখন ঠিক জরিমানা দেশীয় এক্সিকিউটেবল তৈরি করতে পারে তখনও আপনি অ্যাপ স্টোরে নেটিভ এক্সিকিউটেবল বিতরণ করতে পারবেন না। এটি সম্ভবত এলএলভিএম ব্যবহারের বিকল্পটিকে হারাতে পারে যদি না আপনি এলডিভিএমের সাথে এনডিকে জেএনআইকে কাজ করতে না পান।

সবচেয়ে বড় প্রতিবন্ধকতা অ্যান্ড্রয়েডের জন্য হ্যাস্কেল সংকলক পাওয়ার এত বেশি নয় (যা এখনও একটি বড় বাধা) সবচেয়ে বড় সমস্যাটি হ'ল এনডিকে লাইব্রেরির জন্য বাইন্ডিং এপিআই লিখতে হবে এমন একটির যা একটি বিশাল কাজ এবং আপনি যদি পরিস্থিতি আরও খারাপ করে থাকেন তবে অ্যান্ড্রয়েড ইউআই কোড লিখতে হবে কারণ অ্যান্ড্রয়েড এসডিকে এই অংশের জন্য কোনও এনডিকে এপিআই নেই। আপনি যদি হাস্কেল এ অ্যান্ড্রয়েড ইউআই কোড করতে চান তবে কাউকে জাএনআই / সি এর মাধ্যমে জাভায় হাস্কেল বাইন্ডিং লিখতে হবে। বাইন্ডিং লাইব্রেরিগুলি লেখার জন্য আরও বেশি স্বয়ংক্রিয় প্রক্রিয়া না থাকলে (আমি জানি কিছু রয়েছে, সেগুলি কেবল আমার পক্ষে যথেষ্ট পরিমাণে স্বয়ংক্রিয় নয়) তবে এটির কারও কারও করার সম্ভাবনা যথেষ্ট কম।

L01man: এটি কীভাবে করবেন সে সম্পর্কে কোনও টিউটোরিয়াল আছে? প্রথম অংশের জন্য, আমি বুঝতে পারলাম আমাকে জেএইচসি ডাউনলোড করতে হবে। ইনফ ফাইলটিতে আমার কী লিখতে হবে এবং কীভাবে এটি ব্যবহার করব?

দয়া করে মনে রাখবেন আমি এই প্রশ্নের উত্তর দেওয়ার আগে আমি বেশিরভাগ সময় jhc ব্যবহার করি নি যেহেতু আমি মূলত এটি লিখেছিলাম এবং নতুন সংস্করণগুলি প্রকাশিত হয়েছে তাই আমি জানি না যে আরও জটিল হাসকল প্রোগ্রামগুলির কোড জেনারেশন করার সময় জেএইচসি বর্তমানে কতটা স্থিতিশীল। এটি জেএইচসি দিয়ে একটি বৃহত্তর হাস্কেল প্রোগ্রাম করার আগে বিবেচনা করার আগে যে কারও কাছে এটি একটি সতর্কতা, আপনি পুরোদস্তুর আগে কিছুটা ছোট পরীক্ষা করা উচিত।

জেএইচসি-র একটি ম্যানুয়াল http://repetae.net/computer/jhc/manual.html এবং বিকল্পগুলি সহ ক্রস-সংকলন এবং .ini ফাইল স্থাপনের একটি বিভাগ রয়েছে: http://repetae.net/computer/jhc/manual .html # ক্রসকম্পিলেশন

L01man: দ্বিতীয় অংশটি প্রথমটির বিকল্প। তৃতীয়টিতে আপনি যা বলেছেন তা কীভাবে করব তা আমি জানি না।

আপনি শুরু করার আগে আপনার সি সম্পর্কে কিছুটা জ্ঞান থাকা উচিত এবং হাস্কেল বিদেশী ফাংশন ইন্টারফেস (এফএফআই) এবং এইচএস 2 সি এর মতো সরঞ্জামগুলি ব্যবহার করে স্বাচ্ছন্দ্য বোধ করা উচিত। অ্যান্ড্রয়েড এনডিকে ব্যবহার এবং ভাগ করা লাইব্রেরি সহ .apk তৈরির সাথে আপনারও পরিচিত হওয়া উচিত। এগুলি আপনাকে সি-হাস্কেল, জাভা / সি-হাস্কেলের মধ্যে ইন্টারফেস করতে হবে এবং অ্যান্ড্রয়েডের জন্য হাস্কেল প্রোগ্রামগুলি বিকাশ করতে হবে যা আপনি বাজারের দোকানে অফিসিয়ালি বিতরণ / বিক্রয় করতে পারেন।

L01man: আমি বুঝতে পারি যে এর লক্ষ্যটি অ্যান্ড্রয়েড এপিআইয়ের জন্য একটি বাঁধাই তৈরি করা। তবে ... চতুর্থ অংশটি কি বলে যে আমরা হাস্কেলের সাথে .apk তৈরি করতে পারি না?

.apk হ'ল একটি অ্যাপ্লিকেশন প্যাকেজ ফাইল ফর্ম্যাট এবং এটি অ্যান্ড্রয়েড এসডিকে (এনডিকে নয়) এর সাহায্যে তৈরি এমন সরঞ্জামগুলি দিয়ে তৈরি, এটি বাইনারিগুলি নিজেই তৈরি করার খুব কম কাজ করে। অ্যান্ড্রয়েড প্যাকেজগুলিতে নেটিভ শেয়ারড লাইব্রেরি থাকতে পারে, এটি আপনার হাস্কেল প্রোগ্রামটি হবে এবং অ্যান্ড্রয়েড এনডিকে মাধ্যমে নেটিভ শেয়ারড / স্ট্যাটিক লাইব্রেরি তৈরি করা হবে।


আমি কোনওভাবেই অ্যান্ড্রয়েড বিশেষজ্ঞ নই। তবে আজ আমি এপিআই স্তর 9 বিকাশকারী.অ্যান্ড্রয়েড . com/references/android/app/NativeActivity.html থেকে নেটিভএকটিভিটি নামে এই নতুন ক্লাসটি পেরিয়ে এসেছি । তারা বলছেন যে এটি খাঁটি দেশীয় কোডে ক্রিয়াকলাপ বাস্তবায়নের জন্য ব্যবহার করা যেতে পারে। আমি অবাক হই যে এটি আমাদের উদ্দেশ্যে কীভাবে প্রাসঙ্গিক / দরকারী? এটি কি হাস্কেল এবং জাভার মধ্যে মিথস্ক্রিয়তার দরকার বোঝায় না?
ফিল

@ পোও দ্যা নেটিভএটিভিটি অ্যান্ড্রয়েড এনডিকে আঠালো কোড ফ্রেমওয়ার্ক (অ্যান্ড্রয়েড ২.৩) এর একটি অংশ যার সম্পর্কে আমি লিখছি। এটি আপনাকে সি / সি ++ এ আপনার সমস্ত কোড লেখার অনুমতি দেবে তবে আপনার একটি নেটিভ এক্সিকিউটেবল হবে না, আপনার একটি ভাগ করা লাইব্রেরি থাকবে যা জাভা থেকে ডেকে আনা হবে। আপনি যদি নেটিভএকটিভিটির সাথে হাস্কেল বাইন্ডিংগুলি লিখে থাকেন তবে আপনাকে জাভা এবং হাস্কেলের মধ্যে বাইন্ডিংগুলি লেখার প্রয়োজন হবে না তবে আমি এনডিকে এপিআইগুলি সম্পূর্ণ জাভা এপিআইয়ের উপসেট হিসাবে উল্লেখ করেছি, উদাহরণস্বরূপ আপনার কাছে স্ট্যান্ডার্ড অ্যান্ড্রয়েড ইউআইয়ের কোনও নেটিভ এপিআই নেই ওপেনজিএল (ইএস) এ নিজের লিখতে বা জেএনআই-হাস্কেল বাইন্ডিং লিখতে।
snk_kid

এটি কীভাবে করবেন সে সম্পর্কে কোনও টিউটোরিয়াল আছে?
L01man

প্রথম অংশের জন্য, আমি বুঝতে পারলাম আমাকে জেএইচসি ডাউনলোড করতে হবে। ইনফ ফাইলটিতে আমার কী লিখতে হবে এবং কীভাবে এটি ব্যবহার করব? দ্বিতীয় অংশটি প্রথমটির বিকল্প। তৃতীয়টিতে আপনি যা বলেছেন তা কীভাবে করব তা আমি জানি না। আমি বুঝতে পারি যে এর লক্ষ্যটি অ্যান্ড্রয়েড এপিআইয়ের জন্য একটি বাঁধাই তৈরি করা। তবে ... চতুর্থ অংশটি কি বলে যে আমরা হাস্কেলের সাথে .apk তৈরি করতে পারি না?
L01man

@ L01man মন্তব্যগুলিতে অক্ষর সীমাবদ্ধ হওয়ার কারণে আমি আপনার প্রশ্নের উত্তরটি মূল উত্তরে দিয়েছি।
snk_kid

17

একটি ভাষা যা সম্প্রতি আমার নজরে এসেছে তা হ'ল এটা

এটার সংকলকটি জিএইচসি 7.10 এর একটি কাঁটাচামচ যা একটি জেভিএম ব্যাকএন্ড রয়েছে। জেনারেটেড জেআর ফাইলগুলি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি লিখতে এবং এমনকি তার বিদেশী ফাংশন ইন্টারফেসটি স্থানীয় অ্যান্ড্রয়েড জাভা লাইব্রেরিগুলিতে কল করতে ব্যবহার করা সম্ভব।

ব্রায়ান ম্যাককেনা কীভাবে এটা লাইব্রেরি ব্যবহার করতে একটি অ্যান্ড্রয়েড স্টুডিও প্রকল্প কনফিগার করতে হয় সে সম্পর্কে একটি ব্লগ পোস্ট লিখেছেন ।


16

নেই https://github.com/neurocyte/android-haskell-activity প্রদর্শক Haskellকোড চলমান।


4
একটি পুত্র ... কেউ আসলে এটা করেছে! যশ।
রবার্ট ম্যাসাওলি

আমি শীঘ্রই এটিকে ঘনিষ্ঠভাবে দেখতে যাচ্ছি। যদি এটি আইনী বলে মনে হয় তবে আমি এটির উত্তরটি পরিবর্তন করতে যাচ্ছি।
রবার্ট ম্যাসাওলি

রবার্ট, এটা আইনী মনে হয়। কিন্তু নিউরোকাইটটি বিল্ড সম্পর্কে বিস্তারিত নির্দেশাবলী সরবরাহ করে না বলে মনে হয়। পড়ুন github.com/neurocyte/android-haskell-activity/issues/1
gliptak

9

আমি একবার একই রেডডিট থ্রেড জুড়ে এসেছি, তবে এটি পুরানো ছিল, এবং মন্তব্যগুলি বন্ধ ছিল। আমি ওপিকে একটি বার্তা পাঠিয়েছি, তবে এটি প্রাপকের কাছে পৌঁছেছে কিনা তা নিশ্চিত নই। আমার পরামর্শ এখানে (পুরানো অ্যান্ড্রয়েডগুলির জন্য কাজ করতে পারে যেখানে নেটিভ ক্রিয়াকলাপগুলি সম্ভব ছিল না)।

আমি (কিছুক্ষণ আগে হাস্কেল-তে বিকাশ পেয়েছি, তবে বর্তমানে স্মার্টটালকে স্যুইচ করেছি) বর্তমানে অ্যান্ড্রয়েডে স্কেক ভিএম বন্দরের বিকাশ করছি। আমি যেভাবে এটি করছি তা হ্যাশেল-অন-অ্যানড্রয়েড প্রকল্পে যেমন মোকাবিলা করা হতে পারে তার সাথে অনুরূপ: অ্যাপ্লিকেশনটির জাভা অংশ থেকে সিএম কোডের একগুচ্ছ কল প্রয়োজন (মূলত অ্যান্ড্রয়েডে যা করা যায় তা হ'ল) বিভিন্ন ইভেন্ট হ্যান্ডেল; একটি অ্যাপ্লিকেশন নিজে ইভেন্টের জন্য পোল করতে পারে না এবং কোনও ইভেন্ট লুপ থাকে না)। আমার ক্ষেত্রে কোডটি স্কেয়াক ভিএম বিল্ডিং সরঞ্জামগুলি দ্বারা উত্পাদিত হয়, অ্যান্ড্রয়েডের হ্যাশেল এর ক্ষেত্রে এটি জেএইচসি এর জিএইচসি থেকে আউটপুট বা যা কিছু সামনে ব্যবহার করা হবে। এই রেপোটি দেখার মতো হতে পারে:

http://gitorious.org/~golubovsky/cogvm/dmg-blessed/trees/master/platforms/android/project

"এসসিআর" এর অধীনে জাভা কোড রয়েছে যা ব্যবহারকারীর ইভেন্টগুলি বাধা দেয় এবং সেগুলি স্থানীয় কোডে প্রেরণ করে (কগভিউ ক্লাস দেখুন)। ভিএম এর সি কোড নিজেই সম্পূর্ণরূপে নেই (দেখুন squeakvm.org, এর জন্য কগ শাখা), তবে একটি ধারণা পেতে পারে। কেউ http://gitorious.org/~golubovsky/cogvm/dmg-blessed/trees/master/platforms/android/vm এর অধীনেও নজর রাখতে পারেন যা ইন্টারপ্রেটারের সি সীমান্ত (ব্যবহারকারীর ইভেন্ট হ্যান্ডলিং, কিছু টাইমকিপিং ইত্যাদিসহ) C )

আশাকরি এটা সাহায্য করবে.

দিমিত্রি



6

আমি মনে করি যে সাধারণ উত্তরটি উত্স-> উত্স রূপান্তরগুলি থেকে আসা উচিত, যেহেতু বিশেষভাবে সংকলিত ভাগ করা বস্তুগুলি লোড করা কিছুটা ক্লেজ (জিএইচসি-> সি এবং উপরের উত্তরগুলির মধ্যে একটি সি-> জাভা পদক্ষেপ জড়িত) বলে মনে হয়। এই প্রশ্নটি এইভাবে জেভিএম-তে হাস্কেলের শিরোনামের অধীনে আসে, যা চেষ্টা করা হয়েছে (জাভা মধ্যবর্তী প্রতিনিধিত্ব হিসাবে এক ধাপ সহ) এবং দৈর্ঘ্যে আলোচনা করা হয়েছে। আপনার যদি গ্রন্থাগারগুলি সংকলনের প্রয়োজন হয় তবে আপনি ফ্রিজ ব্যবহার করতে পারেন । কেবলমাত্র অবশিষ্ট পদক্ষেপগুলি হ'ল আইও () ক্রিয়ায় অনুবাদ করা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এপিআইয়ের শুরু এবং ম্যানিফেস্ট xML এবং apk তৈরির জন্য একটি মোড়ক।


1
প্রকৃতপক্ষে, জাভা এবং ফ্রেজে
ইনগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.