我有一个使用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
结果相同。
答案 0 :(得分:1)
我发现了这个问题。
由于某些原因,下面指出的项目选项也在发布配置中设置。
调试时,visual studio确实将所有需要的资源传输到设备,因此在这种情况下一切正常。
但是, msbuild / t:PackageForAndroid 只是在.apk中嵌入了运行应用程序所需的部分资源。
删除该检查确实解决了问题; .apk从3.6到16 MB。
所以,这里是完整的操作序列:
一个。 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环境变量。
{}中的部分是用户选择的名称。