无法从 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