RUDE

Установленный apk не запускается

Мне нужно написать пару тестов на фреймворке 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 не запускается

Я понятия не имею, почему, потому что оба используют один и тот же файл apk.

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

1
39
1

Ответ:

Решено

Хорошо, я нашел решение. Это немного запутано, и, возможно, есть более простое решение. Проблема, как я понял, заключается в том, что ваш apk и apk бэкэнда Instrumentation должны быть подписаны одним и тем же сертификатом.

Мои шаги:

  1. Я установил apk через команду adb: >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-287A943C412ED6ED5DEB1675E7FDF91843FD0807\20344\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\

Вы увидите что-то вроде этого:

enter image description here

  1. Удалите все и запустите тесты еще раз. После запуска появятся новые тестовые данные:

enter image description here

  1. Скопируйте команду из сообщения об ошибке выше, перейдите в C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin или каталог, где находится jarsigner.exe

  2. Выполнить команду после System.Exception : Failed to execute:

enter image description here

  1. Найдите SignedTestServer.apk и скопируйте его в папку, содержащую dummy.apk

enter image description here

  1. Запустим тесты еще раз и увидим, что появилось FinalTestServer.apk

enter image description here

PS Закрыть папку C:\Users\{user}\AppData\Local\Temp\uitest до 9.