объединить несколько приложений в одно приложение

Я разрабатываю приложение для Android, которое использует несколько сторонних приложений, вызываемых намерениями, например. сторонний календарь, веб-радио и т. д. Поэтому для правильного запуска этих намерений необходимо установить эти приложения. Можно ли включить эти apks в мое приложение, чтобы они также автоматически устанавливались при настройке моего приложения? Кажется, это довольно плохой способ позволить пользователю устанавливать эти приложения вручную...

Какие-либо предложения ?

Спасибо Питер


person michafn    schedule 12.03.2011    source источник


Ответы (1)


Можно ли включить эти apks в мое приложение, чтобы они также автоматически устанавливались при настройке моего приложения?

Это, вероятно, не очень хорошая идея.

Во-первых, это, вероятно, нарушение авторских прав, если у вас нет явного разрешения от этих разработчиков на сборку таким образом.

Затем возникает вопрос, действительно ли эти разработчики предоставили API, который, как они ожидают, вы будете использовать таким образом, и является ли этот API уникальным для них или является частью общей системы (например, ACTION_SEND). Пользователи должны иметь возможность устанавливать любые приложения, которые они хотят, которые выполняют общий запрос Intent (например, ACTION_SEND), и не должны быть вынуждены использовать какое-либо приложение, которое вы указываете. И вам не следует интегрироваться с приложениями, которые не предоставляют задокументированный и поддерживаемый API или иным образом не указывают, что они заинтересованы в такой интеграции.

Затем возникает вопрос, можно ли впоследствии обновлять эти приложения, если они изначально не были установлены через какую-либо стандартную службу распространения (например, Android Market).

Кроме того, все эти APK-файлы делают ваш собственный APK-файл намного больше, занимая гораздо больше места на устройстве.

Если вы можете пройти через все это, это должно быть возможно. Упакуйте APK как ресурсы, скопируйте их при первом запуске во внешнее хранилище, затем запустите ACTION_VIEW Intent для них через startActivity(), используя правильный тип MIME.

Однако, опять же, это, вероятно, не очень хорошая идея.

Кажется, это довольно плохой способ позволить пользователю устанавливать эти приложения вручную...

В идеале ваше приложение не должно зависеть от этих других приложений, поэтому не имеет большого значения, есть они у пользователя или нет. Вы можете определить, есть ли они там с помощью PackageManager и queryIntentActivities(), а затем использовать это, чтобы определить, хотите ли вы отключить части своего приложения или направить пользователя на установку дополнительных приложений и т. д.

person CommonsWare    schedule 12.03.2011
comment
Вот достойный вариант использования: допустим, мое приложение зависит от сканера штрих-кода ZXing (code.google.com/ p/zxing). Кажется, они поощряют зависимость других приложений от своих через намерения (code.google.com/p /zxing/wiki/ScanningViaIntent). Было бы неплохо связать сканер с моим приложением, особенно если я подозреваю, что у пользователя может не быть сетевого подключения при первом использовании. Как вы думаете, подходит ли это для объединения, несмотря на трудности, которые вы описываете? - person Jan Żankowski; 16.03.2011
comment
@Jan Zankowski: ИМХО, это прекрасный пример того, почему не объединять. Причина, по которой ZXing хочет интегрировать сканер штрих-кода через APK, заключается именно в том, что они могут обновлять приложение. Вот почему они потрудились предоставить вам интеграционный JAR с логикой автоматического обнаружения и поддержкой Market. Если вы категорически против того, чтобы пользователь сам устанавливал сканер штрих-кода, то, по крайней мере, интегрируйте ZXing непосредственно в свой собственный код, поскольку он имеет открытый исходный код, поэтому вы не тратите лишнее пространство. В конце концов, однако, может ли сканер штрих-кода поставляться так, как вы хотите, это вопрос к ZXing. - person CommonsWare; 16.03.2011
comment
У меня похожий случай. Я хочу избежать кодирования слишком большого количества общего кода на C#, поэтому я подумал о том, чтобы сделать часть кода на C#, а остальные — на JAVA, чтобы они общались друг с другом, используя намерения. Таким образом, имело бы смысл объединить два файла apk в один. - person slott; 22.06.2012