PhoneGap 2.2 ne lance pas l’évenement onReady sur Android 4.2.1

Sur une application PhoneGap 2.2 que je développe en freelance, j’ai eu la mauvaise surprise de chercher longtemps pourquoi mon premier écran ne se lançait jamais sous Android 4.2.1. Debugs, console.log, alerts, etc rien n’y faisait.

Mon application Sencha Touch qui était donc contenue dans ce projet PhoneGap ne se lançait pas. En cherchant, je suis tombé sur ce thread : il s’avère que c’est un problème dans Cordova/PhoneGap.

Afin de corriger ça, vous devez patchez la librairie, en particulier le fichier CordovaWebView.exposeJsInterface avec ceci :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void exposeJsInterface() {
    int SDK_INT = Build.VERSION.SDK_INT;
    boolean isHoneycomb = (SDK_INT >= Build.VERSION_CODES.HONEYCOMB && SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR2);
    if (isHoneycomb || (SDK_INT < Build.VERSION_CODES.GINGERBREAD)) {
        Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old.");
        // Bug being that Java Strings do not get converted to JS strings automatically.
        // This isn't hard to work-around on the JS side, but it's easier to just
        // use the prompt bridge instead.
        return;            
    } else if (SDK_INT < Build.VERSION_CODES.HONEYCOMB && Build.MANUFACTURER.equals("unknown")) {
        // addJavascriptInterface crashes on the 2.3 emulator.
        Log.i(TAG, "Disabled addJavascriptInterface() bridge callback due to a bug on the 2.3 emulator");
        return;
 
    } else if (SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1) {            
        Log.i(TAG, "Disabled addJavascriptInterface() bridge callback for 4.2");
        return;
 
    }
    this.addJavascriptInterface(exposedJsApi, "_cordovaNative");
}

Quelqu’un à même fait un JAR permettant de simplement remplacer le fichier.

La faille a apparament été corrigée dans PhoneGap Cordova 2.3.