【问题标题】:Xamarin.Forms android application built from command line doesn't work从命令行构建的 Xamarin.Forms android 应用程序不起作用
【发布时间】:2018-08-25 02:02:19
【问题描述】:

我有一个使用 Visual Studio 2017 开发的 Xamarin.Forms Android 应用程序。 如果我使用 USB 设备从 Visual Studio 运行/调试应用程序,它运行良好(调试和发布配置)。

然后我使用 Visual Studio 中的存档命令创建 .apk。为了测试它,我只需从我的开发人员上传它。计算机到谷歌驱动器,然后从同一设备下载并安装它。这也有效。

当我尝试从命令行创建 .apk 时,问题就出现了。以这种方式获得的文件被设备识别并正确安装,但是当我启动应用程序时,它似乎启动但一秒钟后它突然关闭。 我什至没有看到在开发阶段出现异常时出现的熟悉的弹出窗口“不幸的是应用程序停止了”。

这些是我使用的命令:

msbuild /t:Clean /p:Configuration=Release

msbuild /t:PackageForAndroid /p:Configuration=Release

keytool -genkey -v -keystore SymCheck.keystore -alias SimCheck -keyalg RSA -keysize 2048 -validity 10000

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore SymCheck.keystore my_application.apk SimCheck

根据https://docs.microsoft.com/en-gb/xamarin/android/deploy-test/signing/manually-signing-the-apk

我也试过这个序列

msbuild /t:Clean /p:Configuration=Release

msbuild /t:PackageForAndroid /p:Configuration=Release

keytool -genkey -v -keystore SymCheck.keystore -alias SimCheck -keyalg RSA -keysize 2048 -validity 10000

zipalign.exe -f -v 4 my_application.apk my_application_aligned.apk

apksigner.bat 签名 --ks SymCheck.keystore --ks-key-alias SimCheck my_application_aligned.apk

结果相同。

【问题讨论】:

  • 查看设备日志 (Logcat) 了解更多详情。您可以为此使用 Android 设备监视器。

标签: visual-studio xamarin.forms msbuild keytool jarsigner


【解决方案1】:

我发现了问题。

由于某些原因,下面显示的项目选项也在发布配置中设置。

在调试时,Visual Studio 确实将所有需要的资源转移到了设备上,所以在这种情况下一切正常。

但是,msbuild /t:PackageForAndroid 仅嵌入了.apk 中运行应用程序所需的部分资源。

删除该检查确实解决了问题; .apk3.6MB 变为 16MB

所以,这里是完整的操作序列:

  • 确保为发布配置禁用快速部署
  • .csproj所在的目录中打开Visual Studio命令提示符,然后在其中运行以下命令:
# clean step
msbuild /t:Clean /p:Configuration=Release

# build step
msbuild /t:PackageForAndroid /p:Configuration=Release

# keytool step
"[c:\Program Files (x86)\Java\jdk1.8.0_161\bin\\]keytool.exe" -genkey -v -keystore <a filename for keystore> -alias {a string} -keyalg RSA -keysize 2048 -validity 10000

# jarsigner step
"[c:\Program Files (x86)\Android\android-sdk\build-tools\\{version e.g. 27.0.1}\\]zipalign.exe" -f -v 4 bin\Release\\{file apk created by msbuild in step build step} bin\Release\\{output apk filename}

# apksigner step
"[c:\Program Files (x86)\Android\android-sdk\build-tools\\{version e.g. 27.0.1}\\]apksigner.bat" sign --ks {filename for keystore chosen in step c.} --ks-key-alias {alias string chosen in keytool step.} bin\Release\\{output apk filename from zipalign step.}

最后一步生成的apk (apksigner step) 是好的。

[] 中的路径是特定于平台的,可以避免更改机器的 PATH 环境变量。

{} 中的部分是由用户选择的名称。

【讨论】:

  • 感谢您在这里分享您的解决方案,您可以在获得任何其他更好的答案之前将其作为答案。这可能对阅读此主题的其他社区成员有所帮助。
  • 在 24 小时过去之前不允许我这样做......我现在已经做到了。
  • 请注意,您只需要使用 keytool 生成一次密钥。您应该为所有未来版本使用相同的密钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2023-04-08
  • 2015-07-11
相关资源
最近更新 更多