在家躲疫情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]]
可运行的配置
按这个配置是可以正常运行的。
第三方库
如图中所述,升级到最新版本那么就会崩溃。按现在的版本是可以正常运行,虽然打包时会出现错误
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 都已经解决了
网友评论