এই পৃষ্ঠায় ইউনিটি-সম্পর্কিত সেইসব সমস্যার সমাধান ও প্রতিকার দেওয়া হয়েছে, যেগুলোর সম্মুখীন আপনি ফায়ারবেস ব্যবহার করার সময় হতে পারেন।
আপনার কি অন্য কোনো সমস্যা হচ্ছে অথবা নিচে আপনার সমস্যার বিবরণ খুঁজে পাচ্ছেন না? আরও সার্বিক ফায়ারবেস বা পণ্য-নির্দিষ্ট প্রশ্নোত্তরের জন্য মূল ফায়ারবেস প্রশ্নোত্তর বিভাগটি দেখে নিন।
অ্যান্ড্রয়েড অ্যাপ বিল্ড করার সময় সিঙ্গেল ডেক্স নিয়ে একটি সমস্যা
অ্যান্ড্রয়েড অ্যাপ বিল্ড করার সময়, একটিমাত্র ডেক্স (dex) ফাইল থাকার কারণে আপনি বিল্ড ফেইলারের সম্মুখীন হতে পারেন। যদি আপনার প্রজেক্টটি গ্রেডল (Gradle) বিল্ড সিস্টেম ব্যবহার করার জন্য কনফিগার করা থাকে, তাহলে এরর মেসেজটি দেখতে নিচের মতো হবে।
Cannot fit requested classes in a single dex file.
ডালভিক এক্সিকিউটেবল ( .dex ) ফাইলগুলো অ্যান্ড্রয়েড অ্যাপ্লিকেশন ( .apk )-এর জন্য একগুচ্ছ ক্লাস ডেফিনিশন এবং সেগুলোর সাথে সম্পর্কিত আনুষঙ্গিক ডেটা ধারণ করতে ব্যবহৃত হয়। একটিমাত্র dex ফাইলে সর্বোচ্চ ৬৫,৫৩৬টি মেথড রেফারেন্স করা যায়। আপনার প্রোজেক্টের সমস্ত অ্যান্ড্রয়েড লাইব্রেরির মোট মেথডের সংখ্যা এই সীমা অতিক্রম করলে বিল্ড ব্যর্থ হবে।
ইউনিটি ২০১৭.২ সংস্করণে মিনিফিকেশন চালু করেছে, যা প্রোগার্ড (বা ইউনিটির কিছু সংস্করণে অন্যান্য টুল) ব্যবহার করে অব্যবহৃত কোড বাদ দেয়, যার ফলে একটিমাত্র ডেক্স ফাইলে রেফারেন্স করা মেথডের মোট সংখ্যা কমে যেতে পারে। এই অপশনটি প্লেয়ার সেটিংস > অ্যান্ড্রয়েড > পাবলিশিং সেটিংস > মিনিফাই- এ পাওয়া যাবে। ইউনিটির বিভিন্ন সংস্করণে অপশনগুলো ভিন্ন হতে পারে, তাই অফিসিয়াল ইউনিটি ডকুমেন্টেশন দেখুন।
যদি রেফারেন্স করা মেথডের সংখ্যা এখনও সীমা অতিক্রম করে, তাহলে আরেকটি উপায় হলো multidex সক্রিয় করা। ইউনিটিতে এটি করার একাধিক উপায় রয়েছে:
-
Player SettingsঅধীনেCustom Gradle Templateসক্রিয় করা থাকলে,mainTemplate.gradleপরিবর্তন করুন। - আপনি যদি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে এক্সপোর্ট করা প্রজেক্টটি বিল্ড করেন, তাহলে মডিউল-স্তরের
build.gradleফাইলটি পরিবর্তন করুন।
মাল্টিডেক্স ব্যবহারকারী নির্দেশিকাতে আরও বিস্তারিত তথ্য পাওয়া যাবে।
minSdkVersion 23 ব্যবহার করে অ্যান্ড্রয়েডের জন্য বিল্ড করার সময় সমস্যা
অ্যান্ড্রয়েডের জন্য বিল্ড করার সময়, যদি আপনি minSdkVersion 23 টার্গেট করেন, তাহলে এটি ডেক্সিং ধাপে ব্যর্থ হতে পারে। সাধারণত ':launcher:mergeExtDexDebug' গ্রেডল টাস্কটিতে এই সমস্যা দেখা দেয়, যেখানে এটি অ্যান্ড্রয়েড লাইব্রেরিগুলোর কোনো একটিকে "Failed to transform" (রূপান্তর করতে ব্যর্থ) বলে জানায়। এর কারণ হলো অ্যান্ড্রয়েড SDK-এর ডিফল্ট ডেক্স টুলে থাকা একটি বাগ, যা বেশিরভাগ ইউনিটি এডিটর ব্যবহার করে থাকে, এবং এটি কয়েকটি ভিন্ন উপায়ে সমাধান করা যেতে পারে:
-
minSdkVersionএর মান ২৪-এ সেট করুন। - প্লেয়ার সেটিংস > অ্যান্ড্রয়েড > পাবলিশিং সেটিংস > মিনিফাই- এ গিয়ে অ্যান্ড্রয়েড মিনিফিকেশন চালু করুন।
- আপনার
settingsTemplate.gradleফাইলে এটি যোগ করে dex টুলের একটি ভিন্ন সংস্করণ নির্দিষ্ট করুন:
buildscript {
repositories {
mavenLocal()
maven { url 'https://maven.google.com' }
mavenCentral()
}
dependencies {
classpath 'com.android.tools:r8:8.3.37'
}
}
কোকোপডস দিয়ে আইওএস-এর জন্য বিল্ড করার সময় সমস্যা
iOS-এর জন্য বিল্ড করার সময়, ল্যাঙ্গুয়েজ লোকেল বা UTF-8 এনকোডিং সংক্রান্ত ত্রুটির কারণে Cocoapod ইনস্টলেশন ব্যর্থ হতে পারে। বর্তমানে এই সমস্যাটি সমাধান করার জন্য বিভিন্ন উপায় রয়েছে।
টার্মিনাল থেকে সরাসরি
pod installচালান এবং ফলস্বরূপ প্রাপ্ত xcworkspace ফাইলটি খুলুন।Cocoapods-এর ভার্সনটি 1.10.2-এ ডাউনগ্রেড করুন। সমস্যাটি শুধুমাত্র ভার্সন 1.11 এবং এর পরবর্তী ভার্সনগুলোতে বিদ্যমান।
আপনার
~/.bash_profileবা সমতুল্য ফাইলেexport LANG=en_US.UTF-8যোগ করুন।
Firebase Unity SDK-গুলির ভার্সন কীভাবে আপডেট করবেন
Firebase Unity SDK-গুলোর ভার্সন আপডেট করার প্রক্রিয়া নির্ভর করে সেগুলোকে প্রাথমিকভাবে কীভাবে ইম্পোর্ট করা হয়েছিল তার ওপর। নিচে দুটি বিকল্প ইম্পোর্ট পদ্ধতি দেওয়া হলো:
- আপনার প্রোজেক্টের
Assets/ডিরেক্টরির অধীনে.unitypackageফাইলগুলো ইম্পোর্ট করা হচ্ছে - ইউনিটি প্যাকেজ ম্যানেজার (UPM) ব্যবহার করে ইম্পোর্ট করা
- ইউনিটি ২০১৮.৪+ এ প্যাকেজ পরিচালনার জন্য এটিই প্রস্তাবিত পদ্ধতি।
- ভবিষ্যৎ সংস্করণ আপডেট করা সহজ করতে এবং আপনার
Assets/ডিরেক্টরিকে আরও পরিচ্ছন্ন রাখতে এই পদ্ধতিটি ব্যবহার করুন।
আপনার ইউনিটি প্রোজেক্টে সমস্ত ফায়ারবেস প্যাকেজ পরিচালনা করার জন্য শুধুমাত্র একটি ইম্পোর্ট পদ্ধতি ব্যবহার করা উচিত। নিচের নির্দেশাবলী ব্যবহার করে শুধু স্বতন্ত্র প্যাকেজের সংস্করণই আপডেট করা যায় না, বরং প্রয়োজনে প্যাকেজ ব্যবস্থাপনাকে UPM-এ (প্রস্তাবিত ইম্পোর্ট পদ্ধতি) স্থানান্তরিতও করা যায়।
যদি Firebase প্যাকেজগুলি Assets/ ডিরেক্টরিতে থাকে, তাহলে SDK সংস্করণ আপডেট করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:
বিকল্প ১ (সুপারিশকৃত) : UPM ব্যবহার শুরু করুন (ইউনিটি ২০১৮.৪+ সংস্করণে উপলব্ধ)
- প্যাকেজ ম্যানেজমেন্ট UPM-এ স্থানান্তরিত করতে Firebase-প্রদত্ত নির্দেশাবলী অনুসরণ করুন।
- যদিও
.unitypackageওয়ার্কফ্লো ব্যবহার চালিয়ে যাওয়ার চেয়ে এই পদ্ধতিতে শুরুতে বেশি সেটআপের প্রয়োজন হয়, তবে পরবর্তীকালে SDK সংস্করণ আপডেট করার সুবিধার দিক থেকে এটি লাভজনক।
বিকল্প ২ :
.unitypackageফাইলগুলোকেAssets/ডিরেক্টরিতে ইম্পোর্ট করার জন্য ব্যবহার করা চালিয়ে যান।আপডেট করা সংস্করণের জন্য প্রতিটি প্যাকেজ ইম্পোর্ট করুন।
আপনি যদি ফায়ারবেস ওয়েবসাইট থেকে firebase_unity_sdk.zip ডাউনলোড করেন, তাহলে নিশ্চিত করুন যে আপনি সঠিক
dotnetফোল্ডার থেকে সমস্ত.unitypackagesইম্পোর্ট করেছেন।- আপনি যদি ইউনিটি ২০১৯ বা তার পরবর্তী সংস্করণ ব্যবহার করেন, তাহলে
dotnet4ফোল্ডার থেকে ইম্পোর্ট করুন। - অন্যথায়, প্লেয়ার সেটিংস- এ স্ক্রিপ্টিং রানটাইম ভার্সন নির্বাচন করুন, এবং যদি এটি ".NET 3.x"-এ সেট করা থাকে, তাহলে
dotnet3ফোল্ডার থেকে ইম্পোর্ট করুন।
- আপনি যদি ইউনিটি ২০১৯ বা তার পরবর্তী সংস্করণ ব্যবহার করেন, তাহলে
পূর্বে ইম্পোর্ট করা প্যাকেজ ভার্সনগুলো ওভাররাইট করার বিষয়টি এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হওয়া উচিত (যা আপনি Firebase
.unitypackagesইম্পোর্ট করার সময় স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়)।তবে, যদি এবং শুধুমাত্র যদি এই স্বয়ংক্রিয় প্রক্রিয়াটি ব্যর্থ হয়, তাহলে আপনাকে ম্যানুয়ালি নিম্নলিখিত ফোল্ডারগুলি মুছে ফেলতে হবে এবং তারপরে উপরের ইম্পোর্ট ধাপটি আবার চেষ্টা করতে হবে।
-
Assets/Editor Default Resources/Firebase -
Assets/ExternalDependencyManager -
Assets/Firebase -
Assets/Parse -
Assets/Plugins/iOS/Firebase
-
যদি Firebase প্যাকেজগুলি UPM দ্বারা পরিচালিত হয়, তাহলে নতুন SDK সংস্করণটি .tgz ফাইল হিসাবে ইম্পোর্ট করুন । এই ইম্পোর্টটি স্বয়ংক্রিয়ভাবে পূর্ববর্তী সংস্করণটিকে ওভাররাইট করবে।