白屏和崩溃 - Android Studio

Posted

技术标签:

【中文标题】白屏和崩溃 - Android Studio【英文标题】:White screen and crash - Android Studio 【发布时间】:2020-09-28 20:56:03 【问题描述】:

我一直在关注这个视频https://www.youtube.com/watch?v=Ok9v0YYgIG4 以开始使用 mapbox。 我已经完成了这个人在视频中所做的一切,但是当我在我的设备上启动应用程序时,我得到一个白屏,然后应用程序崩溃(即使我没有错误也没有警告)。有谁知道如何修复它并使其工作?

(现在,我只想在屏幕上放一张地图)

这里是 XML

<com.mapbox.mapboxsdk.maps.Mapview
        android:id="@+id/mapView"
        android:layout_
        android:layout_
        mapbox:mapbox_cameraTargetLat="6.641183"
        mapbox:mapbox_cameraTargetLng="46.7784736"
        mapbox:mapbox_styleUrl="mapbox://styles/mapbox/streets-v10"
        mapbox:mapbox_cameraZoom="12"
        />

这里是代码:

public class MapActivity extends AppCompatActivity 

    private MapView mapView;
    private MapboxMap map;

    public MapActivity() 
    

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        Mapbox.getInstance(this, "pk.eyJ1IjoidGlyYWlubyIsImEiOiJja2F6Y3ZyejQwaWJ6MnJtaWdmcmU3cjV5In0.5_0xHC_VyQUgyvUQ8IVNfA");
        setContentView(R.layout.activity_main);
        mapView = findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(new OnMapReadyCallback() 
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) 
                mapboxMap.setStyle(Style.MAPBOX_STREETS, new Style.OnStyleLoaded() 
                    @Override
                    public void onStyleLoaded(@NonNull Style style) 

                        // Map is set up and the style has loaded. Now you can add data or make other map adjustments.


                    
                );
            
        );

        //setContentView(R.layout.activity_map);
    

    @Override
    public void onMapReady(@NonNull MapboxMap mapboxMap) 
        map = mapboxMap;
        enableLocation();
    

    @Override
    public void onStart() 
        super.onStart();
        mapView.onStart();
    

    @Override
    public void onResume() 
        super.onResume();
        mapView.onResume();
    

    @Override
    public void onPause() 
        super.onPause();
        mapView.onPause();
    

    @Override
    public void onStop() 
        super.onStop();
        mapView.onStop();
    

    @Override
    public void onLowMemory() 
        super.onLowMemory();
        mapView.onLowMemory();
    

    @Override
    protected void onDestroy() 
        super.onDestroy();
        mapView.onDestroy();
    

    @Override
    protected void onSaveInstanceState(Bundle outState) 
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    

当我查看调试时,我得到了这个:

E/AndroidRuntime: 致命异常: main 进程:com.example.testmapbox,PID:25911 java.lang.RuntimeException:无法启动活动 ComponentInfocom.example.testmapbox/com.example.testmapbox.MainActivity:android.view.InflateException:二进制 XML 文件第 9 行:二进制 XML 文件第 9 行:膨胀类错误com.mapbox.mapboxsdk.maps.Mapview 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199) 在 android.os.Handler.dispatchMessage(Handler.java:112) 在 android.os.Looper.loop(Looper.java:216) 在 android.app.ActivityThread.main(ActivityThread.java:7625) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 引起:android.view.InflateException:二进制 XML 文件第 9 行:二进制 XML 文件第 9 行:膨胀类 com.mapbox.mapboxsdk.maps.Mapview 时出错 引起:android.view.InflateException:二进制 XML 文件第 9 行:膨胀类 com.mapbox.mapboxsdk.maps.Mapview 时出错 原因:java.lang.ClassNotFoundException:在路径上找不到类“com.mapbox.mapboxsdk.maps.Mapview”:DexPathList [[zip 文件“/data/app/com.example.testmapbox-yBfjzQOu9Iwzqc3V9nJN9g==/base .apk"],nativeLibraryDirectories=[/data/app/com.example.testmapbox-yBfjzQOu9Iwzqc3V9nJN9g==/lib/arm64, /data/app/com.example.testmapbox-yBfjzQOu9Iwzqc3V9nJN9g==/base.apk!/lib/arm64 -v8a、/system/lib64、/product/lib64]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:379) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 android.view.LayoutInflater.createView(LayoutInflater.java:613) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:801) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:874) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:835) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.example.testmapbox.MainActivity.onCreate(MainActivity.java:22) 在 android.app.Activity.performCreate(Activity.java:7458) 在 android.app.Activity.performCreate(Activity.java:7448) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1286) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3409) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199) 在 android.os.Handler.dispatchMessage(Handler.java:112) 在 android.os.Looper.loop(Looper.java:216) 在 android.app.ActivityThread.main(ActivityThread.java:7625) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

【问题讨论】:

您不应在帖子中包含您的 API 密钥。您可能想要生成一个新的 你有崩溃的堆栈跟踪吗? @MichaelKrussel 我编辑了我的帖子,不知道是不是你要求的。 So there error is java.lang.ClassNotFoundException: Didn't find class "com.mapbox.mapboxsdk.maps.Mapview" 看起来名字是对的,所以这是一些构建配置问题。可能是 R8 从 APK 中删除了该类,但这似乎不太可能,所以我不确定是什么导致了错误。 【参考方案1】:

能否分享一下项目级别的 build.gradle 和应用程序 build.gradle? youtube 视频没有提到项目级别 build.gradle 中所需的配置,所以我认为这可能会丢失。

请参阅此文档,了解需要哪些依赖项:https://docs.mapbox.com/android/maps/overview/#1-add-the-dependency

项目级build.gradle,添加这个:

repositories 
  mavenCentral()

应用级build.gradle,添加这个:

dependencies 
  implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.0'

另外,您的代码定义了两次 onMapReady 回调。您应该摆脱其中之一。

【讨论】:

以上是关于白屏和崩溃 - Android Studio的主要内容,如果未能解决你的问题,请参考以下文章

前端优化-如何计算白屏和首屏时间

浏览器的渲染机制,白屏和FOUC

我的OpenGL学习进阶之旅当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?

我的OpenGL学习进阶之旅当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?

Sencha触摸闪屏问题

9按android手机的电源键来黑屏和点亮屏幕,可以对app的功能产生影响,这里应用的技术是