Fra*_*ron 5 msbuild keytool jarsigner visual-studio xamarin.forms
我有一个 Xamarin.Forms Android 应用程序,使用 Visual Studio 2017 开发。如果我从 Visual Studio 运行/调试应用程序,使用 USB 设备,它运行良好(调试和发布配置)。
然后我使用 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
结果相同。
我发现了这个问题。
由于某些原因,下面指出的项目选项也在发布配置中设置。
在调试时,visual studio 确实将所有需要的资源转移到设备上,所以在这种情况下一切正常。
但是,msbuild /t:PackageForAndroid被嵌入.apk到运行应用程序所需的唯一资源中。
删除该检查确实解决了问题;在.apk从去3.6MB到16MB。
所以,这里是完整的操作序列:
.csproj,然后在其中运行以下命令:# 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.}
Run Code Online (Sandbox Code Playgroud)
最后一步 ( apksigner step)生成的 apk是好的。
路径[]是特定于平台的,可以避免更改机器的PATH环境变量。
部分{}是由用户选择的名称。
| 归档时间: |
|
| 查看次数: |
2715 次 |
| 最近记录: |