安卓远程调试Phonegap应用无法正常工作

16

您好,我正在尝试通过Chrome在我的设备上调试PhoneGap应用程序。 我已按照说明进行操作,并且通过adb devices命令识别出我的手机。

然后我转到chrome://inspect/#devices,我可以看到我的手机,但是浏览器上出现以下消息:

离线

0019C9AD7EF31F

等待验证:请在设备上接受调试会话。

问题在于我的手机上没有这样的消息。 我有一个带KitKat的三星Galaxy S2。 我将版本从4.1更新到4.4,因为我认为这可能是问题所在,但升级到4.4后问题仍然存在。

有人遇到过这个问题吗?


你已经为开发激活了你的手机吗? - Dawson Loudon
7个回答

17
问题在于,远程调试之前只适用于 Android 上的 Chrome 浏览器,而不适用于类似 Phonegap 使用的应用程序内的 Webview。但是随着 Android 4.4 (Kitkat) 和 Phonegap 3.3 的推出,这一问题已得到解决。
我在这里写了一篇博客文章: http://adamwadeharris.com/remote-debugging-in-phonegap-with-chrome-devtools/ 基本上,您需要在应用程序的主 Java 文件中启用 Webview 调试,并确保您的应用程序针对 API 版本 19 (Kitkat) 进行定位。如果没有带有 Kitkat 的设备,则可以使用模拟器代替。
以下是启用 Webview 调试的方法:
在 platforms/android/src/com/yourAppName/YourAppName.java 中,在其他导入语句下添加以下行:
import android.os.Build;
import android.webkit.WebView;

在onCreate方法中添加以下内容:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  WebView.setWebContentsDebuggingEnabled(true);
}

4
从Cordova/Phonegap 3.3+开始,这已经不再正确了。现在你只需要在AndroidManifest.xml中添加Debuggable标志。请参阅https://github.com/phonegap/phonegap/wiki/Debugging-in-PhoneGap#chrome-remote-debugging - Kris Erickson
2
如果您正在使用IntelliJ或Eclipse构建项目,那么添加Debuggable标志已经不再必要了,因为这些工具会自动为您添加它,并在生成签名的SDK时将其删除(请参阅https://dev59.com/RGkw5IYBdhLWcg3wdKfD)。 - Kris Erickson
在Jelly Bean中是否可能? - Vinz243
@Vinz243 我不这么认为,也许你可以尝试使用weinre(http://www.adamwadeharris.com/setup-remote-debugging-phonegap/) - MaicolBen
如果您的目标是< API版本19,但设备正在运行> 19,是否可以进行远程调试?我曾经认为这个问题已经解决了... - Michael

4

看起来这是手机上的一个bug。

我通过以下步骤进行修复:

  1. 选择开发者选项
  2. 取消USB调试授权
  3. 关闭并重新打开USB调试开关
  4. 连接到您的电脑
  5. 现在,只需接受两个授权对话框,并且它将在AndroidStudio和Chrome中正常工作。

4
正如评论中已经提到的,自cordova 3.3+和android 4.4+起,此功能即可开箱即用。在AndroidManifest.xml文件中不需要设置任何内容。
如果您使用 cordova buildcordova run 命令,则默认构建模式为“debug”。您可以通过生成的apk文件名中查看,它将类似于:

{app_name}-debug-unaligned.apk

在这种情况下,您只需要Chrome 32+版本,并选择 Chrome菜单 > 工具 > 检查设备(当然,前提是您已将应用程序部署到您的设备并启用了USB调试)。
有关其他信息,请参见: https://developer.chrome.com/devtools/docs/remote-debugging 关于身份验证问题... 当您首次运行 cordova android run 命令时,您的应用程序将被部署到您的手机上,您需要确认身份验证对话框并勾选记住您的选择。之后,您就可以在chrome检查器中检查已部署的应用程序。

1
我从未见过 Android 的身份验证对话框?这应该出现在你的电脑上,你是在构建还是在你的设备上? - commonpike
@commonpike 认证对话框将出现在设备本身上。 - flyingace

2
如果您正在使用Phonegap Build,请将以下内容添加到您的config.xml文件中,以便能够在Chrome开发控制台中检查webview。
首先,请确保您的widget标签包含xmlns:android="http://schemas.android.com/apk/res/android"。
<widget 
    xmlns="http://www.w3.org/ns/widgets" 
    xmlns:gap="http://phonegap.com/ns/1.0" 
    xmlns:android="http://schemas.android.com/apk/res/android"
    id="me.app.id" 
    version="1.0.0">

然后添加以下内容。
<gap:config-file platform="android" parent="/manifest">
     <application android:debuggable="true" />
</gap:config-file>

在我的Nexus 5和Phonegap 3.7.0上运行良好。

<preference name="phonegap-version" value="3.7.0" />

Source: https://www.genuitec.com/products/gapdebug/learning-center/configuration/


2
如果您看到“等待授权”一直闪烁,请尝试从设备中删除所有Chrome更新并降级到Chrome v.33。似乎在最新的Chrome版本之一中出现了问题(在Chrome v.44中遇到了此问题)。以下是相关问题的链接:https://code.google.com/p/chromium/issues/detail?id=512150

2

这里是另一种可能适用于某些人的解决方案

很久以前,我已经设置了Phonegap Build的证书签名,因此它会自动生成我的应用程序的“发布”版本。这已经是很久以前的事情了,我已经忘记了这个小细节。

如果要获得应用程序的调试版本,则必须在Phonegap Build页面上的安卓下拉菜单中明确选择未选择密钥。然后,当您下载生成的apk时,它将具有appname-debug.apk而不是appname-release.apk的名称。


-1

这对我来说很好:

adb logcat CordovaActivity:V CordovaLog:V Cm
CordovaWebView:V IceCreamCordovaWebViewClient:V *:S

1
不确定你的回答是否提供了足够的细节...但我对Android开发并不了解。 - Bernard Saucier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接