Before debugging and running a work APP on your managed Android device from Qt Creator
- your device must be activated as Android for Work device
- your must have sent a release build to your Admin and this APP must be published to Google Play for Work
- you must have installed the work APP on your managed device
Deploy to Device
Build and deploy your APP as usual from Qt Creator to your (managed) Android device.
Hint: Deploying the APP from QtCreator the first time you’ll get this info:
YES will delete the installed work app and install your APP. If installing fails, then probably the APP is marked as ‘required’ – ask your admin to set the APP as ‘optional’ to be able to delete the APP.
If all works well, the APP (named PegelMeter) will appear twice on your device.
This is expected behavior – read more here – topic “Testing on managed profiles – tips and tricks“.
Run the work APP
Unfortunately you’ll notice that Qt Creator runs the private version of the APP and not the work version.
This is because Qt Creator doesn’t know that we want to run a work app. Private and Work apps are bound to the user.
Work User vs Private User (managed Android Device)
Default user is user 0, where the work user normally is user 10. You can list your users from Terminal:
adb shell pm list users
you’ll get something like this:
Users: UserInfo{0:1799924875:13} running UserInfo{10:141078676:30} running
User 0 –> default (private) user
User 10 –> work user
Run as Work App
You can run the APP from Terminal as Work APP:
adb shell am start --user 10 -n org.ekkescorner.xxx.pegelmeter.dev/org.qtproject.qt5.android.bindings.QtActivity
QtCreator starts the APP without –user which always will use the default one (0)
I’ll open a bug report and request to add a Variable USER_ID so this can be placed inside .pro and added to adb start command by Qt build process.
Starting the work APP from Terminal you’re loosing the log output inside QT Creator. Workaround could be to log from adb or to use an extra tool.
This will give you the logs using adb:
adb -d logcat libpegelMeter_x.so:D *:S
A special tool gives you some more comfort filtering the logs. For OSX I can recommend LogRabbit. It’s easy to filter out the logs from your APP.
External Tool
As we have seen, Build and Run the APP starts the private APP. So you have to stop and close the private APP and then start the work APP from Terminal.
To make this easier I added this to External Tools in Qt Creator:
I checked Output: Show in Pane – but nothing is printed. Probably I forgot something to tell External Tools that APP output should be visible in Application Output Pane. As long as this doesn’t work I’m using LogRabbit (see above)
External Tools ‘start_pegelmeter_work.sh’ executes this script:
#!/bin/sh cd <path-to->/platform-tools ./adb shell pm clear --user 0 org.ekkescorner.xxx.pegelmeter.dev ./adb shell am start --user 10 -n org.ekkescorner.xxx.pegelmeter.dev/org.qtproject.qt5.android.bindings.QtActivity
Now it’s easier:
- Build and Run APP
- ExternalTools – Kill running private APP and Start Work APP
I would like to use a variable for User Id and also for APP Name and APP Package. (see QTCREATORBUG-17863)
and here’s the request to add USER_ID to be placed inside .pro: QTCREATORBUG-17862