繁体   English   中英

Google Maps应用崩溃报告

[英]Google Maps app crash reporting

我已经写了这个Google Maps应用程序,并且可以工作,但是当我尝试在具有Android 6.0版的Android设备上运行时,它显示了Google Map,但没有在该位置显示用户的当前位置。地图,右上角也没有图标来刷新应用程序,并在可能的情况下使位置更准确...当我在Android 5.1上运行它时,它向我显示了更多错误,并且根本无法正常工作。 请帮忙 :(

这是AndroidManifest.xml文件:

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

<!-- Google Maps for Android v2 requires OpenGL ES v2 -->
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<!--
     The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
     Google Maps Android API v2, but you must specify either coarse or fine
     location permissions for the 'MyLocation' functionality. 
-->
<permission
    android:name="com.example.francydarkcool.maps.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.example.francydarkcool.maps.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<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_GSERVICE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <!--
         The API key for Google Maps-based APIs is defined as a string resource.
         (See the file "res/values/google_maps_api.xml").
         Note that the API key is linked to the encryption key used to sign the APK.
         You need a different API key for each encryption key, including the release key that is used to
         sign the APK for publishing.
         You can define the keys for the debug and release targets in src/debug/ and src/release/. 
    -->
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/xxxxx" />

    <activity
        android:name=".MapsActivity"
        android:label="@string/title_activity_maps">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Welcome">
        android:label="@string/Welcome">

    </activity>
</application>
</manifest>

这是.java文件:

package com.example.francydarkcool.maps;

import ...

public class MapsActivity extends FragmentActivity {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the MapFragment and get notified when the map is ready to be used.
    MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            if (ActivityCompat.checkSelfPermission(MapsActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MapsActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            mMap.setMyLocationEnabled(true);
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }

        }
    });

    setUpMapIfNeeded();
}

protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
}


private void setUpMapIfNeeded() {
    //Do a null check to see if the map is not already instantiated
    if (mMap == null)
        //try to obtain the map from the MapFragment.
 //           mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMapAsync(onMapReady(mMap));

    {
        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mMap = googleMap;
                if (ActivityCompat.checkSelfPermission(MapsActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MapsActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    // TODO: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions, and then overriding
                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.
                    return;
                }
                mMap.setMyLocationEnabled(true);
                // Check if we were successful in obtaining the map.
                if (mMap != null) {
                    setUpMap();
                }

            }
        });
    }
    //check if successful
    if (mMap != null) {
        setUpMap();
    }
}


private void setUpMap() {
    mMap.addMarker(new MarkerOptions().position(new LatLng(45.402850, 25.518595)).title("unu"));
    mMap.addMarker(new MarkerOptions().position(new LatLng(45.402856, 25.518608)).title("doi"));
    mMap.addMarker(new MarkerOptions().position(new LatLng(45.402834, 25.518772)).title("trei"));

    //Enable MyLocation Layer of Google Map
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }

    mMap.setMyLocationEnabled(true);

    //Get LocationManager object from System Service LOCATION_SERVICE
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    //Create a criteria object to retrieve provider
    Criteria criteria = new Criteria();

    //Get the name of the best provider
    String provider = locationManager.getBestProvider(criteria, true);

    //Get current location
    Location myLocation = locationManager.getLastKnownLocation(provider);

    if(myLocation != null){
        double latitude = myLocation.getLatitude();
        double longitude = myLocation.getLongitude();
        }
    else
    {
        Location   getLastLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
        double longitude = getLastLocation.getLongitude();
        double latitude = getLastLocation.getLatitude();
    }

    //set map type
    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

    //Get latitude of the current location
    double latitude = myLocation.getLatitude();

    //Get longitude of the current location
    double longitude = myLocation.getLongitude();

    //Create a LatLng object for the current location
    LatLng latLng = new LatLng(latitude, longitude);

    //Show the current location in Google Maps
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    //Zoom in GoogleMap
    mMap.animateCamera(CameraUpdateFactory.zoomTo(20));
}

}    

这是activity_maps.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.francydarkcool.maps.MapsActivity" />

最后,这些是在Android 6.0上运行时的错误:

E/FirebaseCrash: Failed to initialize crash reporting
             java.lang.RuntimeException: Missing an expected resource: 'R.string.google_api_key' for initializing Google services.  Possible causes are missing google-services.json or com.google.gms.google-services gradle plugin.
                 at com.google.firebase.crash.internal.api.FirebaseCrashApiImpl.init(:com.google.android.gms.DynamiteModulesC:1089)
                 at bqs.onTransact(:com.google.android.gms.DynamiteModulesC:60)
                 at android.os.Binder.transact(Binder.java:387)
                 at com.google.firebase.crash.internal.zzd$zza$zza.zza(Unknown Source)
                 at com.google.firebase.crash.FirebaseCrash.<init>(Unknown Source)
                 at com.google.firebase.crash.FirebaseCrash.getInstance(Unknown Source)
                 at java.lang.reflect.Method.invoke(Native Method)
                 at com.google.firebase.FirebaseApp.zza(Unknown Source)
                 at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
                 at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
                 at com.google.firebase.FirebaseApp.zzeh(Unknown Source)
                 at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
                 at android.content.ContentProvider.attachInfo(ContentProvider.java:1748)
                 at android.content.ContentProvider.attachInfo(ContentProvider.java:1723)
                 at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
                 at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
                 at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
                 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
                 at android.app.ActivityThread.-wrap1(ActivityThread.java)
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
                 at android.os.Handler.dispatchMessage(Handler.java:102)
                 at android.os.Looper.loop(Looper.java:148)
                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                 at java.lang.reflect.Method.invoke(Native Method)
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这些来自在Android 5.1上运行相同的应用程序:

E/libprocessgroup: failed to make and chown /acct/uid_10058: Read-only file system
W/Zygote: createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?
I/art: Not late-enabling -Xcheck:jni (already on)
W/art: Failed to find OatDexFile for DexFile /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_9-classes.dex ( canonical path /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_9-classes.dex) with checksum 0x96c9987f in OatFile /data/data/com.example.francydarkcool.maps/cache/slice-slice_9-classes.dex
W/art: Failed to find OatDexFile for DexFile /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_8-classes.dex ( canonical path /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_8-classes.dex) with checksum 0xfb6fb639 in OatFile /data/data/com.example.francydarkcool.maps/cache/slice-slice_8-classes.dex
W/art: Failed to find OatDexFile for DexFile /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_4-classes.dex ( canonical path /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_4-classes.dex) with checksum 0x91648fd3 in OatFile /data/data/com.example.francydarkcool.maps/cache/slice-slice_4-classes.dex
W/art: Failed to find OatDexFile for DexFile /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_2-classes.dex ( canonical path /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_2-classes.dex) with checksum 0x44af1327 in OatFile /data/data/com.example.francydarkcool.maps/cache/slice-slice_2-classes.dex
W/art: Failed to find OatDexFile for DexFile /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_0-classes.dex ( canonical path /data/data/com.example.francydarkcool.maps/files/instant-run/dex/slice-slice_0-classes.dex) with checksum 0x3993f84f in OatFile /data/data/com.example.francydarkcool.maps/cache/slice-slice_0-classes.dex
W/art: Verification of void com.google.firebase.FirebaseApp.<clinit>() took 273.032ms
W/art: Suspending all threads took: 16.600ms
I/art: Background sticky concurrent mark sweep GC freed 1202(325KB) AllocSpace objects, 11(244KB) LOS objects, 33% free, 1248KB/1872KB, paused 18.204ms total 30.940ms
A/FirebaseApp: Firebase API initialization failure.
               java.lang.reflect.InvocationTargetException
                   at java.lang.reflect.Method.invoke(Native Method)
                   at java.lang.reflect.Method.invoke(Method.java:372)
                   at com.google.firebase.FirebaseApp.zza(Unknown Source)
                   at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
                   at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
                   at com.google.firebase.FirebaseApp.zzeh(Unknown Source)
                   at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
                   at android.content.ContentProvider.attachInfo(ContentProvider.java:1696)
                   at android.content.ContentProvider.attachInfo(ContentProvider.java:1671)
                   at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
                   at enter code hereandroid.app.ActivityThread.installProvider(ActivityThread.java:4999)
                   at android.app.ActivityThread.installContentProviders(ActivityThread.java:4594)
                   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4534)
                   at android.app.ActivityThread.access$1500(ActivityThread.java:151)
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
                   at android.os.Handler.dispatchMessage(Handler.java:102)
                   at android.os.Looper.loop(Looper.java:135)
                   at android.app.ActivityThread.main(ActivityThread.java:5254)
                   at java.lang.reflect.Method.invoke(Native Method)
                   at java.lang.reflect.Method.invoke(Method.java:372)
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                Caused by: java.lang.IllegalArgumentException: Given String is empty or null
                   at com.google.android.gms.common.internal.zzab.zzhs(Unknown Source)
                   at com.google.android.gms.internal.zzafl$zza$zza.<init>(Unknown Source)
                   at com.google.firebase.auth.FirebaseAuth.zza(Unknown Source)
                   at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
                   at com.google.android.gms.internal.zzafw.<init>(Unknown Source)
                   at com.google.firebase.auth.FirebaseAuth.zzc(Unknown Source)
                   at com.google.firebase.auth.FirebaseAuth.zzb(Unknown Source)
                   at com.google.firebase.auth.FirebaseAuth.getInstance(Unknown Source)
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at java.lang.reflect.Method.invoke(Method.java:372) 
                   at com.google.firebase.FirebaseApp.zza(Unknown Source) 
                   at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
                   at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
                   at com.google.firebase.FirebaseApp.zzeh(Unknown Source) 
                   at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source) 
                   at android.content.ContentProvider.attachInfo(ContentProvider.java:1696) 
                   at android.content.ContentProvider.attachInfo(ContentProvider.java:1671) 
                   at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source) 
                   at android.app.ActivityThread.installProvider(ActivityThread.java:4999) 
                   at android.app.ActivityThread.installContentProviders(ActivityThread.java:4594) 
                   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4534) 
                   at android.app.ActivityThread.access$1500(ActivityThread.java:151) 
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                   at android.os.Looper.loop(Looper.java:135) 
                   at android.app.ActivityThread.main(ActivityThread.java:5254) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at java.lang.reflect.Method.invoke(Method.java:372) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
W/ResourcesManager: Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
W/ResourcesManager: Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
D/ChimeraCfgMgr: Reading stored module config
I/DynamiteModule: Considering local module com.google.android.gms.flags:0 and remote module com.google.android.gms.flags:1
I/DynamiteModule: Selected remote version of com.google.android.gms.flags, version >= 1
I/art: Background sticky concurrent mark sweep GC freed 889(190KB) AllocSpace objects, 8(312KB) LOS objects, 12% free, 3MB/4MB, paused 5.892ms total 35.575ms
W/DynamiteModule: Local module descriptor class for com.google.android.gms.crash not found.
I/DynamiteModule: Considering local module com.google.android.gms.crash:0 and remote module com.google.android.gms.crash:3
I/DynamiteModule: Selected remote version of com.google.android.gms.crash, version >= 3
I/art: Background partial concurrent mark sweep GC freed 878(186KB) AllocSpace objects, 8(177KB) LOS objects, 39% free, 3MB/6MB, paused 6.096ms total 49.027ms
D/ChimeraFileApk: Primary ABI of requesting process is x86
D/ChimeraFileApk: Classloading successful. Optimized code found.
I/FirebaseCrashApiImpl: FirebaseCrashApiImpl created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/data/com.google.android.gms/app_chimera/m/00000002/DynamiteModulesC_GmsCore_prodlmp_alldpi_release.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]]
I/DynamiteModule: Considering local module com.google.android.gms.flags:0 and remote module com.google.android.gms.flags:1
I/DynamiteModule: Selected remote version of com.google.android.gms.flags, version >= 1
E/FirebaseCrash: Failed to initialize crash reporting
                 java.lang.RuntimeException: Missing an expected resource: 'R.string.google_api_key' for initializing Google services.  Possible causes are missing google-services.json or com.google.gms.google-services gradle plugin.
                     at com.google.firebase.crash.internal.api.FirebaseCrashApiImpl.init(:com.google.android.gms.DynamiteModulesC:1089)
                     at bqs.onTransact(:com.google.android.gms.DynamiteModulesC:60)
                     at android.os.Binder.transact(Binder.java:380)
                     at com.google.firebase.crash.internal.zzd$zza$zza.zza(Unknown Source)
                     at com.google.firebase.crash.FirebaseCrash.<init>(Unknown Source)
                     at com.google.firebase.crash.FirebaseCrash.getInstance(Unknown Source)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at java.lang.reflect.Method.invoke(Method.java:372)
                     at com.google.firebase.FirebaseApp.zza(Unknown Source)
                     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
                     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
                     at com.google.firebase.FirebaseApp.zzeh(Unknown Source)
                     at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
                     at android.content.ContentProvider.attachInfo(ContentProvider.java:1696)
                     at android.content.ContentProvider.attachInfo(ContentProvider.java:1671)
                     at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
                     at android.app.ActivityThread.installProvider(ActivityThread.java:4999)
                     at android.app.ActivityThread.installContentProviders(ActivityThread.java:4594)
                     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4534)
                     at android.app.ActivityThread.access$1500(ActivityThread.java:151)
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
                     at android.os.Handler.dispatchMessage(Handler.java:102)
                     at android.os.Looper.loop(Looper.java:135)
                     at android.app.ActivityThread.main(ActivityThread.java:5254)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at java.lang.reflect.Method.invoke(Method.java:372)
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
I/FA: App measurement is starting up, version: 9256
I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
D/FA: Debug logging enabled
D/FA: AppMeasurement singleton hash: 181984923
V/FA: Collection enabled
V/FA: App package, google app id: com.example.francydarkcool.maps, angular-yen-123616
V/FA: Registered activity lifecycle callback
I/FirebaseInitProvider: FirebaseApp initialization successful
W/FA: Measurement Service called with unknown id version: angular-yen-123616
V/FA: Using measurement service
V/FA: Connecting to remote service
V/FA: onActivityCreated
W/art: Suspending all threads took: 8.612ms
I/art: Background sticky concurrent mark sweep GC freed 7219(1116KB) AllocSpace objects, 29(628KB) LOS objects, 27% free, 4MB/6MB, paused 11.350ms total 48.117ms
I/zzae: Making Creator dynamically
D/ChimeraFileApk: Primary ABI of requesting process is x86
D/ChimeraFileApk: Classloading successful. Optimized code found.
I/Google Maps Android API: Google Play services client version: 9256000
I/Google Maps Android API: Google Play services package version: 9256270
I/c: Token loaded from file. Expires in: 30813655 ms.
I/c: Scheduling next attempt in 30513 seconds.
V/FA: Activity resumed, time: 125857
D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                  [ 07-24 12:04:31.463  2501: 2501 D/         ]
                  HostConnection::get() New Host Connection established 0xa282ed00, tid 2501
D/Atlas: Validating map...
D/AndroidRuntime: Shutting down VM


                  --------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.francydarkcool.maps, PID: 2501
                  java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference
                      at com.example.francydarkcool.maps.MapsActivity.setUpMap(MapsActivity.java:149)
                      at com.example.francydarkcool.maps.MapsActivity.access$100(MapsActivity.java:18)
                      at com.example.francydarkcool.maps.MapsActivity$1.onMapReady(MapsActivity.java:46)
                      at com.google.android.gms.maps.MapFragment$zza$1.zza(Unknown Source)
                      at com.google.android.gms.maps.internal.zzp$zza.onTransact(Unknown Source)
                      at android.os.Binder.transact(Binder.java:380)
                      at xk.a(:com.google.android.gms.DynamiteModulesB:82)
                      at maps.af.t$5.run(Unknown Source)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5254)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found.
I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:1
I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 1
D/ChimeraFileApk: Primary ABI of requesting process is x86
D/ChimeraFileApk: Classloading successful. Optimized code found.
D/GoogleCertificates: com.google.android.gms.googlecertificates module is loaded
D/GoogleCertificatesImpl: Fetched 318 Google certificates
I/Process: Sending signal. PID: 2501 SIG: 9
Application terminated.

这是gradle.build文件:

apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion '24.0.0'
defaultConfig {
    applicationId "com.example.francydarkcool.maps"
    minSdkVersion 16
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
productFlavors {
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.android.gms:play-services:9.2.1'
compile 'com.google.android.gms:play-services-maps:9.2.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha4'
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v4:24.1.0'
}

您有google_maps_api.xml文件吗?

您需要注册一个Google Maps API密钥。 有关使用Google服务还需要什么的更多信息。 请在步骤4下查看以下文档。

https://developers.google.com/maps/documentation/android-api/start

第4步。获取Google Maps API密钥

您的应用程序需要API密钥才能访问Google Maps服务器。 您需要的密钥类型是Android应用程序的密钥。 钥匙是免费的。 您可以将其与任何调用Google Maps Android API的应用程序一起使用,并且它支持无限数量的用户。

选择以下一种方式来获取API密钥:

快速简便的方法:使用Android Studio为您创建的google_maps_api.xml文件中提供的链接:

复制google_maps_api.xml文件中提供的链接,并将其粘贴到浏览器中。 该链接将带您到Google API控制台,并通过URL参数提供信息,从而减少了您需要的手动输入。 按照说明在控制台上创建一个新项目或选择一个现有项目。 为您的控制台项目创建一个Android API密钥。 复制生成的API密钥,返回到Android Studio,然后将API密钥粘贴到google_maps_api.xml文件中的元素中。 一种不太快的方法:使用Android Studio为您创建的google_maps_api.xml文件中提供的凭据:

复制google_maps_api.xml文件中提供的凭据。 在浏览器中转到Google API控制台。 使用复制的凭据将您的应用添加到现有的API密钥或创建新的API密钥。 有关更多详细信息,请参见完整过程。 获取API密钥的完整过程:如果以上两种方法都不适合您的情况,请按照完整过程进行操作。

具体来说,您可以按照以下步骤下载并复制Android应用程序的google-services.json文件来解决此问题:

从此链接中选择您的应用程序/项目名称和Android程序包名称,然后单击继续以选择和配置服务。 单击继续以生成配置文件。 下载google-services.json并将文件复制到Android项目中的app /或mobile / module目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM