美文网首页Android开发经验谈Android开发
求助Android Studio 3.6崩溃的问题

求助Android Studio 3.6崩溃的问题

作者: 蝴蝶之梦天使 | 来源:发表于2020-04-14 10:32 被阅读0次

    在家躲疫情2个多月后开工,发现IDE,第三方库都已经翻天覆地的更新了,很好,干起来。一顿操作后,不是崩溃就无法运行。

    问题一 (已解决)

    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference
    

    问题二(已解决)

    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.*.*.AppDelegate" on path: DexPathList[[zip file "/data/app/com.*.*-a9mg2XHoJ1j8nC_2AKCW9g==/base.apk"],nativeLibraryDirectories=[/data/app/com.*.*-a9mg2XHoJ1j8nC_2AKCW9g==/lib/arm, /data/app/com.*.*-a9mg2XHoJ1j8nC_2AKCW9g==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /product/lib]]
    

    可运行的配置

    按这个配置是可以正常运行的。

    target版本
    第三方库
    如图中所述,升级到最新版本那么就会崩溃。按现在的版本是可以正常运行,虽然打包时会出现错误Entry name 'res/layout/udesk_chat_msg_item_imgt_r.xml' collided,进行一次clean后再试可以成功。

    升级androidx版本

    升级androidx.appcompat:appcompat和com.google.android.material:material到最新版本。


    1.1.0

    运行app后能正常运行,但是当界面做返回操作时就会出现错误。


    crash
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference
    

    报一个空指针的崩溃。
    点击崩溃的代码为super.onDestroy();

        @Override
        protected void onDestroy() {
            if (isBindEventBus() && EventBus.getDefault().isRegistered(this)) {
                EventBus.getDefault().unregister(this);
            }
            if (mPresenter != null) {
                mPresenter.onDestroy();
                mPresenter = null;
            }
            unSubscribe();//解除订阅
            this.mCompositeSubscription = null;
            super.onDestroy();
        }
    

    不升级版本是可以正常运行的。

    解法方法

    查看了BaseFragment的代码后,发现之前为解决一个问题使用了:

    @Override
        public void onDetach() {
            super.onDetach();
            // for bug ---> java.lang.IllegalStateException: Activity has been destroyed
            try {
                Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
                childFragmentManager.setAccessible(true);
                childFragmentManager.set(this, null);
            } catch (NoSuchFieldException e) {
                throw new RuntimeException(e);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
            mActivity = null;
            mContext = null;
        }
    

    为了解决一个bug添加的一个方法,现在因为这个方法导致了空指针崩溃。!_!

    升级com.squareup.retrofit2

    将com.squareup.retrofit2相关的版本升级到2.8.1版本。


    最新版本

    这时会出现app无法在手机设备上安装的问题,报错误:


    错误
    无法正常的运行
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.*.*.AppDelegate" on path: DexPathList[[zip file "/data/app/com.*.*-a9mg2XHoJ1j8nC_2AKCW9g==/base.apk"],nativeLibraryDirectories=[/data/app/com.*.*-a9mg2XHoJ1j8nC_2AKCW9g==/lib/arm, /data/app/com.*.*-a9mg2XHoJ1j8nC_2AKCW9g==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /product/lib]]
    

    将包名替换成了*,免得查水表。

    解放方法

    原来是升级到最版本后,针对class的编译方式也要升级,所以在build.gradle的配置中添加

    android {
        compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
    }
    

    运行正常。包括之后使用CameraX的最新版本也是一样的问题。GOOD。

    // TODO 都已经解决了

    相关文章

      网友评论

        本文标题:求助Android Studio 3.6崩溃的问题

        本文链接:https://www.haomeiwen.com/subject/csqzmhtx.html