# Google Play Services কনফ্লিক্ট সমাধান করা

বিভিন্ন ফ্রেমওয়ার্কের জন্য বিভিন্ন প্লাগইন google-play-services লাইব্রেরির বিভিন্ন সংস্করণ ব্যবহার করতে পারে, যার ফলে লাইব্রেরির সংস্করণ পুরনো হওয়ায় আপনার প্রজেক্ট কম্পাইল করতে ব্যর্থ হতে পারে বা ক্র্যাশ করতে পারে।

নিম্নলিখিত বিভাগগুলিতে বিভিন্ন প্লাগইনের জন্য সমাধান প্রদান করা হয়েছে।

## লাইব্রেরির অবস্থান

আপনি Google Play Services লাইব্রেরিটি `<Android SDK>/extras/google`-এ খুঁজে পেতে পারেন।

লাইব্রেরিটি দুটি ফরম্যাটে উপলব্ধ:

1.  **মনোলিথিক jar ফাইল** (একটি ফাইলে সমস্ত Google Play Services কম্পোনেন্ট থাকে):
    ```
    sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
    ```

2.  **মডুলার aar ফাইল** (অ্যান্ড্রয়েড আর্কাইভ), যেখানে প্রতিটি কম্পোনেন্ট একটি আলাদা ফাইলে থাকে:
    ```
    sdk/extras/google/m2repository/com/google/android/gms/…
    ```

একটি **aar** ফাইলকে একটি **jar** ফাইলে পরিণত করা যেতে পারে (সব ফ্রেমওয়ার্ক এই মুহূর্তে aar সমর্থন করে না) ফাইলটি আনজিপ করে (aar একটি জিপ আর্কাইভ) এবং **classes.jar** - লাইব্রেরির কোডটি নিয়ে।

### ১. Cordova

Cordova-তে সমস্ত google play services কনফ্লিক্ট gradle ব্যবহার করে স্বয়ংক্রিয়ভাবে সমাধান করা হয়। কখনও কখনও (যেমন, বিভিন্ন প্লাগইন লাইব্রেরির বিভিন্ন প্রধান সংস্করণ ব্যবহার করলে) সমাধান ব্যর্থ হতে পারে এবং ফলস্বরূপ বিল্ডে একই লাইব্রেরির দুটি ভিন্ন সংস্করণ দেখা যেতে পারে।

### ২. Unity, Appcelerator Titanium

আপনি প্লাগইন (বা স্যাম্পল প্রজেক্ট) এর মধ্যে Google Play Services লাইব্রেরি খুঁজে পেতে পারেন। সম্ভাব্য কনফ্লিক্ট সমাধান করার জন্য এগুলো আপডেট/পরিবর্তন/অপসারণ করা সহজ:

*   Unity: [https://github.com/Pushwoosh/pushwoosh-unity/tree/master/PushwooshUnitySample/Assets/Plugins/Android](https://github.com/Pushwoosh/pushwoosh-unity/tree/master/PushwooshUnitySample/Assets/Plugins/Android)
*   Unity এবং Google Analytics প্লাগইন: Google analytics প্লাগইন একটি পুরনো google play লাইব্রেরি ব্যবহার করে, যা আপডেট করা প্রয়োজন। আরও তথ্য এখানে: [https://github.com/Pushwoosh/pushwoosh-unity/issues/5](https://github.com/Pushwoosh/pushwoosh-unity/issues/5)

```bash
rm -rf Assets/Plugins/Android/google-play-services_lib/libs
rm -rf Assets/Plugins/Android/google-play-services_lib/res
cp ${ANDROID_HOME}/extras/google/m2repository/com/google/android/gms/play-services-analytics/8.4.0/play-services-analytics-8.4.0.aar Assets/Plugins/Android/
cp ${ANDROID_HOME}/extras/google/m2repository/com/google/android/gms/play-services-ads/8.4.0/play-services-ads-8.4.0.aar Assets/Plugins/Android/
```

*   Appcelerator Titanium (লক্ষ্য করুন যে মডিউলের সংস্করণ এই ডকুমেন্টের চেয়ে দ্রুত পরিবর্তন হতে পারে!): [https://github.com/Pushwoosh/pushwoosh-appcelerator-titanium/tree/master/Module-Source/android/src/com/pushwoosh/module](https://github.com/Pushwoosh/pushwoosh-appcelerator-titanium/tree/master/Module-Source/android/src/com/pushwoosh/module)

### ৩. Adobe Air

ANE এক্সটেনশনটি নিন, এটি এক্সট্র্যাক্ট করুন, পরিবর্তন করুন এবং পুনরায় প্যাকেজ করুন।

**PushNotification.ane** দিয়ে নিম্নলিখিত উদাহরণটি ব্যবহার করুন:

```bash
unzip PushNotification.ane -d tmp
```

এই কমান্ডটি .ane ফাইলের বিষয়বস্তু `tmp` ডিরেক্টরিতে এক্সট্র্যাক্ট করে।

এখন _tmp/META-INF/ANE/Android-ARM/_ এবং _tmp/META-INF/ANE/Android-x86/_ ডিরেক্টরিতে আপনি সমস্ত লাইব্রেরি খুঁজে পাবেন: android-support_, play-services_, যা পরিবর্তন/আপডেট/অপসারণ করা যেতে পারে।

আপনি যদি উপরের ডকুমেন্টের লিঙ্কটি অনুসরণ করেন, তাহলে `tmp/META-INF/ANE/Android-ARM/platform.xml` এবং `tmp/META-INF/ANE/Android-x86/platform.xml` পরিবর্তন করুন, তারপর এক্সটেনশনটি আবার জিপ করুন এবং সবকিছু স্বাভাবিকভাবে কাজ করা উচিত।

যদি আপনি এই ত্রুটিটি পান:

> PushNotification.ane একটি বৈধ নেটিভ এক্সটেনশন ফাইল নয়।

নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে এক্সটেনশনটি পুনরায় প্যাকেজ করুন:

1.  `tmp/META-INF/ANE/Android-ARM/platform.xml` এবং `tmp/META-INF/ANE/Android-x86/platform.xml` ডিলিট করুন
2.  পরিবর্তে উপরের লিঙ্কের গাইড অনুযায়ী `tmp/META-INF/ANE/Android-ARM/android-depends.xml` এবং `tmp/META-INF/ANE/Android-x86/android-depends.xml` পরিবর্তন করুন
3.  নিম্নলিখিত bash কমান্ডগুলি চালান:

```bash
#iOS-এ platform.xml এর নাম পরিবর্তন করুন, এক্সটেনশনটি পুনরায় প্যাকেজ করার জন্য এটি প্রয়োজন
mv tmp/META-INF/ANE/iPhone-ARM/platform.xml tmp/META-INF/ANE/iPhone-ARM/platform-iOS.xml 

#adt দিয়ে এক্সটেনশনটি আবার প্যাক করুন
cd tmp/META-INF/ANE/
“${flex.sdk}/bin/adt" -package -target ane PushNotification.ane extension.xml -swc ../../../../SWC-Pushwoosh/PushNotification.swc -platform iPhone-ARM -platformoptions iPhone-ARM/platform-iOS.xml -C iPhone-ARM/ . -platform Android-ARM -platformoptions Android-ARM/android-depends.xml -C Android-ARM/ . -platform Android-x86 -C Android-x86/ . -platformoptions Android-x86/android-depends.xml -platform default -C default/ .
```

আপনি PushNotification.swc এখানে খুঁজে পেতে পারেন: [https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc](https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc)

### ৪. Unreal Engine

Unreal Engine এবং Pushwoosh Plugin প্রায় সবসময় একে অপরের সাথে কনফ্লিক্ট করবে। এর কারণ হল Unreal Engine ডিফল্টভাবে Google Play services ধারণ করে, এবং Engine-এর বিভিন্ন সংস্করণ এই লাইব্রেরিগুলির বিভিন্ন সংস্করণ ব্যবহার করে। Pushwoosh প্লাগইনও এই লাইব্রেরিগুলি ব্যবহার করে, তবে একটি ভিন্ন সাবসেট। Unreal Engine-এর জন্য Pushwoosh Plugin ইন্টিগ্রেট করার সময় সর্বদা সতর্ক থাকুন। এমনকি যদি আপনার প্রজেক্টটি কম্পাইল এবং ভালোভাবে কাজ করছে বলে মনে হয়, তবুও নিশ্চিত করুন যে Pushwoosh এবং Unreal Engine উভয়ই Google Play Services-এর একই সংস্করণ ব্যবহার করছে। একটি প্রজেক্টে google-play-services-এর বিভিন্ন সংস্করণ ব্যবহার করলে অনির্ধারিত আচরণ হতে পারে।

একটি কনফ্লিক্ট সমাধান করার জন্য আপনার নিম্নলিখিত কাজগুলি করা উচিত:

**১.** একটি প্রজেক্টে কোন Google Play services লাইব্রেরিগুলি ইতিমধ্যে ব্যবহৃত হচ্ছে তা নির্ধারণ করুন। `${UNREAL_PROJECT}/Intermediate/Android/APK/JavaLibs` এবং `${UNREAL_PROJECT}/Intermediate/Android/APK/libs` ডিরেক্টরিগুলি পরীক্ষা করুন। উদাহরণস্বরূপ, Unreal Engine 4.15 ব্যবহার করে তৈরি করা [স্যাম্পল প্রজেক্টে](https://github.com/Pushwoosh/pushwoosh-unreal-engine) নিম্নলিখিত লাইব্রেরিগুলি রয়েছে:

JavaLibs:

*   downloader_library
*   play-services-ads-lite-9.2.0
*   play-services-auth-base-9.2.0
*   play-services-basement-9.2.0
*   play-services-drive-9.2.0
*   play-services-gass-9.2.0
*   play-services-plus-9.2.0
*   support-v4-23.0.0
*   play-services-ads-9.2.0
*   play-services-auth-9.2.0
*   play-services-base-9.2.0
*   play-services-clearcut-9.2.0
*   play-services-games-9.2.0
*   play-services-nearby-9.2.0
*   play-services-tasks-9.2.0
*   pushwoosh-ue-plugin // Pushwoosh প্লাগইন দ্বারা যোগ করা হয়েছে

libs:

*   SystemUtils.jar
*   VrApi.jar
*   play-services-gcm-9.2.0.jar // Pushwoosh প্লাগইন দ্বারা যোগ করা হয়েছে
*   play-services-iid-9.2.0.jar // Pushwoosh প্লাগইন দ্বারা যোগ করা হয়েছে

**২.** যদি Pushwoosh এবং Unreal Engine-এ ব্যবহৃত play-services* লাইব্রেরিগুলির সংস্করণ না মেলে, তাহলে এই লাইব্রেরিগুলি [Pushwoosh প্লাগইন](https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/JavaLibs/pushwoosh-ue-plugin) থেকে সরিয়ে ফেলুন।

**৩.** Pushwoosh প্লাগইনে কোন অনুপস্থিত লাইব্রেরিগুলি যোগ করতে হবে তা নির্ধারণ করুন। প্লাগইনটির জন্য android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid লাইব্রেরি প্রয়োজন। স্যাম্পল প্রজেক্টের জন্য শুধুমাত্র **play-services-gcm** এবং **play-services-iid** ওভারল্যাপ করে না, তাই এই নির্দিষ্ট ক্ষেত্রে শুধুমাত্র এই লাইব্রেরিগুলি যোগ করা উচিত।

**৪.** অ্যান্ড্রয়েড SDK থেকে .jar ফাইলটি [https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs](https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs)-এ রেখে লাইব্রেরিটি যোগ করুন। Google Play লাইব্রেরির অবস্থান এই নিবন্ধের শুরুতে বর্ণনা করা হয়েছে।

## আমাদের সাথে আপনার মতামত শেয়ার করুন

আপনার মতামত আমাদের একটি উন্নত অভিজ্ঞতা তৈরি করতে সাহায্য করে। SDK ইন্টিগ্রেশন প্রক্রিয়ার সময় যদি আপনি কোনো অসুবিধার সম্মুখীন হন, তাহলে [এই ফর্মের মাধ্যমে](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform) আমাদের সাথে আপনার চিন্তাভাবনা শেয়ার করুন।