小编Sea*_*eau的帖子

如何为远程计算机开发和本地设备部署设置ADB

我的情况是:我从家里远程办公并通过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.尝试转发/收听其他端口时,我得到相同的响应.我在路由器日志中没有收到任何安全错误,因此端口转发似乎正在运行.

问题:

  • 在我的本地网络上配置端口转发以使用远程adb实例连接到本地设备时,我应该转发哪些本地IP /端口号?
  • 我应该定位设备所连接的本地PC IP还是本地设备IP?
  • 如果我定位本地设备IP,我应该转发哪个端口号?
  • 我是否需要在本地PC上运行adb?

android remote-debugging adb

37
推荐指数
6
解决办法
4万
查看次数

在Android Studio和IntelliJ中,推/拉到Github已被破坏

我已经设置了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)

git ssh github intellij-idea android-studio

22
推荐指数
2
解决办法
1607
查看次数

使用ShellCommandUnresponsiveException在Travis上进行Android测试失败

我们在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)

android travis-ci

20
推荐指数
1
解决办法
6338
查看次数

无法更新Android Studio - Access Denied和java.io.FileNotFoundException

我正在尝试在两台独立的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 android-studio

18
推荐指数
3
解决办法
2万
查看次数

使用Google API"选择目标无效--abi armeabi-v7a"

我正在尝试将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)

android travis-ci

16
推荐指数
2
解决办法
9760
查看次数

API 23 Google API仿真器映像上的Gradle命令失败(armeabi-v7a)

我似乎无法从命令行获取Gradle命令来使用API​​ 23 Google API模拟器图像(Google APIs ARM (armeabi-v7a)) - 我总是得到一个com.android.ddmlib.ShellCommandUnresponsiveException.

重现步骤:

  1. 使用API​​ 23创建AVD Google APIs ARM (armeabi-v7a)
  2. 克隆https://github.com/googlemaps/android-maps-utils(或使用您自己的项目)
  3. 运行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问题:

https://code.google.com/p/android/issues/detail?id=190200

android android-emulator android-studio android-gradle-plugin

13
推荐指数
1
解决办法
4410
查看次数

如何通过ADB将Android错误报告写入文件?

当我向Android开源项目(AOSP)问题跟踪器报告问题时,它会要求我附上错误报告.

如何通过ADB生成此错误报告?

android adb

12
推荐指数
2
解决办法
2万
查看次数

Android Maps API v2上的跳跃标记

即使应用程序中没有任何内容发生,我也会在Android Maps API v2上看到地图上的标记.

这是一个行为视频:

https://youtu.be/cOUGD0T5Ojs

我所期待的

标记应保持固定在原来添加的纬度/经度.

哪些步骤将重现该问题?

    1. 构建,安装和运行OneBusAway的v2.0.6标记:
      • 一个. git clone https://github.com/OneBusAway/onebusaway-android.git
      • git checkout v2.0.6
      • C. gradlew installObaGoogleDebug
      • d. adb shell am start -n com.joulespersecond.seattlebusbot/org.onebusaway.android.ui.HomeActivity
    1. 浏览到任何支持的城市(例如,西雅图或坦帕),并观看绿色巴士站标记在地图上跳跃

我应该补充一点,我不能总是重现这一点.似乎一切都运行正常,但是当标记开始跳转时它们不会停止.

标记实施细节

加载用于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个方向中的每一个方向上绘制方向箭头 - 绘图方向的代码在这里:

https://github.com/OneBusAway/onebusaway-android/blob/master/onebusaway-android/src/google/java/org/onebusaway/android/map/googlemapsv2/StopOverlay.java#L208

在加载图标的代码中,我在第一次加载时为每个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)

android google-play-services google-maps-android-api-2

10
推荐指数
1
解决办法
1694
查看次数

Froyo的Google Play服务是否与Android 2.3及更高版本兼容?

在阅读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)

eclipse android google-play-services

7
推荐指数
2
解决办法
1万
查看次数

在更高版本的Android上,通知DeleteIntent已损坏

在我们的应用程序OneBusAway Android(Github上的开源)中,我们需要在用户解除特定提醒通知时收到通知,因此我们不会针对同一事件发布另一个提醒通知(他们的公共汽车到达多长时间).

我们通过侦听一个这样Intent在我们的应用程序,注册为DeleteIntentNotification.当用户解除通知时(通过轻扫通知或点击通知窗口中的清除按钮),我们的应用程序应该收到通知Intent.

从测试来看,似乎使用Google Play上的当前版本(以及Github上当前主分支),我们的应用程序从未在以下Android版本中收到DeleteIntent:

  • Android 4.4.3
  • Android 4.4.4

然而,确切的相同的代码DOES工作(即,登记为DeleteIntent意图是由该应用接收到的)上:

  • Android 2.3.3
  • Android 2.3.6
  • Android 4.1.1
  • Android 4.1.2

我查看了以下涉及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源的链接:


创建通知

https://github.com/CUTR-at-USF/onebusaway-android/blob/issue104-RepeatingReminders/onebusaway-android/src/main/java/com/joulespersecond/seattlebusbot/tripservice/NotifierTask.java#L131

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

6
推荐指数
1
解决办法
3651
查看次数