[Cordova] 包含 AdMob 外掛的 app,一執行就當機?
最近修改了 Android app,傳到 Genymotion 模擬器 裡面測試,
不過卻一直出現「程式意外結束」的錯誤訊息…
原本以為是 Genymotion 出了什麼問題,
可是將 app 安裝到實體手機也是一樣當掉,這下問題可就大了…
老實說沒有什麼頭緒…
上一次的修改已經是半年前,這次的修改也只是改 JavaScript,
照理來說不可能會因此一開 app 就當掉…
懷疑是 Cordova 出了問題,
但更新 Cordova 版本、更新所有用到的 Cordova 外掛、
甚至是移除再重新安裝 Cordova 的 android 平台支援,也都毫無幫助…
後來爬文,看到有人建議用 logcat 看看問題發生時有無 log 訊息,
這真是個好主意,立馬執行 adb logcat -v time 指令,
同時一邊在模擬器中開啟我的 app,
果然在 app 當掉的同時,logcat 也顯示出許多的錯誤訊息如下:
10-13 16:10:36.234 E/AndroidRuntime( 1878): FATAL EXCEPTION: main 10-13 16:10:36.234 E/AndroidRuntime( 1878): Process: idv.ephrain.multilibrarylogin, PID: 1878 10-13 16:10:36.234 E/AndroidRuntime( 1878): java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException: 10-13 16:10:36.234 E/AndroidRuntime( 1878): 10-13 16:10:36.234 E/AndroidRuntime( 1878): ****************************************************************************** 10-13 16:10:36.234 E/AndroidRuntime( 1878): * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers * 10-13 16:10:36.234 E/AndroidRuntime( 1878): * should follow the instructions here: https://goo.gl/fQ2neu to add a valid * 10-13 16:10:36.234 E/AndroidRuntime( 1878): * App ID inside the AndroidManifest. Google Ad Manager publishers should * 10-13 16:10:36.234 E/AndroidRuntime( 1878): * follow instructions here: https://goo.gl/h17b6x. * 10-13 16:10:36.234 E/AndroidRuntime( 1878): ****************************************************************************** 10-13 16:10:36.234 E/AndroidRuntime( 1878): 10-13 16:10:36.234 E/AndroidRuntime( 1878): 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.app.ActivityThread.installProvider(ActivityThread.java:6288) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.app.ActivityThread.installContentProviders(ActivityThread.java:5851) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5772) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.app.ActivityThread.-wrap1(Unknown Source:0) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.os.Handler.dispatchMessage(Handler.java:105) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.os.Looper.loop(Looper.java:164) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at android.app.ActivityThread.main(ActivityThread.java:6541) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at java.lang.reflect.Method.invoke(Native Method) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 10-13 16:10:36.234 E/AndroidRuntime( 1878): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 10-13 16:10:36.234 E/AndroidRuntime( 1878): Caused by: java.lang.IllegalStateException:
從訊息來看,是說有使用 admob 廣告的 app,
必須要把 App ID 寫在 AndroidManifest 上面才行。
查了一下,這是新版 AdMob SDK 的要求,
而我原本是使用 cordova-plugin-admobpro 這個外掛,
看來已經很久沒有更新,大概是因為這樣,
舊版的外掛沒辦法提供 App ID,才導致我的 app 當掉…
手動測試一下,將 cordova-plugin-admobpro 外掛移除的話,
app 執行時就不會當掉了,可見的確是外掛造成的問題…
解決方法也很簡單,先改用其他最近有持續更新的 AdMob 外掛。
我後來是改用 cordova-plugin-admob-free,就不再有當掉的問題了~
這次多虧有 logcat 的幫忙,不然找破頭也找不出來程式當掉的原因啊…