27

我在 windows 上使用 create.bat 创建了一个应用程序,并使用 ADT 和最新的 SDK 对其进行了编译。

它启动并显示cordova显示,但它不会触发deviceready事件,因为它一直在说“连接到设备”。这同样适用于模拟器。不过,当我将模拟器的操作系统更改为 4.0 时,它可以工作。

这是否正常,因为 4.2 刚刚发布,我必须等待更新?

4

6 回答 6

29

我在装有 Android 4.2 的 Nexus 7 上遇到了同样的问题,但是当我将 AndroidManifest targetSdkVersion 更改为“16”时它可以工作

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

我希望这对某人有用。

迭戈

于 2012-11-20T14:54:37.313 回答
17

现在是凌晨 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'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");
}
于 2012-11-19T14:16:43.047 回答
9

在我的情况下,自动生成的 index.html 指的是phonegap.js

所以而不是

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

我放

<script type="text/javascript" src="cordova.js"></script>
于 2013-09-26T14:49:20.330 回答
2

显然,这已在Phonegap 2.3.0中修复。

在 Android 4.2 上也遇到了这个问题,我的项目使用的是 Phonegap 2.2。

按照这个简单的升级程序进行更新- 问题已解决。

因此,升级到 2.3.0 后,android:targetSdkVersion="17"再次设置即可。

于 2013-01-22T05:33:06.120 回答
0

另一个原因是您的 cordova-2.3.0.jar 可能与 cordova-2.3.0.js 文件版本不匹配。

于 2013-01-28T10:56:00.420 回答
0

我通过删除 js 文件(Index.js)中的任何错误解决了我的问题。

您必须确保您的 javascript 没有任何错误。

于 2015-01-31T06:26:38.843 回答