as报错crash2: org.cocos2dx.lib.Cocos2dxHelper.unregisterBatteryLevelReceiver
报错org.cocos2dx.lib.Cocos2dxHelper.unregisterBatteryLevelReceiver
稳定的复现方法:从应用市场打开游戏,回到桌面,再从桌面点击游戏icon 热启动游戏,
过两三秒闪退。 分析了奔溃日志,发现错误集中在某几个平台,且同一手机上,有的渠道的包有这个问题,有的没有,可以确定是打出来的包的问题。
修改Cocos2dxHelper文件,确保所有调用 registerBatteryLevelReceiver 和 unregisterBatteryLevelReceiver 的逻辑。路径在这
ccbuild/jsb-default/frameworks/cocos2d-x/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java
改成这样
public class Cocos2dxHelper {
private static boolean isBatteryLevelReceiverRegistered = false;
// 其他代码保持不变
}
//然后改函数
static void registerBatteryLevelReceiver(Context context) {
if (!isBatteryLevelReceiverRegistered) {
Intent intent = context.registerReceiver(sBatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
sBatteryReceiver.setBatteryLevelByIntent(intent);
isBatteryLevelReceiverRegistered = true;
}
}
static void unregisterBatteryLevelReceiver(Context context) {
if (isBatteryLevelReceiverRegistered) {
try {
context.unregisterReceiver(sBatteryReceiver);
isBatteryLevelReceiverRegistered = false;
} catch (IllegalArgumentException e) {
// Ignore the exception if the receiver is not registered
}
}
}
直接修改原生的 Cocos2dxHelper 文件,可以修复重复调用 unregisterBatteryLevelReceiver 导致的 Receiver not registered 异常。
firebase事件,打点调试模式。
https://firebase.google.com/docs/analytics/debugview?hl=zh-cn