Android开发经验谈Android开发

求助Android Studio 3.6崩溃的问题

2020-04-14  本文已影响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 都已经解决了

上一篇下一篇

猜你喜欢

热点阅读