প্রয়োজনীয় লিঙ্ক সেটিংস

লিঙ্ক বিল্ড স্টেপ (এক্সকোডের "লিঙ্ক বাইনারি উইথ লাইব্রেরি" বিল্ড ফেজ) এর জন্য J2ObjC-নির্দিষ্ট পতাকা প্রয়োজন, যা আপনার অ্যাপ্লিকেশন কীভাবে অনুবাদ করা জাভা ক্লাসগুলি ব্যবহার করে তার উপর নির্ভর করে। মূল পতাকাগুলি j2objcc কমান্ড-লাইন স্ক্রিপ্ট দ্বারা সেট করা হয়, তবে Xcode দিয়ে তৈরি করার সময় নির্দিষ্ট করা প্রয়োজন।

SDK লাইব্রেরি

J2ObjC এর JRE বাস্তবায়নের জন্য এই লাইব্রেরির প্রয়োজন । এই লাইব্রেরিটি অন্তর্ভুক্ত করতে ব্যর্থ হলে _iconv দিয়ে শুরু হওয়া নামের সাথে অনির্ধারিত প্রতীক ত্রুটি দেখা দেবে।

লাইব্রেরি লিঙ্ক পতাকা বর্ণনা
আইকনভ -l আইকনভ অক্ষর এনকোডিং এবং ডিকোডিংয়ের জন্য jre_core দ্বারা ব্যবহৃত।

এই লাইব্রেরিগুলি J2ObjC এর JRE বাস্তবায়ন দ্বারা ব্যবহৃত হয় এবং আপনার অ্যাপে লিঙ্ক করার প্রয়োজন হতে পারে।

লাইব্রেরি লিঙ্ক পতাকা বর্ণনা
জিপ -lz java.util.zip দ্বারা ব্যবহৃত। আপনি যদি jre_zip লিঙ্ক করছেন তবে আপনাকে এটি অন্তর্ভুক্ত করতে হবে।
নিরাপত্তা - ফ্রেমওয়ার্ক নিরাপত্তা jre_security লিঙ্ক করার জন্য প্রয়োজন।

লাইব্রেরি অনুসন্ধান পথ

J2ObjC এর বিতরণে বেশ কয়েকটি স্ট্যাটিক লাইব্রেরি রয়েছে; সেগুলি ব্যবহার করার জন্য, আপনার প্রোজেক্টকে লিঙ্কারকে বলতে হবে যে সেগুলি কোথায় পাবেন৷

সাধারণত, লাইব্রেরি অনুসন্ধানের পাথে _$(j2objc distribution)/lib অন্তর্ভুক্ত করতে হবে, যেখানে _$(j2objc ডিস্ট্রিবিউশন) ভেরিয়েবল হল আপনার J2ObjC-এর স্থানীয় অনুলিপির পথ। উদাহরণস্বরূপ, আপনি যদি একটি J2ObjC রিলিজ সংরক্ষণাগার ফাইলকে "/usr/local/" এ আনজিপ করেন, তাহলে এই পথটি হবে "/usr/local/j2objc"।

গুরুত্বপূর্ণ : আপনার প্রকল্পে আসলে _$(j2objc ডিস্ট্রিবিউশন) ব্যবহার করবেন না; সর্বদা প্রকৃত পথ নির্দিষ্ট করুন যেখানে আপনি J2ObjC ইনস্টল করেছেন।

আপনি যদি এর সোর্স কোডের একটি কপি থেকে J2ObjC তৈরি করেন, তাহলে _$(j2objc ডিস্ট্রিবিউশন) হল আপনার কপির "j2objc/dist/" ডিরেক্টরি। আপনি make dist দিয়ে J2ObjC তৈরি না করা পর্যন্ত এই ডিরেক্টরিটি বিদ্যমান থাকবে না।

এক্সকোড: লাইব্রেরি অনুসন্ধান পথ

_$(j2objc ডিস্ট্রিবিউশন)/lib যোগ করে অ্যাপ টার্গেটের লাইব্রেরি সার্চ পাথ আপডেট করুন (আবার, আসল পথ ব্যবহার করুন)।

জেআরই লাইব্রেরি

এই লাইব্রেরিগুলি J2ObjC এর JRE ইমুলেশন দ্বারা সংজ্ঞায়িত ক্লাসগুলি প্রয়োগ করে৷

দ্রষ্টব্য: libjre_core.a লাইব্রেরিতে অন্যান্য সাবসেট লাইব্রেরির বেশিরভাগ ক্লাস রয়েছে। অ্যাপের আকার কমানোর প্রস্তাবিত উপায় হল অ্যাপটিকে -l jre_core এর সাথে লিঙ্ক করা শুরু করা, তারপর উপসেট লাইব্রেরি যোগ করুন যা কোনো অনুপস্থিত চিহ্নের সমাধান করে। উদাহরণস্বরূপ, সর্বাধিক ব্যবহৃত java.io ক্লাসগুলি libjre_core.a এ, তাই শুধুমাত্র libjre_io.a লাইব্রেরি অন্তর্ভুক্ত করুন যদি সেখানে অমীমাংসিত প্রতীক ত্রুটি থাকে যার নাম JavaIo দিয়ে শুরু হয়।

লাইব্রেরি লিঙ্ক পতাকা বর্ণনা
libjre_core.a -l jre_core J2ObjC-এর JRE ইমুলেশনের জন্য প্রয়োজনীয় ক্লাসের ন্যূনতম সেট , সমস্ত জেনারেট করা সোর্স ফাইলের দ্বারা উল্লেখ করা হয়েছে। যদি আপনার অনুবাদিত জাভা উত্সগুলি নেটওয়ার্কিং, XML, SQL, ইত্যাদির জন্য JRE সমর্থন উল্লেখ করে, তাহলে অতিরিক্ত লাইব্রেরিগুলি (নীচে) লিঙ্ক করতে হবে।
libjre_beans.a -l jre_beans java.beans প্যাকেজ থেকে সব ক্লাস । সমস্ত জাভা বিন ক্লাস অন্তর্ভুক্ত করা হয় না, যেহেতু অনেকগুলি শুধুমাত্র সুইং এবং AWT অ্যাপ দ্বারা ব্যবহৃত হয়।
libjre_channels.a -l jre_channels java.nio.channels এবং java.nio.channels.spi প্যাকেজ থেকে বেশ কয়েকটি ক্লাস
libjre_concurrent.a -l jre_concurrent java.util.concurrent , java.util.concurrent.atomic এবং java.util.concurrent.locks প্যাকেজ থেকে বেশ কয়েকটি ক্লাস
libjre_icu.a -l jre_icu সময় অঞ্চল সমর্থন করার জন্য android.icu থেকে বেশ কয়েকটি ক্লাস (প্রধানত java.time সক্ষম করার জন্য)।
libjre_io.a -l jre_io java.io প্যাকেজ থেকে বেশ কিছু (কম ঘন ঘন ব্যবহৃত) ক্লাস
libjre_net.a -l jre_net java.net প্যাকেজে বেশ কয়েকটি ক্লাস । যাইহোক, java.net.URLClassLoader ক্লাস jre_security এ রয়েছে, যেখানে javax.net এবং javax.net.ssl ​​ক্লাস jre_ssl এ রয়েছে।
libjre_security.a -ljre_security java.security প্যাকেজের বেশিরভাগ ক্লাস (কয়েকটি jre_core এ রয়েছে), পাশাপাশি java.security.* , javax.crypto.* , এবং javax.security.* প্যাকেজের ক্লাস। আপনি যদি এটি লিঙ্ক করেন তবে আপনাকে iOS সিকিউরিটি ফ্রেমওয়ার্ক লিঙ্ক করতে হবে। ( SDK লাইব্রেরি দেখুন)
libjre_sql.a -l jre_sql java.sql প্যাকেজে সমস্ত ক্লাস
libjre_ssl.a -l jre_ssl javax.net এবং javax.net.ssl ​​প্যাকেজের সমস্ত ক্লাস
libjre_time.a -l jre_time java.time প্যাকেজে সব ক্লাস
libjre_util.a -l jre_util java.util প্যাকেজ, সেইসাথে java.util.logging প্যাকেজ থেকে বেশ কিছু ক্লাস । বেশিরভাগ java.util ক্লাস jre_core এ রয়েছে, তাই শুধুমাত্র এই লাইব্রেরিটি অন্তর্ভুক্ত করুন যদি অমীমাংসিত JavaUtil* প্রতীক ত্রুটি থাকে ( JavaUtilConcurrent* প্রতীকগুলি jre_concurrent লাইব্রেরিতে থাকে)।
libjre_xml.a -l jre_xml javax.xml.* , org.w3c.dom.* , এবং org.xml.sax.* সহ XML-সম্পর্কিত প্যাকেজ থেকে সমস্ত ক্লাস
libjre_zip.a -l jre_zip java.util.zip এবং java.util.jar প্যাকেজ থেকে সমস্ত ক্লাস । আপনি যদি এটি লিঙ্ক করেন তবে আপনাকে SDK জিপ লাইব্রেরি লিঙ্ক করতে হবে। ( SDK লাইব্রেরি দেখুন)

libjre_emul.a ( -l jre_emul )

jre_emul লাইব্রেরিতে J2ObjC এর JRE ইমুলেশনের অন্তর্ভুক্ত সমস্ত ক্লাস রয়েছে। যদি একটি অ্যাপ jre_emul এর সাথে লিঙ্ক করা থাকে, তাহলে অন্য jre_* লাইব্রেরিগুলির মধ্যে কোনোটিই অন্তর্ভুক্ত করা উচিত নয়, অথবা লিঙ্কার ডুপ্লিকেট প্রতীক ত্রুটির রিপোর্ট করবে। কারণ jre_emul অন্যান্য লাইব্রেরিতে সংজ্ঞায়িত সমস্ত ক্লাস অন্তর্ভুক্ত করে।

অন্যান্য J2ObjC লাইব্রেরি

এই জাভা লাইব্রেরি এবং অ্যান্ড্রয়েড ইউটিল ক্লাসগুলি স্ট্যাটিক লাইব্রেরি হিসাবে J2ObjC ডিস্ট্রিবিউশনে অন্তর্ভুক্ত করা হয়েছে:

লাইব্রেরি লিঙ্ক পতাকা বর্ণনা
libguava.a - পেয়ারা পেয়ারা: জাভার জন্য গুগল কোর লাইব্রেরি
libjavax_inject.a -l javax_inject JSR-330 নির্ভরতা ইনজেকশন টীকা লাইব্রেরি।
libjson.a -এল জসন JSON ডেটা ইন্টারচেঞ্জ লাইব্রেরি। এটি JSON এর Android সংস্করণ , যা অন্যান্য বাস্তবায়ন থেকে কিছুটা আলাদা।
libjsr305.a -l jsr305 সফ্টওয়্যার ত্রুটি সনাক্তকরণ লাইব্রেরির জন্য JSR-305 টীকা।
libjunit.a -l জুনিট -ObjC JUnit পরীক্ষার কাঠামো।
libmockito.a -l mockito -ObjC জাভাতে ইউনিট পরীক্ষার জন্য মকিটো মকিং ফ্রেমওয়ার্ক।
libprotobuf_runtime.a -l protobuf_runtime একটি Google প্রোটোকল বাফার রানটাইম, J2ObjC অ্যাপের জন্য অপ্টিমাইজ করা হয়েছে। J2ObjC প্রোটোবাফ ব্যবহার করা অ্যাপগুলিকে তাদের প্রোটো ফাইলগুলি j2objc_protoc দিয়ে কম্পাইল করা উচিত।
libandroid_util.a -l android_util `android_util` লাইব্রেরিতে Android API ইউটিলিটি ক্লাসের একটি ছোট উপসেট রয়েছে। এটি একটি Android পরিবেশের জন্য অনুকরণ প্রদানের উদ্দেশ্যে নয়, বরং `android.util.Log` এর মতো দরকারী ক্লাস ভাগ করার একটি উপায়।

-ObjC ফ্ল্যাগটি প্রায়শই iOS অ্যাপগুলিকে লিঙ্ক করার সময় ব্যবহার করা হয়, তবে এটি শুধুমাত্র তখনই প্রয়োজন যখন অবজেক্টিভ C ক্লাস এবং বিভাগগুলিকে স্ট্যাটিক লাইব্রেরি থেকে গতিশীলভাবে লোড করতে হবে। এই পতাকাটি সমস্ত লিঙ্কযুক্ত স্ট্যাটিক লাইব্রেরির সমস্ত ক্লাসকে অ্যাপে অন্তর্ভুক্ত করে, সেগুলি আসলে ব্যবহার করা হোক বা না হোক। তাই এটি সুপারিশ করা হয় যে অ্যাপগুলি J2ObjC ব্যবহার করে শুধুমাত্র -ObjC ফ্ল্যাগের সাথে লিঙ্ক করে যখন ক্লাস রানটাইমে লোড হতে ব্যর্থ হয় (একটি লক্ষণ হল যখন JavaLangClassNotFoundException নিক্ষেপ করা হয়)।

JUnit এবং Mockito পরীক্ষার ফ্রেমওয়ার্কগুলি প্রতিফলনের উপর অনেক বেশি নির্ভর করে, তাই যে অ্যাপগুলি ব্যবহার করে সেগুলিকে -ObjC- এর সাথে লিঙ্ক করা উচিত।

একটি সম্পূর্ণ স্ট্যাটিক লাইব্রেরিতে লিঙ্ক করার একটি বিকল্প যাতে কয়েকটি ক্লাস গতিশীলভাবে লোড করা যায় তার পরিবর্তে সেই ক্লাসগুলিকে স্ট্যাটিকভাবে উল্লেখ করা। জাভাতে, এটি একটি স্ট্যাটিক ইনিশিয়ালাইজার ব্লকে করা যেতে পারে; এখানে J2ObjC এর IosSecurityProvider ক্লাস থেকে একটি উদাহরণ রয়েছে:

  // Reference all dynamically loaded classes, so they are linked into apps.
  @SuppressWarnings("unused")
  private static final Class<?>[] unused = {
    IosCertificateFactory.class,
    IosMD5MessageDigest.class,
    IosRSAKeyFactory.class,
    IosRSAKeyPairGenerator.class,
    IosRSASignature.class,
    IosSecureRandomImpl.class,
    IosSHAMessageDigest.class
  };