chehthan
chehthan

Reputation: 213

HERE Maps Android Integration, MISSING_LIBRARIES Error

I followed the steps https://developer.here.com/mobile-sdks/documentation/android/topics/app-simple-android-studio.html

but I am getting error as : Cannot initialize Map Fragment MISSING_LIBRARIES

Map init code :

mapFragment.init(new OnEngineInitListener() {
            @Override
            public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
                if (error == OnEngineInitListener.Error.NONE) {
                    // retrieve a reference of the map from the map fragment
                    map = mapFragment.getMap();
                    // Set the map center to the Vancouver region (no animation)
                    map.setCenter(new GeoCoordinate(49.196261, -123.004773, 0.0),
                            Map.Animation.NONE);
                    // Set the zoom level to the average between min and max
                    map.setZoomLevel(
                            (map.getMaxZoomLevel() + map.getMinZoomLevel()) / 2);
                } else {
                    System.out.println("ERROR: Cannot initialize Map Fragment " + error.toString());
                    Toast.makeText(MainActivity.this, " Error: " + error.toString(), Toast.LENGTH_LONG).show();
                }
            }
        });

gradle code

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.chethan.mobileapp.startmap"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile files('libs/HERE-sdk.jar')
    compile files('libs/jts-1.14.jar')
}

manifest code:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ethan.mobileapp.startmap">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:hardwareAccelerated="true"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data android:name="com.here.android.maps.appid" android:value="Ksn3W" />
        <meta-data android:name="com.here.android.maps.apptoken" android:value="m90-Q" />
        <!--<meta-data android:name="com.here.android.maps.license.key" android:value="{J8XXfNbyt7M=}" />
-->
    </application>

</manifest>

any suggestions much appreciated

Upvotes: 5

Views: 2161

Answers (3)

EliGreenfeld
EliGreenfeld

Reputation: 21

This can happen also If you have another lib with JNI in project. In that case include following code under buildType in build.gradle:

        splits {
            abi {
                enable true
                reset()
                include 'armeabi-v7a'
                universalApk false
            }
        }

Upvotes: 0

Blake
Blake

Reputation: 43

Be sure your device meets the system requirements listed here. Specifically, be sure your device is ARM and not x86.

I've encountered the 'MISSING_LIBRARIES' error when running HERE maps on the HP Pro Slate 10 EE G1. This tablet is x86 which is not supported by the current HERE SDK. ARM native code runs on Intel x86 using an emulator named Houdini. Explanation on that can be found here.

Unfortunately I know this doesn't fix your issue. Yet it may help you understand why the app will not initialize the map.

Upvotes: 0

AndrewJC
AndrewJC

Reputation: 1478

I believe you're looking at the wrong documentation. On this page: https://developer.here.com/documentation there are two versions of the HERE Android Mobile SDK listed, SDK for Android Starter and SDK for Android Premium. You are looking at the documentation for Starter when I think you want Premium.

The Premium SDK has a native library component which needs to be included in the build. Try this page: https://developer.here.com/mobile-sdks/documentation/android-hybrid-plus/topics/app-simple-android-studio.html ("Add HERE SDK Libraries to Your Project" section)

Specifically, I believe these are the sections you missed:

  • From the directory where you installed the HERE SDK, copy the contents of the HERE-sdk/libs/armeabi-v7a folder to your project's app/src/main/jniLibs/armeabi folder. You need to create the jniLibs and armeabi subfolders.

  • Within the same section in your AndroidManifest.xml file, add the following lines:

    <service android:name="com.here.android.mpa.service.MapService" android:label="HereMapService" android:process="global.Here.Map.Service.v2" android:exported="true" > <intent-filter> <action android:name="com.here.android.mpa.service.MapService" > </action> </intent-filter> </service>

UPDATE

As of HERE SDK version 3.3 the SDK is delivered as an Android Archive (AAR) file. Therefore, you no longer need to manually copy the native libraries as mentioned in the first bullet above. You can simply include the AAR file in your build.gradle file. e.g.:

// Assuming you have placed the HERE-sdk.aar in a folder 'libs'
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
   ...
   compile(name: 'HERE-sdk', ext: 'aar')
   ...
}

Upvotes: 5

Related Questions