HERE地图Android集成,MISSING_LIBRARIES错误

时间:2016-02-05 07:10:15

标签: android here-api

我按照步骤操作 https://developer.here.com/mobile-sdks/documentation/android/topics/app-simple-android-studio.html

但我收到的错误是:无法初始化Map Fragment MISSING_LIBRARIES

映射初始化代码:

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')
}

清单代码:

<?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>

任何非常感谢的建议

3 个答案:

答案 0 :(得分:5)

我相信你正在查看错误的文档。在此页面上:https://developer.here.com/documentation列出了HERE Android Mobile SDK的两个版本,适用于Android Starter的SDK和适用于Android Premium的SDK。当我认为您需要Premium时,您正在查看Starter的文档。

Premium SDK有一个本机库组件,需要包含在构建中。试试这个页面:https://developer.here.com/mobile-sdks/documentation/android-hybrid-plus/topics/app-simple-android-studio.html(“将HERE SDK库添加到项目中”部分)

具体来说,我相信这些是你错过的部分:

  
      
  • 从安装HERE SDK的目录中,将HERE-sdk / libs / armeabi-v7a文件夹的内容复制到项目中   app / src / main / jniLibs / armeabi文件夹。您需要创建jniLibs   和armeabi子文件夹。

  •   
  • 在AndroidManifest.xml文件的同一部分中,添加以下行:

         

    <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>

  •   

<强>更新

从HERE SDK 3.3版开始,SDK将作为Android Archive(AAR)文件提供。因此,您不再需要手动复制上面第一个项目中提到的本机库。您只需将AAR文件包含在您的 build.gradle文件。 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')
   ...
}

答案 1 :(得分:0)

确保您的设备符合here列出的系统要求。具体来说,请确保您的设备是ARM而不是x86。

在HP Pro Slate 10 EE G1上运行HERE地图时,我遇到了“MISSING_LIBRARIES”错误。此平板电脑是x86,目前的HERE SDK不支持。 ARM本机代码使用名为Houdini的仿真器在Intel x86上运行。可以找到here的解释。

不幸的是,我知道这不能解决您的问题。但它可以帮助您理解为什么应用程序不会初始化地图。

答案 2 :(得分:0)

如果你在项目中有另一个带有JNI的lib,也会发生这种情况。 在这种情况下,请在build.gradle中的buildType下包含以下代码:

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