global::Xamarin.Forms.Forms.Init(this, prm.Bundle)を呼び出す場所
Xamarin.Forms使って複数社に横展開してるアプリがあるんですが、初期処理を共通化しようとして共通のプロジェクトを作って
Android側ではglobal::Xamarin.Forms.Platform.Android.FormsAppCompatActivityを継承したMainActivityBaseクラスを作成、
そちらにいにしえのTemplateMethod的な感じで初期化処理を記述、MainActivitiyではMainActivityBaseを継承元とし各社で違うところをパラメータで渡すといった感じにしたんですが、アイコンが表示されない感じに。
同じコードをMainActivitiyのほうに持ってくると正常に動くっぽい。
同じコードなのになんで?と思いXamarin.Formsの初期化がらみかなーと
global::Xamarin.Forms.Forms.Init(this, prm.Bundle);
のデコンパイルされたコードを見ると
public static void Init(Context activity, Bundle bundle) { Assembly callingAssembly = Assembly.GetCallingAssembly(); Xamarin.Forms.Forms.SetupInit(activity, callingAssembly); }
という感じに呼び出し元Assembyをひっぱて何やらやってる様子。
初期化コードをBaseクラスに戻してXamarin.Forms.Init呼ぶのはMainActivitiyで呼ぶことにしてその部分をAction渡しで初期化コードから呼び出すようにしたら無事に動いた…かな?。
SetupInitの中で何やってるのかまでは見てませんが、一応変な現象が出て一応解決したっぽい?という報告まで。
ちなiOSのほうも共通プロジェクト内でForms.Init呼び出してましたが、そちらは今のところ変な結果にはなってないような。けどソース見てないので実はもしかしたらどこかに影響あるのかもしれません。