安装的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 必须签署相同的证书。
我的步数:
我通过 adb 命令安装了 apk:>adb.exe install ~\..\com.company.mobiledemo.apk
然后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;
}
然后尝试启动测试并出现错误:
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
没关系。
- 从错误消息打开文件夹:
C:\Users{user}\AppData\Local\Temp\uitest\
你会看到这样的东西:
- 删除所有并再次 运行 测试。启动后会出现新的测试数据:
从上面的错误消息中复制命令,转到 C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin
或位于 jarsigner.exe
的目录
在System.Exception : Failed to execute:
之后执行命令
- 找到
SignedTestServer.apk
并将其复制到包含 dummy.apk
的文件夹中
- 运行再次测试,发现
FinalTestServer.apk
出现了
PS 9.
前关闭文件夹 C:\Users\{user}\AppData\Local\Temp\uitest
我必须在 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 必须签署相同的证书。
我的步数:
我通过 adb 命令安装了 apk:
>adb.exe install ~\..\com.company.mobiledemo.apk
然后
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; }
然后尝试启动测试并出现错误:
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
没关系。
- 从错误消息打开文件夹:
C:\Users{user}\AppData\Local\Temp\uitest\
你会看到这样的东西:
- 删除所有并再次 运行 测试。启动后会出现新的测试数据:
从上面的错误消息中复制命令,转到
的目录C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin
或位于jarsigner.exe
在
之后执行命令System.Exception : Failed to execute:
- 找到
SignedTestServer.apk
并将其复制到包含dummy.apk
的文件夹中
- 运行再次测试,发现
FinalTestServer.apk
出现了
PS 9.
前关闭文件夹C:\Users\{user}\AppData\Local\Temp\uitest