LINUX.ORG.RU

На Android стало храниться только одно QML-приложение.

 , , ,


1

1

В один прекрасный момент мобильник Huawei Honor 6 без моего согласия молча накатил обновления, снес все программы, и сбросил все настройки включая язык, страну, часовой пояс и т.п. В итоге сейчас стоит Android 6.0 с EMUI 4.0.1.

Вместе с этим изменилось поведение при USB-отладке QML-приложений. Если раньше приложение оставалось на телефоне, и разные QML-приложения имели отдельные значки с дефолтной иконкой «зеленый робот», то теперь на телефоне сохраняется только одно QML-приложение. То есть при запуске абсолютно другого QML-приложения в режиме USB, зачем-то удаляется предыдущее QML-приложение.

Я не могу понять, как с этим бороться. Мне нужно иметь на телефоне несколько QML-приложений, которые будут оставаться на нем и после отладки. Но QML-приложение просто «заменяется» последним отлаживаемым приложением.

Что делать-то, а? Куда копать?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Тип деплоя какой? Там их ЕМНИП три штуки. Если в виде apk, то не должно заменяться.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Тип деплоя какой? Там их ЕМНИП три штуки. Если в виде apk, то не должно заменяться.

Это где смотреть? В настройках проекта или в настройках среды?

В любом случае, ничего из них не менялось. Поменялся именно андроид.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от ncuxer

Может package name стал одинаковый для всех приложений?

Что имеешь в виду под package name?

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

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ситуация следующая. В стандартном шаблоне настройки приложения в файле build.gradle есть секция android, но нет секции defaultConfig и параметра applicationId.

В секцию android я добавил:

    defaultConfig {
        applicationId "ru.mysite.program.name"
    }


После этого на телефоне создалась вторая иконка приложения, и по ней запускается «новая версия» приложения. Причем, при деплое с телефона (Run), на телефон заливается новая версия, но автоматически запускается старая. То же самое с отладкой - запускаю отладку нового кода, а на телефоне запускается старый код.

Поэтому я удалил обе версии приложения с телефона, грохнул каталог сборки, все пересобрал, и имею два «но»:

1. Теперь перестал работать запуск при деплое (Run). То есть, приложение устанавливается, но не запускается.

2. Перестала работать отладка. То есть, приложение устанавливается, но не отлаживается. Видимо потому, что не может запуститься, как и в пункте 1.

Если приложение (собранное с applicationId) запускать со значка, то оно нормально запускается.


В общем, в Qt/QtCreator не предусмотрено изменение applicationId путем правки build.gradle. Возможно, можно будет изменить через AndroidManifest.xml, пока не разобрался.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

В общем, дело таки оказалось в новом Android 6.0.

Старые Андроиды позволяли устанавливать разные apk с одним и тем же идентификатором пакета, прописанным в файле AndroidManifest.xml:

<manifest package="org.qtproject.example" ...

И старые андроиды считали такие программы разными.

Android 6.0 считает такие пакеты одной и той же программой, поэтому при деплое удаляет предыдущий пакет и устанавливает новый.

Все QML-программы в дефолтном виде имеют одинаковый идентификатор пакета «org.qtproject.example», и поэтому в шестом Андроиде устанавливаются «поверх» предыдущего пакета.

Решение:

1. Создать в проекте шаблон настройки Android-приложения
2. В файле /корень_проекта/android/AndroidManifest.xml в узле manifest изменить атрибут package на уникальный идентификатор пакета (Внимание! В идентификаторе нельзя использовать символ тире "-").

После этого программа перестанет затирать другие программы, созданные и задеплоенные в QtCreator.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.