15

(ジンジャーブレッド2.3.5)電話で公式のandroid google mapapiv2サンプルを作成しようとしています。android-support-v4.jar公式サンプルプロジェクトに追加しました。

の公式チュートリアルからサンプルを取りました<android-sdk>/extras/google-play-services/samples/maps

サンプルアプリをEclipseにコピーし、google-play-services_libプロジェクトをAndroidライブラリとして参照し、Android SDK 4.1.2(api 16)を使用してすべてをビルドしました。

残念ながら、アプリを起動するとマップが空白になり、例外やメッセージは表示されません。私が得た唯一のものは、logcatのそれらの疑わしい行です:

    Unable to resolve superclass of Lmaps/a/du; (411)                     
    Link of class 'Lmaps/a/du;' failed                                    
    Unable to resolve superclass of Lmaps/a/ej; (2363)                    
    Link of class 'Lmaps/a/ej;' failed                                    
    Unable to resolve superclass of Lmaps/j/k; (2379)                     
    Link of class 'Lmaps/j/k;' failed                                     

ERRメソッドmaps.y.ae.aから参照されたクラス'maps.jk'が見つかりませ
んでしたVFY:Lmaps / y / aeの新しいインスタンス3571(Lmaps / j / k;)を解決できません。

Eclipse3.8のプロジェクト構造が多少混乱しているのではないかと思います。

私は次のことを(最もばかげたものでさえ)無駄に試しました。

1.無効なAPIキー?

keytoolを使用して「debug.keystore」を生成し、Eclipseプリファレンス(Android / Build / Keystore)を更新しました。もちろん、その新しいキーストア/ SHA1を登録し、AndroidManifestファイルで使用した新しいAPIキーを取得します

2.間違ったプロジェクトターゲット?

次のターゲットを使用して2つのプロジェクトを構築しようとしました。

  • Android 4.2.1
  • Google Api 4.2.1

3.プロジェクトの依存関係としてgoogle-play-services_libを追加する

デモビルドパスにAndroidライブラリとして追加されることに加えて、プロジェクトの依存関係としてgoogle-play-services_libを追加しようとしました。そして、一致するエクスポートチェックボックスをオンにします。

4.電話でグーグルマップAPIv2をテストします

電話が新しいAPIと互換性があることを確認するために、電話でv2apiを使用すると言われているtrulia不動産アプリをダウンロードしました

これがサンプルアプリのマニフェストです

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapdemo"
    android:versionCode="1"
    android:versionName="1.0" >
    <permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
    <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!-- External storage for caching. -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- My Location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- Maps API needs OpenGL ES 2.0. -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
    <!-- End of copy. -->
    <application
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/demo_title" >
        <!-- You must insert your own Google Maps for Android API v2 key in here. -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="XXXXXXXX" />
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".BasicMapActivity"
            android:label="@string/basic_map" />
        <activity
            android:name=".CameraDemoActivity"
            android:label="@string/camera_demo" />
        <activity
            android:name=".EventsDemoActivity"
            android:label="@string/events_demo" />
        <activity
            android:name=".GroundOverlayDemoActivity"
            android:label="@string/groundoverlay_demo" />
        <activity
            android:name=".LayersDemoActivity"
            android:label="@string/layers_demo" />
        <activity
            android:name=".LocationSourceDemoActivity"
            android:label="@string/locationsource_demo" />
        <activity
            android:name=".MarkerDemoActivity"
            android:label="@string/marker_demo" />
        <activity
            android:name=".OptionsDemoActivity"
            android:label="@string/options_demo" />
        <activity
            android:name=".PolygonDemoActivity"
            android:label="@string/polygon_demo" />
        <activity
            android:name=".PolylineDemoActivity"
            android:label="@string/polyline_demo" />
        <activity
            android:name=".ProgrammaticDemoActivity"
            android:label="@string/programmatic_demo" />
        <activity
            android:name=".TileOverlayDemoActivity"
            android:label="@string/tile_overlay_demo" />
        <activity
            android:name=".UiSettingsDemoActivity"
            android:label="@string/uisettings_demo" />
        <activity
            android:name=".RawMapViewDemoActivity"
            android:label="@string/raw_mapview_demo" />
        <activity
            android:name=".RetainMapActivity"
            android:label="@string/retain_map" />
        <activity
            android:name=".MultiMapDemoActivity"
            android:label="@string/multi_map_demo" />
    </application>
</manifest>

これが私のプロジェクト構造/ビルドパスのスクリーンショットです。

プロジェクト構造

ターゲットとライブラリ

ビルドパス

4

12 に答える 12

15

API KEYを適用するときに何か問題があると思います。私も同じ問題を抱えており、ついに間違ったサービスをオンにしていることがわかりました。https://code.google.com/apis/console/で、

とがありGoogle Maps API v2ますGoogle Maps Android API v2

を使用する必要がありますGoogle Maps Android API v2

于 2012-12-10T07:16:03.183 に答える
4

私はまったく同じ問題を抱えていました(すべての構成は同じで、logcatのmaps.jkのもの)。ただし、ビルドターゲットとしてGoogle APIを選択したことで解決しました。しかし、それは Google API 4.2 だったので、アップデートをインストールして、より新しいターゲットで試すことをお勧めします。

于 2012-12-07T22:53:43.793 に答える
2

プロガードを使用していますか? 通常、「a」、「b」などのクラス名は、ProGuard がクラス名を難読化した結果であり、これが発生すると Maps API が壊れる可能性があります。その場合は、ProGuard を無効にするか-keep、proguard.cfg ファイルにいくつかの行を追加する必要があります。この投稿は、これらの行がどのように見えるかを示しています。

于 2012-12-06T16:18:49.097 に答える
2

私の場合、それは2つの問題が原因でした

  1. 私の電話には最新の Google マップ アプリがインストールされていませんでした (実際、Google マップはまったくありませんでした)。
  2. マニフェストに必要な権限がすべて設定されていませんでした

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_apiに記載されているとおり

于 2012-12-19T21:47:59.633 に答える
1

http://developer.android.com/sdk/index.html --これは android の adt バンドルのリンクです。これをダウンロードして、最初からやり直してください。ADT に問題がある可能性があります。

于 2013-02-05T03:25:01.590 に答える
0

私は同じ問題を扱っていました。私はcom.example.mapdemoを実装しようとしましたが、かなりの時間がありました。

BasicMapActivityのコードをクリーンな新しいプロジェクトにコピーし、ライブラリを上記のように見せました。

基本的に、私はどちらも働かせることができませんでした。デバッガーで「認証の失敗」エラーが発生しました。

次に、今日、Googleコンソールでキーを準備するときに、セミコロンの後に特定のcom.example.xxxを付けて、プロジェクトごとに特別に新しいキーを準備しました。

私はすべてのステップでプロジェクト->クリーンを実行しました。

最初にデバッガーで実行し、次に実行しました。そして、覚えていれば、マニフェストに変更を加えた後、数回。

そして、ついに彼らは働きました。結局、特定のプロジェクトごとにキーが必要であるように見えました。

于 2012-12-21T16:03:24.513 に答える
0

Google Maps AndroidAPIv2を有効にしたコンソールAPIを確認してください

于 2012-12-11T18:22:20.383 に答える
0

すでにすべてを試した場合は、アプリをアンインストールしてから再インストールしてみてください。私の電話 (S3 mini) では、間違ったキーで最初に起動した後、修正しましたが、完全にアンインストールするまで機能しませんでした。ある種のキャッシングが使用されている可能性があります。

于 2013-09-26T05:15:04.590 に答える
0

これが私のために働いたものです。Google API コンソールを使用して API キーを作成する場合は、必ず ;com.example.mapdemo を SHA1 フィンガープリントに追加してください。(現在開発中の別のアプリにより適した別のものを使用していました。) この解決策のヒントになったのは、LogCat の認証エラーでした。

于 2013-02-09T13:40:00.143 に答える
0

私の場合、ロケーションデータを取得できるように LocationSource インターフェイスを追加しましたが、追加するのを忘れていました:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

マニフェスト ファイルで。

于 2013-04-05T01:34:40.567 に答える