Optimize the HERE SDK
This optimization guide lists several options to shrink the size of the HERE SDK and to optimize the runtime behavior by reducing the data that needs to loaded or processed.
Feature configurations can be updated after the installation of the next application update by calling
mapUpdater.performFeatureUpdate(). Call this method once a feature configuration has been updated in the
As a result, the cached map data will be deleted and subsequently updated. Also, the downloaded regions will be updated to reflect the changes.
Note that it is the developer's responsibility to decide when to perform the update. The HERE SDK does not decide or notify when such an update can be made. Calling
performFeatureUpdate() is only necessary once - after an application has been updated. It is not necessary to call this, when the feature configuration has not been changed by a developer.
Engines like the
SearchEngine or the
RoutingEngine will never make use of cached or downloaded map data. Only the
OFflineRoutingEngine will use such data if the related features have not been disabled. For example, if you are sure that your app fully operates online, it is safe to disable the offline search feature. However, if you want to ensure that an app can also search for POIs when there is a temporary connection loss, you may want to switch to the
OfflineSearchEngine when such a loss is detected - and therefore, you should not disable the related feature.
As listed above, for some disabled features, a device may still download corresponding data when a device has online connectivity and the feature is needed. For example, when the "LANDMARKS_3D" feature is disabled, but the corresponding
MapScene layer is enabled, then the device will still download the needed textures to render a 3D landmark when it becomes visible in the
For all listed features from above - except for "OFFLINE_SEARCH" and "OFFLINE_ROUTING", the HERE SDK will first check if the needed data is available in the cache. If not found there, it will look if there is a downloaded
Region for offline use. If not found, the HERE SDK will try to download the needed data over the air. For "OFFLINE_SEARCH" and "OFFLINE_ROUTING" the behavior will be the same, but no data will be requested over the air.
Remove Unused Voices
By removing unused voice guidance files you can reduce the size of the HERE SDK.
These files are only needed when you want to use turn-by-turn navigation with text-to-speech voice messages.
Do the following to remove the unused files:
- Unzip the HERE SDK framework and search for the
- If you want to shrink the size of the framework, you can remove the voice packages you do not need.
- Re-archive the AAR with Android Studio.
Here you can find a list of all supported voice languages together with the name of the related voice skin that is stored inside the HERE SDK framework.
Remove Unused Fonts
By removing unused fonts you can reduce the size of the HERE SDK. This is explained here.
Size management: With ABI splits you can reduce the size of the HERE SDK AAR binary file. As a result, your application will occupy less storage space on a device.
By default, the HERE SDK for Android includes the following ABIs:
arm64-v8a (mainly used for devices) and
x86_64 (mainly used for emulators). You can enable ABI splits to build your app, for example, only for the
Do this by modifying your app's
include 'x86_64', 'arm64-v8a' // Choose what you need.
Now, when you execute
./gradlew assembleRelease from command line, the following two APKs are generated:
app-arm64-v8a-release.apk. Each APK contains only the desired ABI and is therefore much smaller in size. If you change the
splits block to set
universalApk true, then also a universal APK is generated that contains all ABIs, which is obviously much bigger.
For more information about the
splits Gradle block, see Configure Multiple APKs for ABIs.
By default, an APK built with the HERE SDK for release will be around 103 MB or higher - depending on the app features. Therefore, in order to release an app the Play Store, it is required to use either ABI Splits or Android App Bundles (AAB): As of now, the Play Store limits APKs to 100 MB and for ABBs the limit is 150 MB. If you do not want to maintain several APKs built via ABI splits for selected architectures, consider to use ABBs instead.
Other options to optimize the HERE SDK include:
In addition, all engines contain several options that allow how to configure a feature. For example, when using the
SearchEngine, you can specify
SearchOptions to limit the returned search results.