PhoneGap未在Android 4.2上启动DeviceRady

PhoneGap未在Android 4.2上启动DeviceRady,android,events,cordova,Android,Events,Cordova,我在windows上用create.bat创建了一个应用程序,并用ADT和最新的SDK编译了它 它启动并显示cordova显示屏,但不会触发deviceready事件,因为它一直在说“连接到设备”。这同样适用于仿真器。不过,当我将模拟器的操作系统更改为4.0时,它就可以工作了 这是否正常,因为4.2刚刚发布,我必须等待更新?现在是凌晨1点,我终于让我的应用程序再次运行。Android4.2对webView.addJavascriptInterface进行了一些明显与安全相关的更改,从而停止了默认

我在windows上用create.bat创建了一个应用程序,并用ADT和最新的SDK编译了它

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


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

现在是凌晨1点,我终于让我的应用程序再次运行。Android4.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");
}
private void exposeJsInterface(){
int SDK_int=Build.VERSION.SDK_int;

布尔值isHoneycomb=(SDK\u INT>=Build.VERSION\u CODES.HONEYCOMB&&SDK\u INT我在使用安卓4.2的Nexus7上遇到了同样的问题 但当我将AndroidManifest targetSdkVersion更改为“16”时,它就可以工作了

(之前为=“17”)
我希望这对某人有用


迭戈显然这是固定的

在安卓4.2上也遇到了这个问题,我的项目使用的是PhoneGap2.2

更新如下-问题已解决


因此,升级到2.3.0后,设置android:targetSdkVersion=“17”
再次正常。

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

在我的例子中,auto-generated index.html指的是phonegap.js

所以不是

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

我把

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

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


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

我不能在我的Mac电脑上复制这个。但是,我想我上周在帮助一个朋友安装时看到了类似的问题。我让他在4.0模拟器上运行。我将在周一挖出我的PC进行试验。啊,嗨,我是谷歌小组的同一个人。我在一个网站上得到了它emulator与4.0兼容,但我需要它在我的Nexus 7设备上与4.2兼容。我几乎尝试了所有方法并查看了logcat输出。DeviceRady事件从未出现。你能提供index.html的一些代码吗?@Dilberted我使用的是cordova的默认html。4.2似乎存在某种问题-我刚刚将我的应用程序部署到一个新的nex上美国7(4.1.1),在我安装系统更新之前,它一直工作得很好。如果你不喜欢在cordova内部挖掘,你可能需要等待有人进行更新。太棒了,它工作得很好!这是正在工作的cordova.jar,可以节省一些人的时间:你们是AMAZZIN!谢谢!我花了几个小时在这上面,真是救命啊om Clarkson和@elias94xx非常感谢大家!!!我一整天都犯了一个错误--未捕获的TypeError:Object没有方法“exec”-只是因为没有启动deviceReady函数,我没有注意到。竖起大拇指!!对于我的目的来说已经足够好了,比另一个答案简单多了。一个字符修复!对我来说+1我使用Phonegap 2.8.1现在仍然会遇到这个问题。Soooo sh*ttty!和更改目标似乎对我不起作用。同样的问题也发生在我身上。我似乎是使用“phonegap创建”而不是“cordova创建”创建项目的。如果您在构建过程中阅读警告说明,您将注意到一条消息,该消息将建议您使用cordova.js。
<script type="text/javascript" src="cordova.js"></script>