无法从 Appium 桌面应用程序启动应用程序。 apksigner 执行期间出错

Posted

技术标签:

【中文标题】无法从 Appium 桌面应用程序启动应用程序。 apksigner 执行期间出错【英文标题】:unable to start app from Appium Desktop app. Got an error during apksigner execution 【发布时间】:2019-08-01 09:48:21 【问题描述】:

处理命令时出现未知的服务器端错误。原始错误:无法使用默认证书签名。原始错误产生 ENOTDIR

我正在尝试使用 Appium 桌面应用程序启动一个 android 应用程序。 Appium 服务器显示如下错误日志;

开始'/home/santoshpc/Android/Sdk/build-tools/28.0.3/apksigner' 带参数 '["sign","--key","/tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/keys/testkey.pk8","--cert","/tmp/ .mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/keys/testkey.x509.pem","/tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks /appium-uiautomator2-server-debug-androidTest.apk"]' [ADB] apksigner 执行过程中出错:命令 '/home/santoshpc/Android/Sdk/build-tools/28.0.3/apksigner 签名 --key /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/keys/testkey.pk8 --cert /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/keys/testkey.x509.pem /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk' 以代码 1 [ADB] apksigner stderr 退出:线程“main”中的异常 java.nio.file.FileSystemException: /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk: 只读文件系统 [ADB] 位于 sun.nio.fs.UnixException.translateToIOException(UnixException.java:91) [亚行] 在 sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) [亚行] 在 sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) [ADB] 在 sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:447) [ADB] 在 sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262) [ADB] 在 java.nio.file.Files.move(Files.java:1395) [ADB] 在 com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:342) [亚行] 在 com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89) [ADB] [ADB] 无法使用 apksigner 工具进行签名。默认为 签名.jar。原始错误:命令 '/home/santoshpc/Android/Sdk/build-tools/28.0.3/apksigner 签名 --key /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/keys/testkey.pk8 --cert /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/keys/testkey.x509.pem /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk' 以代码 1 退出; StdErr:线程“主”中的异常 java.nio.file.FileSystemException: /tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk: 只读文件系统 [ADB] 位于 sun.nio.fs.UnixException.translateToIOException(UnixException.java:91) [亚行] 在 sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) [亚行] 在 sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) [ADB] 在 sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:447) [ADB] 在 sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262) [ADB] 在 java.nio.file.Files.move(Files.java:1395) [ADB] 在 com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:342) [亚行] 在 com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89) [ADB] [ADB] 辞职 apk。 [UiAutomator2] 删除 UiAutomator2 session [UiAutomator2] 删除 UiAutomator2 服务器会话 [WD 代理] 匹配 '/' 到命令名称 'deleteSession' [UiAutomator2] 没有得到 确认 UiAutomator2 deleteSession 工作;错误是: UnknownError:处理时发生未知的服务器端错误 命令。原始错误:尝试在没有代理的情况下代理会话命令 会话 ID [ADB] 正在运行 '/home/santoshpc/Android/Sdk/platform-tools/adb -P 5037 -s 0123456789ABCDEF shell am force-stop eu.niko.smart.naswi.main' [Logcat] 停止 logcat 捕获 [ADB] 删除转发端口套接字 连接:8200 [ADB] 正在运行 '/home/santoshpc/Android/Sdk/platform-tools/adb -P 5037 -s 0123456789ABCDEF forward --remove tcp:8200' [UiAutomator2] 无法 删除端口转发'执行 adbExec 时出错。原始错误:'命令 '/home/santoshpc/Android/Sdk/platform-tools/adb -P 5037 -s 0123456789ABCDEF forward --remove tcp:8200' exited with code 1'; Stderr:'错误:未找到侦听器'tcp:8200'';代码:'1'' [BaseDriver] 事件“newSessionStarted”记录在 1552282079530 (11:12:59 GMT+0545 (+0545)) [MJSONWP] 遇到内部错误 运行命令:错误:无法使用默认证书签名。 原始错误产生 ENOTDIR [MJSONWP] 于 ADB.apkSigningMethods.signWithDefaultCert (/tmp/.mount_AppiumGDrtg1/resources/app/node_modules/appium/node_modules/appium-adb/lib/tools/apk-signing.js:124:13) [HTTP] 删除 /wd/hub/session [HTTP] [HTTP] 找不到路由。环境 内容类型为 'text/plain' [HTTP]

我添加了以下 DesiredCapabilities


  "noReset": true,
  "automationName": "uiautomator2",
  "appPackage": "myapp package name",
  "appActivity": "my app activity name",
  "deviceName": "My device",
  "platformName": "android"

Appium 桌面版:1.11.1 操作系统 - ubuntu

【问题讨论】:

【参考方案1】:

这是位于位置 /usr/lib/node_modules/appium/node_modules/appium-adb/build/lib/tools 的“apk-signing.js”文件中的一个错误。

可能的解决方案:

    可能是权限问题。 appium 在没有 root 的情况下执行 特权,因此它无法对 apk 进行更改。执行appium 具有 root/admin 权限可以解决问题。 (仅当 apk-signing.js 没有错误) 它适用于特定的 appium 版本,因为它们没有 无错误 apk-signing.js 就像 appium 版本 1.7.2。

如果上述 2 不起作用,这是最终解决方案。你要修改文件apk-signing.js

./node-v6.11.4-linux-armv7l/lib/node_modules/appium/node_modules/appium-adb/build/lib/tools/apk-signing.js

所以即使看起来没有签名,它也会返回 true。如下所述编辑文件。

287 case 20:
288 context$1$0.prev = 20;
289 context$1$0.t0 = context$1$0’catch’;
290
291 _loggerJs2[‘default’].debug(“App not signed with debug cert.”);
292 return context$1$0.abrupt(‘return’, true);

请查看此链接以编辑文件并了解更多详细信息。

https://discuss.appium.io/t/appium-1-7-1-canot-singin-appium-uiautomator2-server-debug-androidtest-apk/19233/4

希望它会有所帮助。

【讨论】:

【参考方案2】:

对我来说,有效的方法是使用 Appium 桌面配置并将 JAVA_HOME

/usr/java/bin

/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

【讨论】:

以上是关于无法从 Appium 桌面应用程序启动应用程序。 apksigner 执行期间出错的主要内容,如果未能解决你的问题,请参考以下文章

自动化测试用例适用于 appium 命令行工具,但不适用于桌面客户端

Appium 桌面未在 MAC 中启动 Appium Inspector UI

appium1.6.4怎么安装

无法启动 Appium 会话,错误是:错误:启动应用程序需要参数“appPackage”

mac下面 ,启动2个桌面版appium的方法

Appium选择的IOS模拟器UUID在我的桌面上不存在