我使用Windows上的create.bat创建了一个应用,并使用ADT和最新的SDK进行了编译。
它启动并显示Cordova界面,但它无法触发deviceready事件,因为它一直显示“连接设备”。对于模拟器也是如此。但是,当我将模拟器的操作系统更改为4.0时,它可以工作。
这是正常现象吗?因为4.2刚刚发布,我需要等待更新吗?
我使用Windows上的create.bat创建了一个应用,并使用ADT和最新的SDK进行了编译。
它启动并显示Cordova界面,但它无法触发deviceready事件,因为它一直显示“连接设备”。对于模拟器也是如此。但是,当我将模拟器的操作系统更改为4.0时,它可以工作。
这是正常现象吗?因为4.2刚刚发布,我需要等待更新吗?
我在使用 Android 4.2 版本的 Nexus 7 上遇到了同样的问题,但是当我将 AndroidManifest 的 targetSdkVersion 改为 "16" 后就可以正常工作了。
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" /> (Before it was ="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");
}
<script type="text/javascript" src="phonegap.js"></script>
I put
<script type="text/javascript" src="cordova.js"></script>
android:targetSdkVersion="17"
是可以的。我通过删除js文件(Index.js)中的任何错误来解决了我的问题。
你必须确保你的JavaScript没有任何错误。