上传的APK文件没有有效的签名,Firebase TestLab仪器测试类型。

20

我试图通过使用仪器测试类型的Firebase测试实验室来测试我的演示应用程序,但由于以下有关apk的错误,我无法进行测试。 enter image description here

我上传了已签名的debug-keystore apk。即使在我的其他项目中,我也上传了我自己签名的密钥库apk以及我的androidTest.apk,但仍显示相同的错误。如果我错过了一些重要的步骤,请指导我。谢谢。


这是v1签名还是v2签名?APK在build.gradle中是否具有debuggable true属性? - Prashant Sable
@Prashant Sable 是的,我尝试过使用v1和v2签名,并在发布版本类型中将debuggable标志设置为true。但我的Android测试apk app-debug-androidTest.apk 是默认生成的,这是当我们在设备上本地运行instrument时生成的。 - Zohaib Akram
上传 APK 时,Debuggable 标志应为 false 而不是 true。 - Prashant Sable
我尝试了两个选项,但在Firebase控制台上出现了相同的错误。 - Zohaib Akram
请检查下面的答案。 - Prashant Sable
显示剩余4条评论
8个回答

15

我也遇到了同样的问题。我尝试上传不同版本的APK文件 —— 签名的、未签名的、来自build\outputs\apk目录下的,以及将测试版与发行版APK文件组合在一起进行测试 —— 但都无法解决问题。

后来,我通过在Android Studio上的Firebase Test Lab Device Matrix上运行仪器化测试解决了问题(请参阅此处的步骤 https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#run-ctl)。然后,Android Studio会生成以下有效的APK文件:

build\outputs\apk\debug\-debug.apk
build\outputs\apk\androidTest\debug\-debug-androidTest.apk

当您上传这些生成的APK文件时,一切都能正常运行。

顺便提一下,如果您不想在Android Studio上实际运行测试,而只是要生成APK文件(我更喜欢通过firebase网站运行测试,因为它可以更好地控制设备、语言环境等),则可以定义一个不存在的设备和API级别组合,例如Emulator Pixel 2和API级别25。这样做可以让Android Studio生成APK文件,但实际上并不运行测试,据我所见也不会减少您每日的免费配额 :)。


在“构建仪器化测试”链接中,没有展示如何配置签署androidTest apk。你是如何实现测试APK的签署的? - MKE

11

我通过 Android Studio > Gradle 构建两个apk,这对我很有效。

进入图像说明

选择:

  1. assembleDebug
  2. assembleAndroidTest

然后在以下目录中找到apk:

  1. ...\app\build\outputs\apk\myFlavor\debug
  2. ...\app\build\outputs\apk\androidTest\myFlavor>\debug

(查看APK的日期,以确保这是刚刚构建的APK)

然后简单地将这些apk上传到Firebase Test Lab

顺便说一句,通过在 Android Studio > Edit Configuration...> Target > Firebase Test Lab Device Matrix 中运行也可以。


我不得不生成签名的APK文件,它位于app/release/目录下。 - TomTasche
1
对我来说很有效!但是如果你有多个版本,似乎任何assembleXXX任务都会编译所有版本的代码。如果你只需要为一个版本编译代码和测试,请转到build组的other组,那里你会找到更多“精确”的任务,如assembleDemoDebugassembleDemoDebugAndroidTests等。 - Mickäel A.

7

Firebase有各种设备。签名V2在Android 7中引入。如果apk安装在低版本设备上,则可能需要v1签名。在生成apk时,选择选项中的v1签名。签署v1可能会有所帮助。 enter image description here


我已经知道了。我也尝试过这些选项。我只选择了API级别为28的Google Pixel设备,但错误仍然相同 :(。 - Zohaib Akram

3

我遇到了同样的问题,问题出在测试APK签名上(似乎Firebase要求两个APK都要签名)。显然,由于我正在测试库模块仪器化测试,因此它未被签名。我建议首先检查两个APK的签名:

jarsigner -verify APK_FILE_PATH

如果您发现其中一个APK未签名,则需要深入挖掘您的项目设置。如果您想测试库模块,您可能会在此库的build.gradle中缺少 signingConfigs (通常情况下,如果您仅将库作为主应用程序的一部分提供,则该选项不会出现)。似乎Firebase完全支持应用程序的DEBUG版本和测试APK,因此您可能只需要在库的build.gradle中拥有debug.keystore签名即可。
android {
    ...
    
    signingConfigs {
        debug {
            storeFile file(PATH_TO_YOUR_DEBUG_KEYSTORE)
        }
    }
}


1
我知道现在可能有点晚了。但对我有效的解决方案是:

  1. 清理 Android Studio 项目。

  2. 构建 Apk。

  3. 上传 Apk 到测试实验室。

希望这个方法能够起作用。


1
我遇到过同样的问题,但我按照以下步骤解决了该问题:
  1. 在您的AndroidManifest.xml中添加android:testOnly="false"
  2. 重新构建apk

您可以在终端中测试构建的apk:adb install xxx/xxx.apk,如果您可以成功安装它在您的手机上。这意味着apk是正常的,然后您可以将apk上传到Firebase Test lab。


0

只需从...\YOU_PROJECT\app\build\outputs\apk\debug中查找apk文件

不要从...\YOU_PROJECT\app\debug中查找


0

我需要为我们的开发环境构建一个签名的apk,因此在android/app/build.gradle中添加了以下内容:

    signingConfigs {
        config {
            keyAlias 'someKeyAlias'
            keyPassword 'somePassword'
            storeFile file('../keystores/debug.keystore')
            storePassword 'somePassword'
        }
    }

        development {
            initWith release
            applicationIdSuffix '.development'
            versionNameSuffix '-DEVELOPMENT'
            matchingFallbacks = ['release']
            signingConfig signingConfigs.config
        }

/android/ 目录下,运行 ./gradlew assembleDevelopment
并且 Firebase 已经接受了它,请确保 APK 文件名上不要显示未签名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接