Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как правильно запускать программу из Delphi на Android?


x11

Вопрос

Для Windows всё и так давно понятно - зупустил, работает. Никаких установок и delpoy выполнять не требуется. Винда/среда не даст запустить второй раз программу, если она уже запущена (по этому пути).

 

А вот для Андроида всё сложнее. Например, в настройках deployment есть колонка Overwrite. и везде, у всех строк - Always.

И тут проблема в том, что overwrite (перезапись) не работает. Т.е. я в базу добавил поле, запускаю на устройстве аппликацию и получаю ошибку, т.к. оказывается, что на устройство новый файл sqlite базы не попал. Странность в том, что когда я запускаю приложение из среды по F9, то я вижу, что и Deploy выполняется и в строке проскакивает имя базы. Так выполняется или не выполняется?

Т.е. какие вообще приготовления нужно сделать, чтобы на устройство попало всё, что в deploy?

И нужно ли предварительно выполнять полное удаление с очисткой данных на устройстве? Т.к., как я уже выше описал, файл могут не заменятся.

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

Какие ещё могут быть тонкости/нюансы?

Спасибо.

Screenshot_1.png

Изменено пользователем x11
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

На устройство попадает все, что указано в deployment. Но, при развертывании новой версии приложения, без разницы, через adb или маркет, эти файли не перезаписываются, только разворачиваются новые. Что вполне логично и являеися нормальным поведением системы. 

Винда даст запустить сколько угодно копий приложения, если это руками не ограничить. Из студии тоже получится, если не пересобирать заново.

Если нужно обновить имеющиеся ресурсы, смотрите в сторону System. StartupCopy, он за это отвечает, ну или используйте AssetManager.

Так же приложение можно не удалять полностью, а в настройках "стереть данные" перед запуском

Но для работы с БД, лучше сразу продумать логику ее обновления в коде. Если данные в базе не важны для пользователя, то возможно, лучшим вариантом будет создавать БД программно. Если данные нужны, проверять версию БД и в коде ее обновлять. Откуда брать обновление-вам решать, или с сервера, или из ресурсов, или из assets выдергивать.

Ссылка на комментарий
  • 0
3 минуты назад, mazayhin сказал:

Винда даст запустить сколько угодно копий приложения, если это руками не ограничить. Из студии тоже получится, если не пересобирать заново.

Нет, Среда ругается и пишет, что приложение уже запущено :). С Виндой у меня опыта побольше.

Ссылка на комментарий
  • 0
4 минуты назад, mazayhin сказал:

Так же приложение можно не удалять полностью, а в настройках "стереть данные" перед запуском

И исполняемые so-библиотеки перезапишутся и уже новые запустятся?

 

а как же:

5 минут назад, mazayhin сказал:

файли не перезаписываются

?

Ссылка на комментарий
  • 0
14 минуты назад, x11 сказал:

Нет, Среда ругается и пишет, что приложение уже запущено :). С Виндой у меня опыта побольше.

Ну правильно, если студия хочет при запуске открыть на чтение, то не запустится. Если не пересобирать (build) то все запустится.

13 минуты назад, x11 сказал:

И исполняемые so-библиотеки перезапишутся и уже новые запустятся?

 

а как же:

?

Библиотеки самого приложения и сервисов, если есть, перезапишутся точно. Иначе тогда не получалось бы делать обновление. На счет подключенных, сейчас не скажу, у нас в проектах используются сторонние so, надо будет посмотреть.

Если в настройках сделать сброс, то развернутые из ассетов фалы удалятся, и при следующем запуске приложения, развернутся вновь. Так же потрет все, что приложение разместило по пути TPath.GetDocumentsPath.

Если сделать сброс, то удалятся как раз те 2,07 мб, которые записал мне убер

 

 

Screenshot_2018-02-10-18-33-38.png

Ссылка на комментарий
  • 0

Чтобы узнать, есть ли файл базы на телефоне и какой он, нужно:

0. Получить ROOT-доступ, если база хранится в системной папке приложения

1. Узнать точное местоположение файла и найти его по этому адресу. Все пути перечислены в справке. Для их получения вызовите справку TPath.GetHomePath

Файл мог попасть не в ту папку, если указан неправильный Remote Path в Deployment или не указан вовсе. К примеру, я храню большинство данных своего приложения в TPath.GetHomePath, поэтому для всех в Deployment пишу assets/internal. Есть другие пути и Remote Path для каждого из них. Вам следует проверить этот пункт. Подробнее на developer.android.com 

Ссылка на комментарий
  • 0
19 минут назад, МихаилЪ чайковЪ сказал:

Файл мог попасть не в ту папку

я это перепроверял, файл базы ложиться в ".\assets\internal\db" и доступен  в коде так:

UniConnection1.Database := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'db' + PathDelim + 'base.sqlite';

 

Изменено пользователем x11
Ссылка на комментарий
  • 0
20 минут назад, x11 сказал:

я это перепроверял, файл базы ложиться в ".\assets\internal\db" и доступен  в коде так:


UniConnection1.Database := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'db' + PathDelim + 'CallerId.sqlite';

 

Тогда 100% файл должен был попасть на устройство. И да, каждый раз он перезаписывается, если не менять настроек. Root я предлагал как способ узнать папку.

Может быть я не понял вопрос

Ссылка на комментарий
  • 0

Где физически на устройстве находится файл нам знать и не надо, а для работы со своей и общими папками никакой root не нужен.

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

В функции CopyAssetToFile даже специально комментарий оставлен в месте, где идет проверка наличия файла на устройстве.

х11, делайте обновление своей базы в коде, при запуске, а не перезаписывайте ее пустой (прямо представил, как при обновлении того же вайбера затирается вся переписка, прямо прелесть)

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...