安装的apk无法启动

Installed apk doesn't start

我必须在 Xamarin UI Test 框架上编写几个测试来检查模拟器上的 apk。我尝试以两种方式安装我的 apk:

1 adb.exe 安装 path\com.company.mobiledemo.apk

2 到 Xamarin UI Test

if (platform == Platform.Android)
{
    AndroidApp app = ConfigureApp.Android
        .ApkFile("path\com.company.mobiledemo.apk")
        .Debug()
        .EnableLocalScreenshots()
        .DeviceSerial("emulator-5554")
        .StartApp();

    return app;
}

在第一种方法中,apk 安装并正常工作。但是当通过上面的代码安装 apk 时,apk 将被安装但不会启动,只是在启动画面后停止。

我不知道为什么,因为两者使用相同的 apk 文件。

NUnit: 3.13.3
NUnit3TestAdapter: 4.2.1
Xamarin.UITest: 2.2.6
Emulator OS: Android 6.0 Api 23 

好的,我找到了解决方案。这有点混乱,也许有更简单的解决方法。据我了解,问题是您的 apk 和 Instrumentation 后端 apk 必须签署相同的证书。

我的步数:

  1. 我通过 adb 命令安装了 apk:>adb.exe install ~\..\com.company.mobiledemo.apk

  2. 然后AppInitializer.cs改成这样:

    if (platform == Platform.Android)
    {
        string keystore = "~\..\..\some.keystore";
        AndroidAppConfigurator appConfigurator = ConfigureApp.Android
            .KeyStore(
            keystore,
            "storePassword",
            "keyPassword",
            "\"keyAlias\""
            )
            .InstalledApp("com.company.mobiledemo.apk")
            .Debug()
            .EnableLocalScreenshots();
    
        AndroidApp app = appConfigurator.StartApp(AppDataMode.Clear);
        return app;
    }
    
  3. 然后尝试启动测试并出现错误:

System.Exception : Failed to execute: C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin\jarsigner.exe -sigalg SHA1withRSA -digestalg SHA1 -signedjar "C:\Users\{user}\AppData\Local\Temp\uitest\a-287A943C412ED6ED5DEB1675E7FDF91843FD0807344\SignedTestServer.apk" -storepass bla-bla -keypass bla-bla -keystore "~..\Mobile\Mobile.Android\Certificate\some.keystore" "C:\Users\{user}\AppData\Local\Temp\uitest\a-287A943C412ED6ED5DEB1675E7FDF91843FD0807\TestServer.apk" ""Key Alias"" - exit code: 1

Please type jarsigner -help for usage
Only one alias can be specified

没关系。

  1. 从错误消息打开文件夹:

C:\Users{user}\AppData\Local\Temp\uitest\

你会看到这样的东西:

  1. 删除所有并再次 运行 测试。启动后会出现新的测试数据:

  1. 从上面的错误消息中复制命令,转到 C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin 或位于 jarsigner.exe

    的目录
  2. System.Exception : Failed to execute:

    之后执行命令

  1. 找到 SignedTestServer.apk 并将其复制到包含 dummy.apk
  2. 的文件夹中

  1. 运行再次测试,发现FinalTestServer.apk出现了

PS 9.

前关闭文件夹 C:\Users\{user}\AppData\Local\Temp\uitest