10

Tôi đang gặp phải sự cố lạ với studio android. Tôi có hai ứng dụng Android sử dụng facebook sdk với cùng một ứng dụng facebook để đăng nhập và chia sẻ hình ảnh. Với api mới, đó là cần thiết để khai báo bên trong manifest này:Android studio: INSTALL_FAILED_CONFLICTING_PROVIDER facebook sdk

<provider android:authorities="com.facebook.app.FacebookContentProvider[app_id]" 
     android:name="com.facebook.FacebookContentProvider" 
     android:exported="true"/> 

Bây giờ nếu một trong những ứng dụng đã được cài đặt trên thiết bị và tôi cố gắng để cài đặt một giây, tôi có được lỗi này trên Android studio:

INSTALL_FAILED_CONFLICTING_PROVIDER 

Đó là vấn đề cần thiết của nhà cung cấp facebook, đó là chỉ yếu tố bên trong ứng dụng của tôi. Vì vậy, theo cách này, hai ứng dụng của tôi không thể được cài đặt cùng một lúc trên cùng một thiết bị? Tôi muốn nếu có cách để sử dụng cùng một nhà cung cấp và tránh lỗi đó.

+1

Bạn nên có để tạo một ứng dụng khác trong bảng điều khiển dành cho nhà phát triển Facebook và gán id ứng dụng khác cho ứng dụng của bạn và tích hợp nó với mục nhập nhà cung cấp tệp kê khai của bạn và bạn có thể làm điều đó. –

+2

Hai ứng dụng thuộc cùng một ứng dụng Facebook. Bạn không thể tạo hai ứng dụng riêng biệt – giozh

+0

Bạn đã bao giờ tìm cách giải quyết vấn đề này chưa? Đã suy nghĩ nếu nó có thể vô hiệu hóa 'ContentProvider' trong phiên bản' Debug'. Vẫn đang nghiên cứu vấn đề. Tất nhiên điều này sẽ vô hiệu hóa khả năng chia sẻ cho phiên bản đó. –

Trả lời

4

Vì vậy, theo cách này, hai ứng dụng của tôi không thể được cài đặt cùng một lúc trên cùng một thiết bị?

Đúng.

Tôi muốn nếu có cách để sử dụng cùng một nhà cung cấp và tránh lỗi đó.

Sau đây không liên quan gì đến SDK của Facebook, nhưng chỉ giao dịch với Android và giới hạn của nó. SDK của Facebook có thể áp đặt các giới hạn mới và thú vị.

Về lý thuyết, bạn có thể nói rằng ứng dụng A có số <provider> và ứng dụng B sử dụng nhà cung cấp từ ứng dụng A. Điều này ngụ ý rằng ứng dụng B không thể tự sử dụng được. Khi người dùng chạy ứng dụng, bạn sẽ phải kiểm tra xem ứng dụng A đã được cài đặt chưa và buộc người dùng cài đặt ứng dụng để có thể sử dụng ứng dụng B. Điều này có thể gây ra một số lượng người dùng angst. Nếu bạn muốn cả hai ứng dụng A và ứng dụng B có thể sử dụng riêng lẻ, điều đó là tốt, nhưng sau đó cả hai sẽ phải có <provider> và sau đó cả hai đều không thể được cài đặt cùng một lúc.

Lý tưởng nhất là bạn sẽ giải quyết vấn đề này bằng cách tắt cả hai yếu tố <provider> ngay lúc đầu. Sau đó, bất cứ ai chạy đầu tiên sẽ tự chọn là người cung cấp nhà cung cấp cho thiết bị đó, tại thời điểm đó nó sẽ cho phép các nhà cung cấp. Than ôi, do an Android bug/limitation, điều này sẽ không giải quyết được sự cố vì bạn sẽ không thể cài đặt cả hai cùng một lúc.

Tôi có xu hướng đồng ý với nhận xét của Rajan Bhavsar. Bạn cần phải có một ứng dụng Android cho một ID ứng dụng Facebook của mình hoặc bạn cần hai ID ứng dụng Facebook cho ID ứng dụng Facebook cho hai ứng dụng Android của bạn.

+0

Đó là một tình huống cụ thể, trong đó hai ứng dụng dành cho hai loại người dùng khác nhau (một ứng dụng làm một tập hợp con của hoạt động khác), nhưng không bao giờ xảy ra rằng người dùng có thể cài đặt cả hai ứng dụng cùng một lúc trên cùng một thiết bị. Nó chỉ gây phiền nhiễu trong giai đoạn thử nghiệm trên thiết bị phisical (tôi cần phải gỡ bỏ cài đặt một ứng dụng nếu tôi sẽ thử một khác). – giozh

+0

@giozh: Cách tiếp cận hiện tại của bạn có lẽ là câu trả lời hay nhất của bạn. Bạn có thể xem xét việc viết cho mình một nhiệm vụ Gradle để gỡ cài đặt ứng dụng khác và cài đặt ứng dụng bạn đang cố gắng làm việc, mà bạn có thể gọi để chuyển đổi nhanh chóng giữa chúng. Hoặc, sử dụng hai thiết bị vật lý. Và, đối với tất cả những gì tôi biết, Facebook có một số giải pháp khác cho vấn đề này, cụ thể cho cách họ yêu cầu những 'quyền hạn' được thiết lập. – CommonsWare

+0

câu trả lời tuyệt vời .... nó hoạt động – sonida

-1

Vì vậy, bạn có thể thay đổi tên nhà cung cấp từ một trong các ứng dụng của mình. Sử dụng tên Ứng dụng Inst ed của App_id.

+0

ID ứng dụng là id được cung cấp từ bảng điều khiển dành cho nhà phát triển facebook và phải khớp với id đã cho. –

16

Đây là một câu hỏi cũ mà tôi biết, nhưng không có câu trả lời rõ ràng cho điều này mà tôi có thể tìm thấy. Nghĩ rằng tôi đã đăng bài như thế nào tôi đã làm nó.

Bạn không thể có hai ứng dụng khác nhau (hoặc cùng một ứng dụng sử dụng hai id ứng dụng khác nhau) sử dụng cùng một Id ứng dụng Facebook. Điều này phá vỡ các nội dung ContentProvider. Bạn cần tạo ứng dụng thử nghiệm trong ứng dụng chính của mình trên khu vực dành cho nhà phát triển Facebook.Sau đó lấy ID ứng dụng mới từ đó và giữ nó tiện dụng.

Tiếp theo, trong build.gradle của bạn, thêm (hoặc nối thêm) mục nhập sau vào khối mặc địnhConfig của bạn.

manifestPlaceholders = [ facebook_app_id:"" ] 

Sau đó, trong debug cấu hình của bạn thêm:

manifestPlaceholders = [ facebook_app_id:"<the_debug_app_id_you_kept_handy>"] 

Sau đó, trong cấu hình phát hành của bạn thêm:

manifestPlaceholders = [ facebook_app_id:"<the_original_app_id_you_had>" ] 

Bây giờ, thay đổi AndroidManifest.xml của bạn. Thay đổi:

<provider android:authorities="com.facebook.app.FacebookContentProvider<original_app_id>" 

tới:

<provider android:authorities="com.facebook.app.FacebookContentProvider${facebook_app_id}" 

và thay đổi:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="<original_app_id>"/> 

tới:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebook_app_id}"/> 

Điều đó sẽ làm điều đó. Những gì bạn đã làm là thêm trình giữ chỗ vào tệp kê khai. Về cơ bản nó là một biến, sau đó bạn có thể thiết lập của bạn gradle xây dựng để cư giá trị của nó với những thứ khác nhau dựa trên các loại xây dựng hoặc hương vị.

+0

Cảm ơn đã giúp tôi giải quyết vấn đề của mình về ứng dụng với các ứng dụng khác nhauId – Dokuzov

+0

Cảm ơn bạn đã giải pháp. Bạn đã tiết kiệm khá nhiều thời gian. –

Các vấn đề liên quan