Публикация зависимости в Android market
-
25-10-2019 - |
Вопрос
Я работаю над приложением для Android для моей компании, которое подключается к видеоустройству Bluetooth.Сторонняя компания, с которой мы работаем, создала камеру Bluetooth и сервис (Android service), к которому подключается наше приложение и который мы используем для взаимодействия с камерой.Эта компания не хотела, чтобы у нас был доступ к исходному коду, поэтому они создали SDK в виде сервиса, который должен быть установлен на телефоне для взаимодействия с камерой.Если сервис (который представляет собой всего лишь APK-файл) не установлен, наше приложение не будет работать.
Однако мы можем обнаружить, что сервис не существует, а затем перейти к получению apk-файла, и теперь мы пытаемся найти наилучший способ сделать это.Возможно ли, чтобы мы попросили другую компанию опубликовать этот сервис в Android Market, даже если у него нет пользовательского интерфейса и при установке он, по-видимому, ничего не делает?Можете ли вы поместить что-то в Android Market и не показывать это под обычными фильтрами (это означает, что единственный способ добраться до этого - перейти непосредственно на страницу?).Я не думаю, что они хотят, чтобы люди устанавливали его, поскольку сторонняя компания продает свою собственную камеру (почти такую же, как та, которую они делают для нас), и у них есть приложения для нее на рынке.
Другая возможность заключается в том, что мы сами размещаем файл и загружаем его, когда пользователь впервые устанавливает приложение..Однако проблема в том, что мы должны разработать нашу собственную методологию обновления.
Есть ли у кого-нибудь опыт работы с этим или есть какие-либо идеи, как лучше всего справиться с нашей ситуацией?
Решение 2
В итоге я решил проблему, установив apk-файл службы в папку / assets моего приложения.Вы можете прочитать эти данные в виде входного потока и записать их на SD-карту, где затем сможете запустить намерение установить apk.Все, что нужно сделать пользователю, это нажать кнопку Установить (при условии, что у них разрешены сторонние приложения, что они и сделают, поскольку нашего приложения также нет на рынке.
public static final String SERVICE_APK_FILENAME = "SomeService.apk";
protected void installService() {
File apk = getServiceFileOnDisk();
if (!apk.exists()) {
try {
writeServiceToFile();
} catch (Exception ex) {
Log.e(TAG, "", ex);
return;
}
}
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.fromFile(getServiceFileOnDisk()),
"application/vnd.android.package-archive");
startActivityForResult(promptInstall, REQUEST_INSTALL_APK);
}
protected File getServiceFileOnDisk() {
return new File(Util.getAppStorageDirectory(this), SERVICE_APK_FILENAME);
}
protected void writeServiceToFile() throws IOException {
File apk = getServiceFileOnDisk();
InputStream assetIs = mAssetMgr.open(SERVICE_APK_FILENAME);
OutputStream out = new FileOutputStream(apk);
// Transfer bytes from in to out
byte[] buf = new byte[4 * 1024];
int len;
while ((len = assetIs.read(buf)) > 0) {
out.write(buf, 0, len);
}
assetIs.close();
out.close();
}
Итак, что происходит, когда приложение впервые запускается, я проверяю, нужно ли устанавливать (или обновлять) сервис..Этот код немного сложнее и выходит за рамки того, что я здесь делаю, поэтому я его не публиковал.Но если я определяю, что сервис необходимо установить, я запрашиваю у пользователя диалоговое окно, и если он нажимает "Ок", я затем вызываю метод installService, показанный выше.
Другие советы
Если вы оказались в такой ситуации, я бы рекомендовал разместить apk-файл на сервере вашей компании.