react native 集成 cn.jiguang.imui android 混淆报错(java.lang.NoSuchMethodException: <init> [class android)

在React Native项目中集成react-native-imui后,遇到Android端因代码混淆导致的运行时异常。错误信息为java.lang.NoSuchMethodException。问题源于未在混淆配置文件中排除IMUI的相关类。解决方案是在混淆规则中添加-keep指令,保护cn.jiguang.imui包下的所有类不被混淆,从而避免应用崩溃。

react native集成react-native-imui

问题:react native集成IM之后, android开启代码混淆, 点击即时通讯消息列表即崩溃出现以下报错

07-06 15:33:17.108 22467-22467/? W/System.err: java.lang.NoSuchMethodException: <init> [class android.support.v7.widget.RecyclerView$Adapter, class android.view.View, boolean]
        at java.lang.Class.getConstructor0(Class.java:2320)
        at java.lang.Class.getDeclaredConstructor(Class.java:2166)
        at cn.jiguang.imui.messages.MsgListAdapter.getHolder(MsgListAdapter.java:329)
        at cn.jiguang.imui.messages.MsgListAdapter.onCreateViewHolder(MsgListAdapter.java:202)
        at cn.jiguang.imui.messages.MsgListAdapter.onCreateViewHolder(MsgListAdapter.java:45)
        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6367)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5555)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
        at android.view.View.layout(View.java:19781)
        at android.view.ViewGroup.layout(ViewGroup.java:6144)
        at com.scwang.smartrefresh.layout.impl.RefreshContentWrapper.layout(RefreshContentWrapper.java:232)
        at com.scwang.smartrefresh.layout.SmartRefreshLayout.onLayout(SmartRefreshLayout.java:664)
        at android.view.View.layout(View.java:19781)
        at android.view.ViewGroup.layout(ViewGroup.java:6144)
07-06 15:33:17.109 22467-22467/? W/System.err:     at com.facebook.react.uimanager.NativeViewHierarchyManager.updateLayout(NativeViewHierarchyManager.java:205)
        at com.facebook.react.uimanager.NativeViewHierarchyManager.updateLayout(NativeViewHierarchyManager.java:190)
        at com.facebook.react.uimanager.UIViewOperationQueue$UpdateLayoutOperation.execute(UIViewOperationQueue.java:128)
        at com.facebook.react.uimanager.UIViewOperationQueue$1.run(UIViewOperationQueue.java:819)
        at com.facebook.react.uimanager.UIViewOperationQueue.flushPendingBatches(UIViewOperationQueue.java:926)
        at com.facebook.react.uimanager.UIViewOperationQueue.access$2100(UIViewOperationQueue.java:47)
        at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(UIViewOperationQueue.java:986)
        at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:31)
        at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:136)
        at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(ChoreographerCompat.java:107)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:979)
        at android.view.Choreographer.doCallbacks(Choreographer.java:790)
        at android.view.Choreographer.doFrame(Choreographer.java:718)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:967)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7425)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
07-06 15:33:17.120 407-407/? W//system/bin/hwservicemanager: Cannot open /odm/manifest.xml
 java.lang.NullPointerException: Attempt to write to field 'int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null object reference
        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6368)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5555)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
        at android.view.View.layout(View.java:19781)
        at android.view.ViewGroup.layout(ViewGroup.java:6144)
        at com.scwang.smartrefresh.layout.impl.RefreshContentWrapper.layout(RefreshContentWrapper.java:232)
        at com.scwang.smartrefresh.layout.SmartRefreshLayout.onLayout(SmartRefreshLayout.java:664)
        at android.view.View.layout(View.java:19781)
        at android.view.ViewGroup.layout(ViewGroup.java:6144)
        at com.facebook.react.uimanager.NativeViewHierarchyManager.updateLayout(NativeViewHierarchyManager.java:205)
        at com.facebook.react.uimanager.NativeViewHierarchyManager.updateLayout(NativeViewHierarchyManager.java:190)
        at com.facebook.react.uimanager.UIViewOperationQueue$UpdateLayoutOperation.execute(UIViewOperationQueue.java:128)
        at com.facebook.react.uimanager.UIViewOperationQueue$1.run(UIViewOperationQueue.java:819)
        at com.facebook.react.uimanager.UIViewOperationQueue.flushPendingBatches(UIViewOperationQueue.java:926)
        at com.facebook.react.uimanager.UIViewOperationQueue.access$2100(UIViewOperationQueue.java:47)
        at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(UIViewOperationQueue.java:986)
        at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:31)
        at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:136)
        at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(ChoreographerCompat.java:107)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:979)
        at android.view.Choreographer.doCallbacks(Choreographer.java:790)
        at android.view.Choreographer.doFrame(Choreographer.java:718)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:967)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7425)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
07-06 15:33:17.177 639-1430/? E/ActivityManager: The same pid with last one, do not add dropbox and clear mLastCrashedPid. mLastAppCrashedPid==22467
07-06 15:33:17.178 639-1430/? W/ActivityManager:   Force finishing activity com.daimler.isp.qa/com.ispmobile.MainActivity

原因:开启代码混淆,没有忽略imui的类, 导致crash

集成第三库的时候一定要看清楚人家给的readme,上面写的清清楚楚

Progurad
Add the proguard-rule below if you need to obfuscate your code:
-keep class cn.jiguang.imui.** { *; }

解决方法:在代码混淆文件中加入 -keep class cn.jiguang.imui. * * { *; }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值