Подтвердить что ты не робот

PhoneGap не запускает deviceready на Android 4.2

Я создал приложение с create.bat на windows и скомпилировал его с помощью ADT и последнего SDK.

Он запускает и отображает дисплей cordova, но он не запускает событие deviceready, поскольку он продолжает говорить "подключение к устройству". То же самое относится и к эмулятору. Он работает, когда я изменяю ОС на 4.0 для эмулятора.

Это нормально, потому что только что выпущено 4.2, и мне нужно ждать обновления?

4b9b3361

Ответ 1

Это 1 час ночи, и я наконец снова запустил приложение. Android 4.2 включает некоторые явно связанные с безопасностью изменения в webView.addJavascriptInterface, которые останавливают режим моста по умолчанию от работы.

Я ожидаю, что в следующей версии будет исправлено исправление, но если вам нужно быстрое исправление, попробуйте это обновление для CordovaWebView.exposeJsInterface

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 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");
}

Ответ 2

У меня была такая же проблема на моем Nexus 7 с Android 4.2 но он работает, когда я изменяю AndroidManifest targetSdkVersion на "16"

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />   (Before it was ="17")

Я надеюсь, что это сработает для кого-то.

Диего

Ответ 3

В моем случае автоматически сгенерированный index.html ссылался на phonegap.js

поэтому вместо

<script type="text/javascript" src="phonegap.js"></script>

Я положил

<script type="text/javascript" src="cordova.js"></script>

Ответ 4

По-видимому, это зафиксировано в Phonegap 2.3.0.

Также столкнулся с этой проблемой на Android 4.2, мой проект использовал Phonegap 2.2.

Обновлено после простая процедура обновления - проблема решена.

Следовательно, после обновления до 2.3.0 установка android:targetSdkVersion="17" снова будет в порядке.

Ответ 5

Другая причина этого в том, что ваш cordova-2.3.0.jar может не соответствовать версии файла cordova-2.3.0.js.

Ответ 6

Я решил свою проблему, удалив любую ошибку в js файле (Index.js).

вы должны убедиться, что у вас нет javascript ошибок.