我有一个已经生产了2年的系统,是一个用于控制公司设备的EMM系统。
该系统使用FireBase
将从服务器应用程序发送到设备上执行的功能。
您可以向设备发送约400个可能的命令,并且所有这些命令最初都在一个类中处理,该类覆盖了 FireBaseMessagingService
类中的 onMessageReceived()
方法。
旧版本的Android Studio构建了目前正在生产中的apk。 我在休息了一年后开始着手开发第2版系统。 因此,我将我的Android Studio更新为最新版本(4)。
问题:
当我尝试构建项目并将其推送到设备时,我遇到了以下问题:
error: code too large public void onMessageReceived(RemoteMessage remoteMessage) {
如前所述,onMessageReceived
方法可以处理来自服务器应用的 400 种不同类型的推送通知,因此方法体中有很多 if/else 语句。
是否存在某种原因导致自从 AS 升级以来这将不再起作用?
有没有设置我可以在 AS 中更改以解决这个问题?
我尝试过:
我考虑把一半的 if/else 放到另一个服务类中,以减少方法代码。 这将涉及将 remoteMessageMap
传递给另一个类来继续进行 if/else 处理。
FireBase
的 remoteMessageMap
是一个 Map,而 Maps 不可序列化,因为它们扩展了接口,所以无法传递它。
public class MyAndroidFirebaseMsgService extends FirebaseMessagingService {
private static final String TAG = "MyAndroidFCMService";
AppObj appObj;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.e(TAG, "remoteMessage.getData() = " + remoteMessage.getData());
Map remoteMessageMap = remoteMessage.getData();
String message = (String)remoteMessageMap.get("message");
thanks
[edit1]
else if(message.trim().equalsIgnoreCase("CLEARCACHE_REMOVE_APP_WL")){
Log.e(TAG, "received CLEARCACHE_REMOVE_APP_WL");
String pushGuid = (String)remoteMessageMap.get("pushguid");
Log.e(TAG, "pushGuid = " + pushGuid);
String clearCacheRemoveWhitelist = (String)remoteMessageMap.get("clear_cache_app_names");
Intent intentExecutePushCommand = new Intent( getApplicationContext(), ExecutePushCommandIntentService.class);
intentExecutePushCommand.putExtra("compID", MenuActivity.companyID);
intentExecutePushCommand.putExtra("command", message);
intentExecutePushCommand.putExtra("pushguid", pushGuid);
intentExecutePushCommand.putExtra("clear_cache_app_names", clearCacheRemoveWhitelist);
startService(intentExecutePushCommand);
}else if(message.trim().equalsIgnoreCase("CLEARCACHE_GET_PACKAGENAMES_WL")){
Log.e(TAG, "received CLEARCACHE_GET_PACKAGENAMES_WL");
String pushGuid = (String)remoteMessageMap.get("pushguid");
Log.e(TAG, "pushGuid = " + pushGuid);
Intent intentExecutePushCommand = new Intent( getApplicationContext(), ExecutePushCommandIntentService.class);
intentExecutePushCommand.putExtra("compID", MenuActivity.companyID);
intentExecutePushCommand.putExtra("command", message);
intentExecutePushCommand.putExtra("pushguid", pushGuid);
startService(intentExecutePushCommand);
}else if(message.trim().equalsIgnoreCase("CLEARCACHE_ADD_PACKAGENAME_WL")){
Log.e(TAG, "received CLEARCACHE_ADD_PACKAGENAME_WL");
String pushGuid = (String)remoteMessageMap.get("pushguid");
Log.e(TAG, "pushGuid = " + pushGuid);
String packageName = (String)remoteMessageMap.get("package_name");
Intent intentExecutePushCommand = new Intent( getApplicationContext(), ExecutePushCommandIntentService.class);
intentExecutePushCommand.putExtra("compID", MenuActivity.companyID);
intentExecutePushCommand.putExtra("command", message);
intentExecutePushCommand.putExtra("pushguid", pushGuid);
intentExecutePushCommand.putExtra("package_name", packageName);
startService(intentExecutePushCommand);
}