# Google Play Services के टकरावों का समाधान करना

विभिन्न फ्रेमवर्क के लिए अलग-अलग प्लगइन्स google-play-services लाइब्रेरी के विभिन्न संस्करणों का उपयोग कर सकते हैं, जिससे आपका प्रोजेक्ट संकलित होने में विफल हो सकता है या लाइब्रेरी संस्करण पुराना होने के कारण क्रैश हो सकता है।

निम्नलिखित अनुभाग विभिन्न प्लगइन्स के लिए समाधान प्रदान करते हैं।

## लाइब्रेरी का स्थान

आप Google Play Services लाइब्रेरी को `<Android SDK>/extras/google` पर पा सकते हैं।

लाइब्रेरी दो प्रारूपों में उपलब्ध है:

1.  **मोनोलिथिक जार फ़ाइल** (एक ही फ़ाइल में सभी Google Play Services घटक शामिल हैं):
    ```
    sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
    ```

2.  **मॉड्यूलर aar फ़ाइलें** (Android Archive), जहाँ प्रत्येक घटक एक अलग फ़ाइल में होता है:
    ```
    sdk/extras/google/m2repository/com/google/android/gms/…
    ```

एक **aar** फ़ाइल को **jar** फ़ाइल में बदला जा सकता है (फिलहाल सभी फ्रेमवर्क aar का समर्थन नहीं करते हैं) फ़ाइल को अनज़िप करके (aar एक ज़िप आर्काइव है) और **classes.jar** - लाइब्रेरी का कोड लेकर।

### 1. Cordova

Cordova पर सभी google play services टकराव gradle का उपयोग करके स्वचालित रूप से हल हो जाते हैं। कभी-कभी (उदाहरण के लिए, जब विभिन्न प्लगइन्स लाइब्रेरी के विभिन्न प्रमुख संस्करणों का उपयोग करते हैं) समाधान विफल हो सकता है और परिणामी बिल्ड में एक ही लाइब्रेरी के दो अलग-अलग संस्करण दिखाई दे सकते हैं।

### 2. 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)

### 3. 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 is not a valid native extension file.

निम्नलिखित चरणों का उपयोग करके एक्सटेंशन को फिर से पैकेज करें:

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
#rename platform.xml on iOS, required to repackage the extension
mv tmp/META-INF/ANE/iPhone-ARM/platform.xml tmp/META-INF/ANE/iPhone-ARM/platform-iOS.xml 

#pack the extension back with 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)

### 4. Unreal Engine

Unreal Engine और Pushwoosh प्लगइन लगभग हमेशा एक-दूसरे के साथ टकराव करेंगे। इसका कारण यह है कि Unreal Engine में डिफ़ॉल्ट रूप से Google Play services होती हैं, और इंजन के विभिन्न संस्करण इन libs के विभिन्न संस्करणों का उपयोग करते हैं। Pushwoosh प्लगइन भी इन libs का उपयोग करता है, हालांकि एक अलग सबसेट का। Unreal Engine के लिए Pushwoosh प्लगइन को एकीकृत करते समय हमेशा सावधान रहें। भले ही आपका प्रोजेक्ट संकलित होता और अच्छी तरह से काम करता हुआ प्रतीत हो, सुनिश्चित करें कि Pushwoosh और Unreal Engine दोनों Google Play Services के समान संस्करण का उपयोग करते हैं। एक प्रोजेक्ट में google-play-services के विभिन्न संस्करणों का उपयोग करने से अपरिभाषित व्यवहार होता है।

टकराव को हल करने के लिए आपको निम्नलिखित करना चाहिए:

**1.** निर्धारित करें कि प्रोजेक्ट में कौन सी 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 प्लगइन द्वारा जोड़ा गया

**2.** यदि Pushwoosh और Unreal Engine में उपयोग की जाने वाली play-services* लाइब्रेरी के संस्करण मेल नहीं खाते हैं, तो इन लाइब्रेरी को [Pushwoosh प्लगइन](https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/JavaLibs/pushwoosh-ue-plugin) से हटा दें।

**3.** निर्धारित करें कि आपको Pushwoosh प्लगइन में कौन सी अनुपलब्ध लाइब्रेरी जोड़नी चाहिए। प्लगइन को android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid लाइब्रेरी की आवश्यकता होती है। नमूना प्रोजेक्ट के लिए केवल **play-services-gcm** और **play-services-iid** ओवरलैप नहीं होते हैं, इसलिए इस विशेष मामले में केवल यही लाइब्रेरी जोड़ी जानी चाहिए।

**4.** Android 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) साझा करें।