как разрешить другому приложению доступ к каталогу данных моего приложения?

Предположим, у меня есть приложение с именем A с этим каталогом данных: com.example.test. Теперь я хочу создать другое приложение с именем B для изменения чего-либо в com.example.test.

Конечно, я знаю, что у обоих должна быть одна и та же подпись. Но что еще мне нужно?

По сути, я пытаюсь разработать приложение, в которое пользователи смогут подключать новые компоненты. Любая идея?


person Joseph_Marzbani    schedule 26.11.2013    source источник


Ответы (3)


Я считаю, что наиболее безопасным подходом было бы использование Content Provider. . Затем, чтобы получить доступ к файлу в приложении A из приложения B, вы можете объявить ContentProvider в приложении A и переопределить _ 2_. Затем приложение B может получить доступ к файлу, расположенному в каталоге данных приложения A, через соответствующий uri, используя _ 3_. Для получения дополнительной информации см .:

http://www.grokkingandroid.com/handling-binary-data-with-contentproviders/

https://stackoverflow.com/a/4336013/1482726

person Angelo    schedule 26.11.2013

Оба приложения должны указать в манифесте один и тот же идентификатор пользователя:

android: sharedUserId

Имя идентификатора пользователя Linux, который будет использоваться другими приложениями. По умолчанию Android назначает каждому приложению свой уникальный идентификатор пользователя. Однако, если для этого атрибута установлено одинаковое значение для двух или более приложений, все они будут иметь один и тот же идентификатор - при условии, что они также подписаны одним и тем же сертификатом. Приложения с одним и тем же идентификатором пользователя могут получать доступ к данным друг друга и, при желании, работать в одном процессе.

Отказ от ответственности: я никогда не делал этого сам, но согласно документации должно работать.

person Henry    schedule 26.11.2013
comment
Я использовал sharedUserId для приложения, с которым работал. Когда я использовал одну и ту же библиотеку проектов Android для ссылки в каждом приложении, я получал недопустимые исключения ClassCastExceptions. Я разместил вопрос для обходного пути. До сих пор я не нашел никакого обходного пути, кроме отказа от использования одного и того же идентификатора пользователя. - person Angelo; 26.11.2013

вы можете получить контекст другого приложения, используя Context.createPackageContent () и используя CONTEXT_RESTRICTED, тогда вы можете использовать openFileOutput только с именем файла. добавьте это в AndroidManifest.xml: - с помощью protectionLevel = "signature" только приложения, подписанные вами, могут получить доступ к вашему поставщику контента и, следовательно, к вашим файлам. и в обоих приложениях AndroidManifest.xml напишите следующее: -

person Amaresh Kumar    schedule 26.11.2013