2015-06-12 9 views
13

मैं (कम से कम) अलग पैकेज के नाम होने दो जायके के साथ एप्लिकेशन को विकसित कर रहा हूँ। एप्लिकेशन फेसबुक साझा करने का उपयोग करता है, तो मैं प्रदाता प्रकट में घोषणा की है:एंड्रॉयड फेसबुक सामग्री प्रदाता अधिकार

<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}" 
      android:name="com.facebook.FacebookContentProvider" 
      android:exported="true"/> 

यह फेसबुक के निर्देशों के अनुसार किया जाता है: https://developers.facebook.com/docs/sharing/android

यह एक अनुप्रयोग के साथ ठीक काम करता है, लेकिन दूसरे एप्लिकेशन इंस्टॉल करने की कोशिश कर उसी डिवाइस पर INSTALL_FAILED_CONFLICTING_PROVIDER त्रुटि के साथ विफल रहता है। यह एकमात्र प्रदाता है जो मैनिफेस्ट में परिभाषित किया गया है, इसलिए मुझे पूरा यकीन है कि यह समस्या है। यदि मैं प्रदाता स्ट्रिंग को कुछ अलग होने के लिए बदलता हूं तो यह एक फेसबुक शेयर संवाद खोलने का प्रयास करते समय क्रैश हो जाता है।

मैंने देखा है का दावा है कि यह कई एंड्रॉयड क्षुधा में ही फेसबुक एप्लिकेशन का उपयोग करने के लिए संभव है, लेकिन इसके बारे में फेसबुक के दस्तावेज में कुछ भी नहीं मिल सकता है। क्या किसी ने यह किया है, और आप प्रदाता प्राधिकारी की समस्या के आसपास कैसे पहुंचे? धन्यवाद।

+0

में build.gradle

debug { applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' resValue "string", "fb_provider_id", "com.facebook.app.FacebookContentProvider{app_id_1}" } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' resValue "string", "fb_provider_id", "com.facebook.app.FacebookContentProvider{app_id_2}" } 

और उसके बाद प्रत्येक स्वाद एक अलग applicationId है, तो आप कुछ इस तरह कर सकता है: http: // stackoverflow .com/एक/30791242/1426565 और प्रकट में प्रदाता की घोषणा में सही applicationId इंजेक्षन, के बाद से $ (applicationId) वास्तव में पैकेज का नाम और न applicationId आप इस के लिए अंत में वापस पाने Gradle – Guardanis

+0

में परिभाषित रिटर्न - मैं जा रहा हूँ कोशिश करने के लिए, लेकिन ऐसा लगता है जैसे ही ऐप एक ही प्राधिकारी स्ट्रिंग के साथ समाप्त होता है, केवल ऐप के बजाय बिल्ड प्रक्रिया से ही। – nasch

+0

आपको बिल्ड-टाइम पर एप्लिकेशन आईडी के आधार पर अलग-अलग मानों को इंजेक्शन देना चाहिए। पिछले सप्ताह से वास्तव में मेरा जवाब यहां दिया गया है जो आपको ऐसा करने में मदद कर सकता है: http://stackoverflow.com/a/30791242/1426565 – Guardanis

उत्तर

8

मैं अपने डीबग और रिलीज स्वाद के लिए अलग-अलग मैनिफ़ेस्ट करके इसे हल करने में सक्षम था और मेरे डीबग स्वाद प्रकट में, मैंने प्रदाता के लिए स्निपेट जोड़ा लेकिन निर्यात किए गए मान को झूठी पर सेट किया। मेरे रिलीज स्वाद प्रकट में, मेरे पास निर्यात प्रदाता सेट के साथ मूल प्रदाता स्निपेट है।

बाद मैं ऐसा किया, मैं अब INSTALL_FAILED_CONFLICTING_PROVIDER त्रुटि मिली।

<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}" 
      android:name="com.facebook.FacebookContentProvider" 
      android:exported="false"/> 
+0

धन्यवाद, मैं देखूंगा कि मैं कोशिश कर सकता हूं या नहीं । – nasch

+0

@nasch तो क्या आपने इस मुद्दे को हल करने में सक्षम किया है कृपया एक संक्षिप्त उत्तर पोस्ट करें कि आपने इस मुद्दे को कैसे हल किया। एक बुद्धिमान समाधान नहीं देख रहे कई मेनिफेस्ट फाइलें बनाना। – Min2

+1

@ मिन 2 क्यों? एंड्रॉइड स्टूडियो बिल्डिंग समय पर एक ही फाइल में मैनिफ़ेस्ट को मर्ज करेगा। https://developer.android.com/tools/building/manifest-merge.html – nasch

2
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}" 
      android:name="com.facebook.FacebookContentProvider" 
      android:exported="false"/> 

निर्यात "सही" हो सकता है

6

संभव समाधान मैं पाया है में से एक यहां

http://gradlewhy.ghost.io/overcoming-install-failed-conflicting-provider/

मैं पहले से ही इस का उपयोग कर रहा (डिबग के लिए वर्णित एक है/रिलीज वेरिएंट) android.support.v4.content.FileProvider और जहां तक ​​मैंने परीक्षण किया है com.facebook.app.FacebookContentProvider के लिए भी काम करता है।

बस जोड़ने में क्षुधा AndroidManifest

<provider android:authorities="@string/fb_provider_id" 
     android:name="com.facebook.FacebookContentProvider" 
     android:exported="true"/> 
संबंधित मुद्दे