我的情况是:我从家里远程办公并通过Windows远程桌面登录我的工作机器.我在我的工作计算机上使用Eclipse作为Android应用程序的开发环境.
使用ADB,我希望能够将应用程序从我的工作计算机部署到家庭网络上的设备,以用于模拟器不能正常运行的情况.
我发现这篇文章讨论了一个非常类似的场景,除了部署到在本地PC上运行的仿真器,而不是部署到本地设备:
http://www.41post.com/5003/programming/android-adb-remote-emulator-access
我正在尝试采取相同的步骤,但弄清楚如何在家庭WiFi网络上定位本地设备并连接到我的本地家用PC,而不是本地模拟器.
现在,我已经设置了远程PC,尝试连接到5585端口上的公共路由器IP - 但是在我的路由器中,我将哪个IP /端口转发到本地设备?
在使用仿真器的示例中,它们转发到运行仿真器的本地PC地址和端口5555,并且adb未在本地PC上运行.我已经将我的路由器配置为转发到我的设备IP,设备在WiFi上,以及设备被连接的本地PC IP.
但是在这两种情况下,当我尝试adb connect <routerIP>:5585
使用远程PC时,它会给我一个错误unable to connect to <routerIP>:5585:5585
.尝试转发/收听其他端口时,我得到相同的响应.我在路由器日志中没有收到任何安全错误,因此端口转发似乎正在运行.
问题:
我已经设置了SSH来设置从Android Studio(3.0.1 - Build#AI-171.4443003)和IntelliJ(2017.3.4 - Build 173.4548.28)的Github进行身份验证,一切正常,直到昨天(2018年2月22日) .
突然今天(2018年2月23日)当我试图在IntelliJ或Android Studio中向Github推送任何东西时,它失败了,我在"版本控制台"中收到了这条消息:
16:41:14.159: [onebusaway-android] git -c core.quotepath=false pull --progress --no-stat -v --progress upstream master
java.io.IOException: There was a problem while connecting to github.com:22
at com.trilead.ssh2.Connection.connect(Connection.java:791)
at com.trilead.ssh2.Connection.connect(Connection.java:577)
at org.jetbrains.git4idea.ssh.SSHMain.start(SSHMain.java:172)
at org.jetbrains.git4idea.ssh.SSHMain.main(SSHMain.java:138)
Caused by: java.io.IOException: Key exchange was not finished, connection is closed.
at com.trilead.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:92)
at com.trilead.ssh2.transport.TransportManager.getConnectionInfo(TransportManager.java:230)
at com.trilead.ssh2.Connection.connect(Connection.java:743)
... 3 more
Caused by: java.io.IOException: Cannot negotiate, proposals do not match.
at com.trilead.ssh2.transport.KexManager.handleMessage(KexManager.java:413)
at com.trilead.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:754)
at com.trilead.ssh2.transport.TransportManager$1.run(TransportManager.java:469)
at java.lang.Thread.run(Thread.java:745)
fatal: Could not read …
Run Code Online (Sandbox Code Playgroud) 我们在Travis的Android项目的第一次甚至第二次执行拉取请求时看到很多构建失败.但是,如果我们重新启动完全相同的构建,它最终会通过.
这是失败时的错误:
:onebusaway-android:connectedAndroidTest
09:48:14 E/Device: Error during shell execution: null
Unable to install /home/travis/build/OneBusAway/onebusaway-android/onebusaway-android/build/outputs/apk/onebusaway-android-debug.apk
com.android.ddmlib.InstallException
at com.android.ddmlib.Device.installPackages(Device.java:927)
at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:105)
at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:125)
at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:48)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.ddmlib.ShellCommandUnresponsiveException
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:513)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:390)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:359)
at com.android.ddmlib.Device.executeShellCommand(Device.java:566)
at com.android.ddmlib.Device.createMultiInstallSession(Device.java:987)
at com.android.ddmlib.Device.installPackages(Device.java:884)
... 9 more
com.android.builder.testing.ConnectedDevice > runTests[test(AVD) - 5.0.1] FAILED
com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException
at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:108)
null
com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException
at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:108)
at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:125)
at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:48)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在两台独立的Windows机器上将Android Studio从0.5.1更新到0.5.2,一台使用Windows 7 Pro 64位,另一台使用Windows 7 Enterprise 64位.
我得到了正常的更新提示:
...如果我选择"更新并重新启动",则会下载补丁并退出IDE,但随后会出现以下对话框:
我无法更改任何"解决方案"列条目.如果我单击"继续",我会收到如下所示的消息(图像和文本,因此其复制/粘贴/搜索友好):
Temp. directory: C:\Users\Sean\AppData\Local\Temp\
java.io.FileNotFoundException: C:\Program Files (x86)\Android\android-studio\lib\jsch.agentproxy.usocket-nc.jar (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at com.intellij.updater.Utils.copyStreamToFile(Utils.java:135)
at com.intellij.updater.CreateAction.doApply(CreateAction.java:52)
at com.intellij.updater.PatchAction.apply(PatchAction.java:140)
at com.intellij.updater.Patch$3.forEach(Patch.java:198)
at com.intellij.updater.Patch.forEach(Patch.java:248)
at com.intellij.updater.Patch.apply(Patch.java:194)
at com.intellij.updater.PatchFileCreator.apply(PatchFileCreator.java:86)
at com.intellij.updater.PatchFileCreator.apply(PatchFileCreator.java:77)
at com.intellij.updater.Runner.doInstallImpl(Runner.java:307)
at com.intellij.updater.Runner.doInstall(Runner.java:268)
at com.intellij.updater.Runner.access$000(Runner.java:18)
at com.intellij.updater.Runner$2.execute(Runner.java:258)
at com.intellij.updater.SwingUpdaterUI$7.run(SwingUpdaterUI.java:230)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)
当我点击"退出"时,Android Studio会重新打开,并告诉我更新仍然可用.
我之前在两台机器上使用相同的方法更新了Android Studio,没有任何问题.
由于我认为这是针对较新版本的Android Studio的某种错误,因此我在AOSP问题跟踪器上打开了问题67794.
编辑
我今天能够在两台机器上从0.5.2更新到0.5.3而不会遇到这个问题.我在以前的成功更新中看到了JetBrains安装程序的Windows安全提示,并且更新已成功完成,而无需启动具有提升权限的Android Studio.所以,似乎问题是0.5.1或0.5.2补丁特有的.
编辑
尝试从Android Studio 0.6.0更新到0.6.1时遇到类似的错误:
温度.目录:C:\ Users\barbeau\AppData\Local\Temp \
+ ----------------文件操作失败.这可能是由于文件被另一个应用程序锁定.请尝试关闭使用正在更新的文件的任何应用程序,然后按"重试".+ ----------------
com.intellij.updater.RetryException:无法在com的com.intellij.updater.BaseUpdateAction.replaceUpdated(BaseUpdateAction.java:40)中删除文件C:\ Program Files(x86)\ …
我正在尝试将Android项目从使用API Level 19 SDK和构建工具更新到最新的API Level 21,包括Google API.在此更新之前,Travis上的所有内容都运行良好(例如,请参阅此版本).
当我使用新的API级别运行时,我看到以下错误:
0.42s$ echo no | android create avd --force -n test -t "Google Inc.:Google APIs:"$ANDROID_API_LEVEL --abi $ANDROID_ABI
Valid ABIs: no ABIs.
Error: Invalid --abi armeabi-v7a for the selected target.
The command "echo no | android create avd --force -n test -t "Google Inc.:Google APIs:"$ANDROID_API_LEVEL --abi $ANDROID_ABI" failed and exited with 1
Run Code Online (Sandbox Code Playgroud)
有关完整的Travis输出,请参阅此构建.
这是我的.travis.yml:
language: android
jdk: oraclejdk7
# Turn off caching to avoid any caching problems
cache: false
# …
Run Code Online (Sandbox Code Playgroud) 我似乎无法从命令行获取Gradle命令来使用API 23 Google API模拟器图像(Google APIs ARM (armeabi-v7a)
) - 我总是得到一个com.android.ddmlib.ShellCommandUnresponsiveException
.
重现步骤:
Google APIs ARM (armeabi-v7a)
gradlew installDebug
命令行你会看到的:
:demo:assembleDebug:demo:installDebug FAILED
FAILURE:构建因异常而失败.
- 什么地方出了错:
任务':demo:installDebug'的执行失败.com.android.builder.testing.api.DeviceException:com.android.ddmlib.ShellCommandUnresponsiveException
如果你跑,gradlew connectedCheck
你会看到类似的错误:
- 出了什么问题:任务执行失败':library:connectedDebugAndroidTest'.com.android.builder.testing.api.TestException:com.android.builder.testing.api.DeviceException:com.android.ddmlib.ShellCommandUnresponsiveException
我可以安装/运行Android Studio(1.4)中的项目和测试,没有任何问题.
从命令行,Gradle命令似乎在API 21 Google API仿真器映像上正常运行.
以下是Travis for API 23 Google API模拟器映像的示例失败:
https://travis-ci.org/barbeau/android-maps-utils/builds/83233500
...以及使用API 21 Google API仿真器映像时的成功构建示例:
https://travis-ci.org/barbeau/android-maps-utils/builds/83234555
这两个版本之间的唯一区别是Google API模拟器API级别为23对21:
https://github.com/barbeau/android-maps-utils/commit/a5eecd7e7a4fc899ecd5eaeae6826414fefeae70
编辑
我在这里就这个问题打开了一个AOSP问题:
android android-emulator android-studio android-gradle-plugin
当我向Android开源项目(AOSP)问题跟踪器报告问题时,它会要求我附上错误报告.
如何通过ADB生成此错误报告?
即使应用程序中没有任何内容发生,我也会在Android Maps API v2上看到地图上的标记.
这是一个行为视频:
我所期待的
标记应保持固定在原来添加的纬度/经度.
哪些步骤将重现该问题?
git clone https://github.com/OneBusAway/onebusaway-android.git
git checkout v2.0.6
gradlew installObaGoogleDebug
adb shell am start -n com.joulespersecond.seattlebusbot/org.onebusaway.android.ui.HomeActivity
我应该补充一点,我不能总是重现这一点.似乎一切都运行正常,但是当标记开始跳转时它们不会停止.
标记实施细节
加载用于9种标记类型(8个方向+无方向)的图标的代码位于:https: //github.com/OneBusAway/onebusaway-android/blob/master/onebusaway-android/src/google/java/组织/ onebusaway /安卓/地图/ googlemapsv2/StopOverlay.java#L175
我正在使用这个drawable:https: //github.com/OneBusAway/onebusaway-android/blob/master/onebusaway-android/src/main/res/drawable/map_stop_icon.xml
...这是一些形状 - 这创建了主要的绿色圆圈,白色轮廓和下降阴影.然后,我在8个方向中的每一个方向上绘制方向箭头 - 绘图方向的代码在这里:
在加载图标的代码中,我在第一次加载时为每个9种图标类型缓存BitmapDescriptor
返回的内容BitmapDescriptorFactory.fromBitmap()
,因此每次在地图上放置标记时都不会这样做.
我还看到应用程序崩溃"不幸的是,OneBusAway已停止." 让应用程序在地图屏幕上停留几分钟后,在Logcat中看到此异常:
08-10 16:40:02.422 15843-15929/com.joulespersecond.seattlebusbot E/AndroidRuntime? FATAL EXCEPTION: GLThread 8614
Process: com.joulespersecond.seattlebusbot, PID: 15843
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:831)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:449) …
Run Code Online (Sandbox Code Playgroud) 在阅读Google Play服务设置文档时,听起来像Froyo Rev. 12的Google Play服务应该与Android 2.3及更高版本向前兼容.
但是,我在Github的GPSTest应用程序中实现了这个问题,目前包括Froyo的Google Play服务.
如果我尝试使用以下元素使用Google Play Services for Froyo Rev. 12构建项目:
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
Run Code Online (Sandbox Code Playgroud)
...包含在AndroidManifest.xml中,我收到一个构建错误:
Error: No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version').
Run Code Online (Sandbox Code Playgroud)
这是预期的(根据我目前的理解),因为这个整数在Froyo项目的Google Play服务中不存在(sdk\extras\google\google_play_services_froyo\res\values).
如果我从清单中删除这个元素,它在通过Eclipse构建和调试应用程序时可以正常工作(正如我所料).但是,当我导出APK时,安装在设备上(三星Galaxy S3 Android 4.3,谷歌播放服务v4.0.34 - 从Dropbox下载导出的APK),并运行,我在启动时收到以下错误,应用程序崩溃:
java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml
does not have the right value. Expected 4030500 but found 0. You must have the
following declaration within the <application> element:
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
at …
Run Code Online (Sandbox Code Playgroud) 在我们的应用程序OneBusAway Android(Github上的开源)中,我们需要在用户解除特定提醒通知时收到通知,因此我们不会针对同一事件发布另一个提醒通知(他们的公共汽车到达多长时间).
我们通过侦听一个这样Intent
在我们的应用程序,注册为DeleteIntent
用Notification
.当用户解除通知时(通过轻扫通知或点击通知窗口中的清除按钮),我们的应用程序应该收到通知Intent
.
从测试来看,似乎使用Google Play上的当前版本(以及Github上的当前主分支),我们的应用程序从未在以下Android版本中收到DeleteIntent:
然而,确切的相同的代码DOES工作(即,登记为DeleteIntent意图是由该应用接收到的)上:
我查看了以下涉及DeleteIntent的SO帖子,并且列出的所有解决方案都不适用于Android 4.4.3和4.4.4:
当前工作的主分支使用服务来侦听Intent.但是,基于上面的一些帖子,我确实调整了一些代码,使其更符合使用BroadcastReceiver监听Intent的工作示例.
使用BroadcastReceiver的代码位于以下Github分支中:
https://github.com/CUTR-at-USF/onebusaway-android/tree/issue104-RepeatingReminders
下面是我当前版本的外观(仍适用于Android 4.1.2及更低版本,但不适用于4.4.3或4.4.4)的摘录,以及指向Github源的链接:
创建通知
private Notification createNotification(Uri alertUri) {
//Log.d(TAG, "Creating notification for alert: " + alertUri);
Intent deleteIntent = new Intent(mContext, AlarmReceiver.class);
deleteIntent.setAction(TripService.ACTION_CANCEL);
deleteIntent.setData(alertUri);
return new NotificationCompat.Builder(mContext)
.setSmallIcon(R.drawable.ic_stat_notification) …
Run Code Online (Sandbox Code Playgroud) java android android-intent android-notifications android-pendingintent