2014-01-24 3 views
0

Я пытаюсь выполнить white label мое приложение, изменив свой проект приложений Android в проект библиотеки Android, а затем импортирую библиотеку в новый проект приложений для Android.Белая маркировка с ContentProvider

У меня возникла проблема с тем, что мое приложение (читайте: Проект библиотеки) содержит ContentProvider.

При попытке установить мой новый проект Android приложений на эмуляторе, консоль говорит мне:

[2014-01-24 13:35:39 - WhitelabelTest] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 
[2014-01-24 13:35:39 - WhitelabelTest] Please check logcat output for more details. 
[2014-01-24 13:35:39 - WhitelabelTest] Launch canceled! 

Согласно LogCat:

01-24 13:38:52.217: W/PackageManager(58): Can't install because provider name com.myapp.app.db.providers.MyProvider (in package com.example.whitelabeltest) is already used by com.myapp.app 
01-24 13:38:52.227: W/PackageManager(58): Package couldn't be installed in /data/app/com.example.whitelabeltest-2.apk 

делает это просто означает, что вы не можете иметь оба приложения установленных на одном устройстве, потому что они используют один и тот же ContentProvider? Или есть способ обойти это? Нужно ли мне создавать новый ContentProvider в новом Android-проекте с новым именем?

Вот Provider, как указано в манифесте моего WhitelabelTest проекта:

<provider 
      android:name="com.myapp.app.db.providers.MessagesProvider" 
      android:authorities="com.myapp.app.db.providers.MessagesProvider" 
      android:exported="false" /> 

Я попытался изменить параметр имени с тем же результатом.

ответ

1

Означает ли это, что вы не можете установить оба приложения на одном устройстве, потому что они используют один и тот же ContentProvider?

Вы не можете иметь оба приложения, установленные на том же устройстве, потому что они оба пытаются объявить ту же власть (в android:authorities) в <provider>. Для данного органа может быть только один провайдер.

Это похоже на то, как вы не можете установить два приложения с тем же package.

Нужно ли создавать новый ContentProvider в новом Android-проекте вместо нового имени?

Я бы начал с рассмотрения необходимости использования ContentProvider и, возможно, его сбросить, если это не так.

В противном случае реализация проекта ContentProvider может быть распространена из проекта библиотеки. Тем не менее, android:authorities должен быть уникальным, и поэтому любые клиенты этого ContentProvider должны знать правильные полномочия для доступа к правильному провайдеру.

+0

Я собираюсь вырвать материал ContentProvider. У меня есть вопрос. Лучше ли создавать и закрывать мои 'SQLiteDatabaseHelper' и' SQLiteDatabase' в 'onResume'' '' '' '' '' '' '' '' '' '' '' '' '' '' Деям'? Или я должен делать это по мере необходимости? – Andrew

+0

В том же духе, мне даже нужно сохранить переменную-член 'SQLiteDatabase' в моей деятельности? Или 'mHelper.getWritableDatabase()' достаточно легкий, что мне нужно только создать экземпляр 'SQLiteDatabaseHelper'? – Andrew

+0

@AndrewL «Это лучше ...» - если вы будете обращаться к базе данных по нескольким потокам или нескольким компонентам, ваш SQLiteOpenHelper должен быть синглом, который живет в процессе вашего процесса. «Или mHelper.getWritableDatabase() достаточно легкий, что мне нужно только создать экземпляр SQLiteDatabaseHelper?"- yes,' getReadableDatabase() '/' getWritableDatabase() 'дешево, за исключением того, что вы впервые открываете их * и * нужно вызвать' onCreate() 'или' onUpgrade() 'вашего помощника. Вот почему вам нужно использовать эти методы в фоновом потоке вместе с остальной частью вашего ввода-вывода. – CommonsWare

Смежные вопросы