xamarin.android应用程序签名不起作用

时间:2013-05-13 14:30:15

标签: android xamarin.android code-signing xamarin-studio

所以我试图将我的新Android应用程序发布到Google PlayStore。从阅读this教程开始,我了解到我必须在将应用程序发布到PlayStore之前对其进行签名。我和教程完全一样。将其上传到PlayStore后,我尝试在我的设备上安装该应用程序。我收到消息“包文件未正确签名”。这是strage ..在xamaran工作室,我收到消息“包成功签名”。

如果我尝试从设备上的apk安装应用程序,我收到消息“无法安装”

这里可能有什么问题?

我在Mac上使用Xamarin Studion。

5 个答案:

答案 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/ 的已签名和对齐的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正确签署应用程序?