这个问题花了我一上午时间,想了想,还是记录下来:
首先AndResGuard是没有任何问题的,应该加的whiteList
都加完全了,但就是一运行就崩:
java.lang.RuntimeException: Unable to create application xxx MainApp: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.wyp.crosshair:backgroundProcess. Make sure to call FirebaseApp.initializeApp(Context) first.
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6465)
反正意思就是FirebaseApp.initializeApp
没有主动调用。
第一次报这种错误是没有加AndResGuard
也报,这个就比较好分析,发现是两个service放在了独立进程中:
<service
android:name=".service.PremiumService"
android:enabled="true"
android:exported="false"
android:process=":backgroundProcess" />
所以主动在MainApp中调用FirebaseApp.initializeApp
即可解决。
之后加上AndResGuard
, 发现又报上面的错误了,我都主动调了FirebaseApp.initializeApp
,那唯一的可能就是如下了,AndResGuard
并没有keep住whiteList
。
public static FirebaseOptions fromResource(@NonNull Context context) {
StringResourceValueReader reader = new StringResourceValueReader(context);
String applicationId = reader.getString(APP_ID_RESOURCE_NAME);google_app_id
if (TextUtils.isEmpty(applicationId)) { // 这里为空了
return null;
}
return new FirebaseOptions(
applicationId,
reader.getString(API_KEY_RESOURCE_NAME),
reader.getString(DATABASE_URL_RESOURCE_NAME),
reader.getString(GA_TRACKING_ID_RESOURCE_NAME),
reader.getString(GCM_SENDER_ID_RESOURCE_NAME),
reader.getString(STORAGE_BUCKET_RESOURCE_NAME),
reader.getString(PROJECT_ID_RESOURCE_NAME));
}
这时首先想的是自己主动获取上面的值,强制赋值,如下:
public void onCreate() {
super.onCreate();
// String applicationId = "1:213226519161:android:315d3419313141dcdf32a8";
// FirebaseOptions.Builder builder = new FirebaseOptions.Builder();
// builder.setApplicationId(applicationId);
// builder.setApiKey("AIzaSyBGKkXue2KCRRErqfyk3HIuD-j_Y20gAfE");
// builder.setDatabaseUrl("https://crosshair-d2532.firebaseio.com");
// builder.setGaTrackingId(null); // google 的跟踪id,可不提供,以停用跟踪功能
// builder.setGcmSenderId("213226519161");
// builder.setStorageBucket("crosshair-d2532.appspot.com");
// builder.setProjectId("crosshair-d2532");
// if (builder != null) {
// FirebaseApp.initializeApp(this, builder.build());
// }
sApp = this;
RemoteConfig.getInstance().fetchFromRemote();
AdsUtils.initialize(MainApp.getApp());
}
}
搞定收工。
最后还是纠结了下,没理由啊,说不过去啊!,想着最近升级了Android studio,所以尝试把
classpath "com.android.tools.build:gradle:4.1.0"
降成了
classpath "com.android.tools.build:gradle:4.0.0"
嗯,可以了,就是这么坑!!!!