gpt4 book ai didi

android - 如何从 CI 对 APK 进行测试?

转载 作者:行者123 更新时间:2023-12-03 03:54:10 26 4
gpt4 key购买 nike

我有一个 CI 服务器可以从 GIT 构建 APK,它运行良好。
我需要在 CI 服务器生成的版本上启动自动测试(UI Automator)。为了实现它,我:

  • 通过命令 gradlew assembleDebug 设置 CI 服务器以构建带有测试的 APK .我还尝试使用 gradlew assembleDebug -Pandroid.injected.signing.store.file=/path/to/keystore.jks -Pandroid.injected.signing.store.password=password1 -Pandroid.injected.signing.key.alias=myapp -Pandroid.injected.signing.key.password=password2 构建它
  • 尝试使用命令 adb.exe shell am instrument -w -r -e debug false -e package com.mysite.myapp com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner 启动它

  • 而且没有运气。我收到一个错误:
    java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner} from pid=4922, uid=4922 not allowed be
    cause package com.mysite.myapp.test does not have a signature matching the target com.mysite.myapp
    at android.os.Parcel.createException(Parcel.java:2071)
    at android.os.Parcel.readException(Parcel.java:2039)
    at android.os.Parcel.readException(Parcel.java:1987)
    at android.app.IActivityManager$Stub$Proxy.startInstrumentation(IActivityManager.java:5441)
    at com.android.commands.am.Instrument.run(Instrument.java:512)
    at com.android.commands.am.Am.runInstrument(Am.java:196)
    at com.android.commands.am.Am.onRun(Am.java:80)
    at com.android.internal.os.BaseCommand.run(BaseCommand.java:56)
    at com.android.commands.am.Am.main(Am.java:50)
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:338)
    INSTRUMENTATION_STATUS: Error=Permission Denial: starting instrumentation ComponentInfo{com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner} from pid=4922, uid=4922 not allowed b
    ecause package com.mysite.myapp.test does not have a signature matching the target com.mysite.myapp
    INSTRUMENTATION_STATUS: id=ActivityManagerService
    INSTRUMENTATION_STATUS_CODE: -1
    Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.am.ActivityManagerService.startInstrumentation(ActivityManagerService.java:15744)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2350)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2741)
    at android.os.Binder.execTransactInternal(Binder.java:1021)
    at android.os.Binder.execTransact(Binder.java:994)
    它是如何工作的?我猜 APK 里面已经包含测试,不需要安装一些额外的代码......或者我也必须在 CI 上构建测试?如何使用 CI 中的 APK 在本地计算机上启动测试?

    最佳答案

    您的应用程序的调试变体可能存在签名问题,因为插桩测试默认使用调试变体。唯一的判断方法是检查 build.gradle你的应用程序模块的文件,看看是什么signingConfigs被应用。
    我的建议是尝试以下方法。因为最终 CI 只是运行一个命令脚本,所以在你的开发机器上测试它,看看它是否成功:

  • 打开命令终端并运行以下命令,这些命令将构建您的应用程序和调试变体中的 Android 检测测试,然后将它们都安装到连接的 Android 设备上:
  • gradlew clean
  • gradlew assembleDebug assembleDebugAndroidTest installDebug installDebugAndroidTest

  • 启动检测的测试用例:
  • adb.exe shell am instrument -w -r -e debug false -e package com.mysite.myapp com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner


  • 如果异常 java.lang.SecurityException仍然出现,那么这应该更多地表明 APK 的签名不正确。

    关于android - 如何从 CI 对 APK 进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62879055/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com