所以我试图将我的新Android应用程序发布到Google PlayStore。从阅读this教程开始,我了解到我必须在将应用程序发布到PlayStore之前对其进行签名。我和教程完全一样。将其上传到PlayStore后,我尝试在我的设备上安装该应用程序。我收到消息“包文件未正确签名”。这是strage ..在xamaran工作室,我收到消息“包成功签名”。
如果我尝试从设备上的apk安装应用程序,我收到消息“无法安装”
这里可能有什么问题?
我在Mac上使用Xamarin Studion。
答案 0 :(得分:8)
发现问题。这是一个JAVA工具问题。在系统上混合使用JDK和JRE工具时,这种情况经常发生。
不要使用Java 7中的工具!
仅使用JDK 6中的工具。 您可以输入以下内容来查看您的版本:
java -version
如果您仍然不确定签名是否成功,您可以输入:
which jarsigner
jarsigner -verify -verbose -certs myapp.apk
答案 1 :(得分:1)
在Mac上发布时,我使用rake自动执行该过程。 This gist是一个示例rake文件,显示了如何执行此操作。此rake文件将对程序集进行版本控制,编译应用程序,然后对APK进行签名/压缩。
请注意,还必须安装Albacore gem。
答案 2 :(得分:1)
这似乎是由JDK 1.6切换到JDK 1.7引起的。我建议创建一个小脚本来创建基于http://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/ 3>的已签名和对齐的apk,而不是坚持使用JDK 1.6(在某些情况下不是选项)
# First clean the Release target.
msbuild.exe HelloWorld.csproj /p:Configuration=Release /t:Clean
# Now build the project, using the Release target.
msbuild.exe HelloWorld.csproj /p:Configuration=Release /t:PackageForAndroid
# At this point there is only the unsigned APK - sign it.
# The script will pause here as jarsigner prompts for the password.
# It is possible to provide they keystore password for jarsigner.exe by adding an extra command line parameter -storepass, for example
# -storepass <MY_SECRET_PASSWORD>
# If this script is to be checked in to source code control then it is not recommended to include the password as part of this script.
& 'C:\Program Files\Java\jdk1.6.0_24\bin\jarsigner.exe' -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ./xample.keystore -signedjar ./bin/Release/mono.samples.helloworld-signed.apk ./bin/Release/mono.samples.helloworld.apk publishingdoc
# Now zipalign it. The -v parameter tells zipalign to verify the APK afterwards.
& 'C:\Program Files\Android\android-sdk\tools\zipalign.exe' -f -v 4 ./bin/Release/mono.samples.helloworld-signed.apk ./helloworld.apk
重要的是使用强制JDK 1.7的参数-sigalg SHA1withRSA -digestalg SHA1
来使用预期的摘要算法(而不是SHA-256,它似乎是JDK 1.7中的默认值,并且不被所有Android版本接受)
请注意,您可以使用
找到msbuild位置$dotNetVersion = "4.0"
$regKey = "HKLM:\software\Microsoft\MSBuild\ToolsVersions\$dotNetVersion"
$regProperty = "MSBuildToolsPath"
$msbuildExe = join-path -path (Get-ItemProperty $regKey).$regProperty -childpath "msbuild.exe"
答案 3 :(得分:0)
我在这里找到了解决方案https://forums.xamarin.com/discussion/comment/72399/#Comment_72399。
Felix Alcala的答案非常完美。没有更多&#34;应用程序未安装&#34;设备上的消息。
在Xamarin Studio中打开SDK位置
偏好设置/项目/ SDK位置/ Android
并将Java SDK(JDK)设置为
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
答案 4 :(得分:-1)
使用Xamarin的Google Play服务组件ICS时,如果您使用的是JDK 6,则会出现以下错误。
2>JAVAC : warning : com\google\ads\mediation\MediationBannerListener.class(com\google\ads\mediation:MediationBannerListener.class): major version 51 is newer than 50, the highest major version supported by this compiler.
2>JAVAC : warning : com\google\ads\mediation\MediationBannerAdapter.class(com\google\ads\mediation:MediationBannerAdapter.class): major version 51 is newer than 50, the highest major version supported by this compiler.
Error building Xamarin.Android project with Google Play Services
通过从JDK 6更改为JDK 7来解决此错误。因此,现在我已部署到Google Play商店的应用程序正在丢弃&#34;包文件未正确签名&#34;在一些智能手机中。
有没有办法使用JDK 7和Xamarin正确签署应用程序?