Xamarin和APK签名 - 改变JarSigner的路径

时间:2015-04-16 11:31:53

标签: java android visual-studio-2013 msbuild xamarin

当我构建我的Xamarin项目时,它使用的jarsigner工具的版本总是来自\ Java \ jdk1.6.0_39 \ bin \

我想知道我们是否可以更改为不同版本的JDK。

看看构建输出它似乎可以归结为MSBuild ... / Xamerin / Android.Build.Tasks.dll告诉它....(见下文)

有没有办法让构建指向另一个路径... JDK的更高版本?无论

11>Using "AndroidSignPackage" task from assembly "C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Build.Tasks.dll".
11>Task "AndroidSignPackage"
11>  C:\Program Files (x86)\Java\jdk1.6.0_39\\bin\jarsigner.exe

1 个答案:

答案 0 :(得分:7)

查看Xamarin的自定义MSBuild任务库(C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Build.Tasks.dllAndroidSignPackage扩展AndroidToolTask,扩展了内置的ToolTask类。看起来他们也正确地实现了它,所以你应该能够简单地传递额外的可选参数ToolPath

如果您作为自定义构建过程的一部分直接从MSBuild调用任务,则该命令可能如下所示:

<AndroidSignPackage
  UnsignedApk="pathtounsignedapk"
  SignedApkDirectory="signedapkoutputdir"
  Keystore="yourkeystorelocation"
  KeyAlias="thekeyaliasusedtosign"
  StorePass="thepasswordforthekeystore"
  ToolPath="NEWPATHTOJAVASDK" />

如果你试图在Visual Studio环境中集成这个,你需要开始在他们的* .Targets文件中乱逛并追逐它,如果你对MSBuild不满意我不建议这样做

除此之外,没有任何担保在未完成的土地上蔓延,并且会在最短的任何时间内突破

在我的Xamarin.Android.Common.targets(C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets)中的Xamarin工具链版本中,我们看到AndroidSignPackage_Sign目标中调用,看来,至少在这个版本中,传递ToolPath属性,在此版本中定义为$(JarsignerToolPath),在.targets文件中进一步查看,我们看到它的定义如下:

<CreateProperty Value="$(_JavaSdkDirectory)\bin">
    <Output TaskParameter="Value" PropertyName="JarsignerToolPath"
            Condition="'$(JarsignerToolPath)' == ''"
    />
</CreateProperty>

看起来他们真的很好(至少在这个版本中)验证在设置此值之前未定义$(JarsignerToolPath),如果这个任务不会执行任何操作并取现有值。 / p>

此时您有几个选项,它归结为它们会尊重MSBuild属性$(JarsignerToolPath),但它会在此构建过程之前出现。如果您阅读有关MSBuild的文档,您将看到可以通过多种方式定义该属性。

最受欢迎(以及我的建议)是在MSBuild脚本中直接声明它(请记住CSPROJ文件只是MSBuild脚本)在其中一个属性组中(我建议在构建配置下)你可以简单地例如,显式定义此属性:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|JDK17' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  ... (Additional properties trimmed) ...
  <JarsignerToolPath>C:\Program Files (x86)\Java\jdk1.7.0_71\bin</JarsignerToolPath>
</PropertyGroup>

或者,您可以在启动Visual Studio / MSBuild进程之前设置环境变量,以执行将JarsignerToolPath设置为正确属性的构建。

显然,您可以使用上述知识进一步研究,并研究是否可以替换$(_JavaSdkDirectory) ......