2

所以我试图将我的新 android 应用程序发布到 Google PlayStore。通过阅读教程,我了解到我必须在将应用发布到 PlayStore 之前对其进行签名。我做了与教程中完全相同的操作。将其上传到 PlayStore 后,我尝试在我的设备上安装该应用程序。我收到消息“包文件未正确签名”。这是悲剧。在 xamaran 工作室中,我收到“包裹已成功签名”的消息。

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

这里有什么问题?

我在 Mac 上使用 Xamarin Studion。

4

5 回答 5

8

找到了问题..这是一个 JAVA 工具问题。这种情况在系统上混合使用 JDK 和 JRE 工具时经常发生。

不要使用 Java 7 中的工具!

仅使用 JDK 6 中的工具。您可以通过键入以下内容来检查您拥有的版本:

java -version

如果您仍然不确定签名是否成功,您可以输入:

which jarsigner

jarsigner -verify -verbose -certs myapp.apk
于 2013-05-15T08:18:36.800 回答
1

在 Mac 上发布时,我使用 rake 自动化该过程。这个要点是一个示例 rake 文件,展示了如何执行此操作。此 rake 文件将对程序集进行版本控制,编译应用程序,然后对 APK 进行签名/压缩对齐。

请注意,Albacore gem也必须安装。

于 2013-05-14T14:14:37.170 回答
1

这似乎是由于从 JDK 1.6 切换到 JDK 1.7 造成的。我建议不要坚持使用 JDK 1.6(在某些情况下不是一个选项),而是基于http://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics创建一个用于创建签名和对齐 apk 的小脚本/publishing_an_application/part_1_-_preparing_an_application_for_release/

# 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

重要的部分是使用-sigalg SHA1withRSA -digestalg SHA1强制 JDK 1.7 使用预期摘要算法的参数(而不是 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"
于 2014-12-04T20:44:31.520 回答
0

我在这里找到了解决方案https://forums.xamarin.com/discussion/comment/72399/#Comment_72399

Felix Alcala 的答案非常完美。设备上不再出现“未安装应用程序”消息。

在 Xamarin Studio 中打开 SDK 位置

首选项/项目/SDK 位置/Android

并将 Java SDK(JDK) 设置为

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

于 2015-01-22T13:40:27.680 回答
-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.

使用 Google Play 服务构建 Xamarin.Android 项目时出错

通过从 JDK 6 更改为 JDK 7 可以解决此错误。因此,现在我已经部署到 Google Play 商店的应用程序在某些智能手机中抛出“包文件未正确签名”。

有没有办法使用 JDK 7 和 Xamarin 正确签署应用程序?

于 2014-09-18T20:43:23.497 回答