Marshmallow Upgrade

General update information

As well as reading this document we also recommend reading the Android 6 FAQ page.

As of our 17.6 release TomTom Bridge will run Android 6.0.1 instead of 4.3. From build 16.4 onwards it is possible to directly upgrade to our Android 6 release. The update can be found on the releases page.

For software versions older than 16.4 we recommend first upgrading the software version to at least 16.4 before continuing with the Android update in 17.6 or later.

Unless a device is running build 17.4 or later it will be necessary to upgrade the map as well as the software since Bridge has moved to the NDS map standard instead TomTom Classic maps from the 17.4 release onwards.

With this new configuration, the available RAM for 3rd party applications is approximately 200Mb (on devices with 1GB RAM).

It is important to note that once the upgrade to Android 6 has been done a device cannot be downgraded to 4.3. For that reason it is highly advisable to test all your applications thoroughly before rolling out the update.

Application external storage write access

On Jellybean applications could not access external storage by default. We supplied a package called write-external-media_2.0_all.ttpkg which, when installed, allowed write access to SD card for apps.

Marshmallow allows apps to read/write from/to micro SD card by default, but only in the apps specific application directory. This is much more secure than Jellybean as different apps cannot access each other’s files.

This means that an app that works on Jellybean and uses /storage/sdcard1 with the _ write-external-media_2.0_all.ttpkg_ package installed won't work on Marshmallow, and if you update an app to work on Marshmallow then it will no longer work on Jellybean. Note that because apps on M can only write to their specified directory, if you update an app to work in Marshmallow, this will result in data being written to different directories on the SD card than in Jellybean. Data should be moved to an application specific directory before the update and the update should be tested.

The method used on Marshmallow is getExternalFilesDirs.

An example of how your code might look if you need an app to work on both M and JB:

1if (platform == JB):
2 write("/storage/sdcard1")
3else:
4 write(getExternalFilesDirs(null)[1])

Run time permissions for apps on Marshmallow

From Android 6 application permissions no longer get applied during installation, rather when the application is run. The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. (Normal permissions are accepted automatically). The user can grant or deny each permission, and the app should continue to run with limited capabilities even if the user denies a permission request. In some circumstances, you might want to help the user understand why your app needs a particular permission and explain the problems they may face if they deny access. See the Android documentation for Requesting Permissions at Run Time for more details.

Restoring Android settings

Android settings backed up from Jellybean cannot be restored on Marshmallow or vice versa. Attempting to apply settings from a different Android version will show "Settings update failed – The settings could not be applied" error.

Update from USB connected mass storage device

Currently support for USB mass storage is not implemented. This is planned for a future release. In the meantime it is worth noting that if USB mass storage is used as an update method this will no longer work after upgrading to the current Android 6 release.

Changes in widgets sizes which are beyond our control

During implementation of Android 6 we realised that some Android widgets (for example, email) changed in size from JellyBean to Marshmallow. This means that, keeping the email example, a widget which used to fit in a 1x2 slot now requires 2x2. This needs to be tested if you use built layouts including such widgets, otherwise you may see such widgets disappearing after the upgrade, for the obvious reason that they do not fit in the space assigned to them anymore.

Unfortunately there is no easy way for the Bridge platform to mitigate this, we can only make you aware of it and advise that you update your layouts. Testing the home screen is highly recommended before Android 6 is rolled out.

SELinux

SELinux is set to Enforcing by default in Marshamallow builds. You may find that some of your applications no longer work due to SELinux access denials. To investigate these capture logs and search for "avc: denied".

A simple way to do this is to use an SD card to collect logs by doing the following:

  • Extract the contents of SDLOG.zip to an SD card. See the support page for more details.
  • Insert the SD card into the device.
  • Reboot the device.
  • Once the device boots logging will be enabled and logs will be written to SD card in the SDLOG directory.

Alternatively you could look at the logcat output of the device with something like:

adb logcat -v time | grep "avc: denied"

Install applications from "Unknown sources" as restricted user

In Jellybean the setting for allowing installation of software from unknown sources was global if set by the owner. In Marshmallow this is a per-user setting.

Currently unsupported feature list

Development is currently on-going for some features in the first release. We plan to add these in subsequent updates in the near future.

Features from our 4.3 releases which are not included in the first Marshmallow release are:

  • Vocalizer Expressive Engine (TTS).
  • Bluetooth auto reconnect.
  • Ethernet dongle support.
  • Speech recognition & wake up word.
  • USB mass storage support
  • Silent mode
  • TVG Video dongle support.