从命令行构建的Xamarin.Forms android应用程序不起作用

时间:2018-03-16 04:44:33

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

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

然后我在visual studio中使用archive命令创建.apk。为了测试它,我只需从我的dev上传它。计算机到谷歌驱动器,然后从同一设备下载并安装它。这也有效。

当我尝试从命令行创建.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 sign --ks SymCheck.keystore --ks-key-alias SimCheck   my_application_aligned.apk

结果相同。

1 个答案:

答案 0 :(得分:1)

我发现了这个问题。

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

调试时,visual studio确实将所有需要的资源传输到设备,因此在这种情况下一切正常。

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

删除该检查确实解决了问题; .apk从3.6到16 MB。

enter image description here

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

  • 确保为发布配置禁用快速部署
  • 在.csproj所在的目录上打开Visual Studio命令提示符,然后在其中运行以下命令:

一个。 msbuild / t:清洁/ p:配置=发布

msbuild / t:PackageForAndroid / p:Configuration = Release

℃。 “[c:\ Program Files(x86)\ Java \ jdk1.8.0_161 \ bin \] keytool.exe”-genkey -v -keystore -alias {a string} -keyalg RSA -keysize 2048 -validity 10000 < /强>

d。 “[c:\ Program Files(x86)\ Android \ android-sdk \ build-tools \ {version eg 27.0.1} \] zipalign.exe”-f -v 4 bin \ Release \ {file apk created by msbuild in b。} bin \ Release \ {output apk filename}

“[c:\ Program Files(x86)\ Android \ android-sdk \ build-tools \ {version eg 27.0.1} \] apksigner.bat”sign --ks {在步骤c中选择的密钥库的文件名。 } --ks-key-alias {在步骤c中选择的别名字符串。} bin \ Release \ {从步骤d输出apk文件名。}

使用步骤e生成的apk是好的。

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

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