web-dev-qa-db-ja.com

Android:リリースapkのマップが表示されないGoogle Map v2

私のグーグルマップアプリは、デバッググーグルマップAPIキーを備えたデバイス上で正常に動作しますが、リリースグーグルマップAPIキーを使用してアプリの署名付きapkを作成すると、マップが表示されません。リリースモードgoogle API KEYを生成するには、キーストアでSHA1フィンガープリントを使用しています。そして、developer.Android.com( http://developer.Android.com/tools/publishing/app-signingで説明されているように、プロジェクト設定で「署名とビルドタイプ」も定義しています.html )。

考えられるすべての解決策を試してみました(apkを削除し、再インストール、デバイスの再起動、プロジェクトのクリーニングよりも)。うまくいきませんでした。誰もが私の問題に対する良い解決策を持っています助けてください。 FYI Android studiosプラットフォームを使用しています。

18
sam2395

2つのgoogle_maps_api.xmlファイルがあるかもしれません。1つはapp/src/debug/res/valuesフォルダーにあり、もう1つはapp/src/release/res/valuesフォルダーにありますが、APIキーが含まれているのはデバッグファイルだけです。

24
Arslan Anwar

APIキーはAndroid Manifestにハードコーディングする必要があり、別のリソースXMLファイルにある場合は機能しません。

15
Florence Herrou

デバッグ証明書は、実動証明書とはdifferentです。 APIコンソールのGoogleマップキーエントリにbothをseaparate行として追加する必要があります。それぞれが同じpackageIdを持ちますが、SHA1ハッシュは自然に異なります。

[〜#〜] edit [〜#〜]

単一のGoogle Mapsキーに割り当てられる証明書のフィンガープリントとパッケージ名の数に制限はありません。したがって、これを分離する必要がない限り、同じキーを使用して開発ビルドと本番ビルドの両方を作成することはまったく問題ありません。 Googleコンソールでは、次のようになります(1つのsha1は、このIDEを使用してビルドするすべてのアプリで同じデバッグ証明書からのものであり、他は本番証明書です)。

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foo.bar
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar

または(ただし、異なるアプリに同じキーを使用することはお勧めしません):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foobar.myapp
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
EF:3B:59:7E:19:FB:83:10:58:57:AE:4F:5E:1D:F0:2B:28:DE:9E:01;net.something.otherapp
6
Marcin Orlowski

私はこの問題を抱えていて、これらの手順を実行しましたこの方法は完璧で完全だと思います

Android Studio:

  1. 署名付きAPKのビルド生成
  2. キーストアパスをコピーします。
  3. コマンドプロンプトを開き、C:\ Program Files\Java\jdk1.6.0_39\bin>(またはインストールされているjdkバージョン)に移動します。
  4. Keytool -list -v -keystoreと入力してからキーストアパスを貼り付けます(例:C:\ Program Files\Java\jdk1.6.0_39\bin> keytool -list -v -keystore "E:\ My Projects\Android\android studio\signed apks\Hello World\HelloWorld.jks ")。
  5. これで、キーストアパスワードを要求し、パスワードを入力してEnterキーを押してSHA1およびMD5証明書キーを取得します。
  6. 開発者のGoogleコンソールでデバッグ証明書と使用のためのSHA1を見ることができます
3
JJorian

これを機能させるには、覚えておくべきことが2つあります。

  1. ビルドバリアントのデバッグ

    • Keytoolを使用して、新しいAndroidデバッグキーを生成します
    • このキー(SHA-1)をGoogleコンソールのAndroidマップAPIキーに関連付けます
    • デバッグモードには、Android maps apiキーが文字列「google_maps_key」として(src/debug /.../ google_maps_api.xml)として格納されているgoogle_maps_api.xmlがあります。
  2. ビルドバリアントのリリース

    • Keytoolを使用して、新しいAndroidリリースキーを生成します
    • Googleコンソールの新しいAndroid map api key)でこのキー(SHA-1)を関連付けます
    • リリースモードにはgoogle_maps_api.xmlがあり、そこではリリースAndroid maps apiキーが文字列 "google_maps_key"として(src/release /.../ google_maps_api.xml)として保存されます。

AndroidManifest.xmlで次の行を追加します。

<meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="@string/google_maps_key" />

デバッグとリリースの通常の手順に従ってください。シームレスに動作するはずです。

2
Anil Muppalla

返信が遅くなってすみません。これが将来に役立つことを願っています。このソリューションを使用して同じ問題を解決します。開発中にGoogleマップを使用している場合、パスワードのないデフォルトのdebug.keystoreが使用されます。 Playストアにアップロードするapkファイルを作成すると、新しいSHA-1キーが作成されるため、そのための新しいdebug.keystoreを作成する必要があります。そのSHA-1の新しいAPIキーを作成する必要があります。ソリューションによると OAuth 2.0 on Androidでの署名証明書フィンガープリント(SHA1)の取得方法 エクスポートされたapkファイルに対してSHA-1を取得できます。

その後、Androidマニフェストを以前のものとしてマニフェストで使用し、完了です。

EDIT 1-
これを行う手順
1)プロジェクトの「Androidマニフェスト」ファイルの「エクスポートウィザードを使用」を使用してapkファイルを作成します。
2)キーを挿入した後、終了する前に、MD5キーとSHA1キーがこのように表示されますpic ---(http://i.stack.imgur.com/SldEv.png
3)Android project in https://console.developers.google.com の新しいAPIキーを作成します。新しいSHA1はポイントで取得されます。 2)。
4)以下に示すように、マニフェストファイルでそのAPIキーを使用します

5)プロジェクトをクリーンアップし、ポイント1)に従ってAPKファイルを再度ビルドします。
6)そのAPKでGoogleマップを表示できるようになりました。

2
Kunal

リリースのデバッグで使用したのと同じキーを使用することはできません。それらは異なる機能を持っています。この問題を解決するには、リリースコピーで使用しているキーストアから新しいGoogleマップキーAPIキーを生成する必要があります。詳細については、このビデオを参照してください https://www.youtube.com/watch?v= xLJ0jDFdUZ

1
Hussein Talib

APIキーを作成したGoogle Apiコンソールでは、同じキーに複数の指紋を追加するオプションがあります。デバッグキーストアとリリースキーストアに2つのSHA1フィンガープリントを追加し、同じAPIキーが機能しました。

以下はUbuntu専用のものです。

  1. 以下のコマンドを使用して、デバッグ用のSHA1を取得します

    keytool -list -v -keystore ~/.Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
    
  2. リリース用のSHA1を取得するには、コマンドが次のように変更されます。

    keytool -list -v -keystore /home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks -alias test -storepass password -keypass password
    

どこ

/home/atul/Desktop/Learnings/Projects/TestApp/keystore.jksは、署名されたapkのキーストアファイルが存在するパスです

testは、署名付きキーストアの生成中に使用されるキーエイリアス名です。

passwordはapkの署名中に使用されるパスワードです

お役に立てれば。ハッピーコーディング:)

1
Atul O Holic

リリースAPI SHA1フィンガープリントを取得するにはどうすればよいですか:

署名されたAPKをPlaystoreからインストールするか、単に電話にコピーします。

実際の電話の場合はUSBケーブルを差し込み、Android Studio。

初めてマップを取得しようとすると、ログエントリに次のように表示されます。

E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)

Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:

API Key: AIzaS<YOUR KEY YOUR KEY YOUR KEY YOUR KEY>

Android Application (<cert_fingerprint>;<package_name>): 56:AF:B2:<THIS IS WHAT YOU ARE LOOKING FOR>;br.com.tinx.<your package>

次に、それらの指示に従って、開発者コンソールで新しいエントリを作成します。

  • ログを表示する前にアプリマップをヒットした場合は、メモリからアプリを閉じて再試行する必要があります)
  • この手順はエミュレータでも機能するはずです。
1
WilliamK

先物参照の場合---私の場合--- google apiキーを配置する必要があるgoogle_maps_api.xmlファイルが2つあります。そのうちの1つだけでYOUR_API_KEYを置き換えるミスを非常に簡単に行うことができます(特に、Google API /アプリを削除して新しいものを作成した場合)

1
DoruChidean
create another Maps API key (to put in your manifest) corresponding with you release   
keystore for release.

Googleのドキュメントを確認

1
Naveen Tamrakar

カスタムキーストアからSHA1コードを作成する場合は、リリースモードで同じコードを使用します。または、同じキーストアとテストで署名してapkを生成します。

その前に、アプリのデータを消去する必要があります(設定->アプリ-アプリの消去-データの消去->アンインストール)。これは私のために働いた。パッケージ名がGoogle開発者コンソールのものと同じであることを確認してください。

0
Suchith

同様の問題があり、問題は、最初に正しいフレーバーを選択せず​​にAndroid Studioからapkを生成したことです。これは、私のマニフェストが、デバッグフレーバー。

Android Studioでリリースフレーバーを選択していることを確認してください。以下のスクリーンショットを参照してください。

enter image description here

0
narko

同様の問題がありました:同じタイプ(「リリース」)でいくつかの新しいフレーバー(「無料」と「プレミアム」)を備えた新しいバリアントビルドをいくつか作成した後、Googleマップフラグメントにマップが表示されなくなり、画面が表示されました完全に空白です。 logcatでは、次のエラーメッセージ「 https://clients4.google.com/glm/mmap/api に対する予期しない応答コード400」しか表示されませんでした。アクセス。

もちろん、すべてのGoogle Cloud APIプロセスを再度確認して、APIキーの資格情報に何かが欠けているかどうかを確認しましたが、何も問題はありませんでした。実際、新しいAPKの場合、まだ有効な同じAPIキーを継承するために、既存のプロジェクト認証情報にビルド情報(名前+指紋)を追加することが示されています。

読むことができる指示は非常に明確です:「パッケージ名とSHA-1署名証明書の指紋を追加して、使用をAndroidアプリに制限します。AndroidManifest.xmlファイルからパッケージ名を取得します。次に、次のコマンドを使用して指紋を取得します:keytool -list -v -keystore mystore.keystore "。

私の場合の問題は、新しいバリアント「パッケージ名」がマニフェストパッケージ名(「com.example.app_name.release」)に存在するものではなかったことです。実際、新しいフレーバーのために、マニフェスト名は同じでしたが、2つの新しい「実際の」パッケージ名:「com.example.app_name.free.release」と「com.example.app_name.premium.release」。これらの名前は、フレーバーが定義されているGradle構成(私の場合は「applicationIdSuffix」属性)に対応しているため、マニフェストファイルには書き込まれていません。 Gradleの「アプリケーションID」がマニフェストの「パッケージ名」と重なってはならないため、これは非常に混乱しています。しかし、すべてのAndroidドキュメントを注意深く読むと、「マニフェストパッケージ名がGradle applicationIdと異なる場合、ビルドは最終マニフェストファイルのアプリケーションIDをコピーします」を読むことができます。もちろん、両方のバリアント両方がまだ同じビルドタイプ(「リリース」)であるため、同じフィンガープリントを持ちます。

そのため、解決策は、同じプロジェクトクレデンシャルに2つの新しいバリアントエントリを追加して、同じAPIキーを継承することでした。

  • 元のエントリ(削除する必要はありません):パッケージ名= "com.example.app_name.release"-SHA-1証明書のフィンガープリント= "xxxxx"

  • 新規エントリ1:パッケージ名= "com.example.app_name.free.release"-SHA-1証明書のフィンガープリント= "xxxxx"変更なし、これまでと同じ

  • 新規エントリ2:パッケージ名= "com.example.app_name.premium.release"-SHA-1証明書のフィンガープリント= "xxxxx"変更なし、これまでと同じ

最後に、マップフラグメントまたはアクティビティの正しい更新された動作を実際に監視していることを確認するために、ビルドをクリーンアップする必要がある場合があります。

残りの推奨事項については、私の場合、それらを適用する必要はありませんでした-マニフェストでAPIキーをハードコーディングする必要はありません-新しいバリアントAPKの新しいAPIキーを作成する必要はありません-google_maps_apiを使用する必要はありませんxmlファイル

0
Javi