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

AJM*_*AJM 4 java msbuild android xamarin visual-studio-2013

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

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

看看构建输出它似乎归结为whatecer 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
Run Code Online (Sandbox Code Playgroud)

aol*_*wka 7

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

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

<AndroidSignPackage
  UnsignedApk="pathtounsignedapk"
  SignedApkDirectory="signedapkoutputdir"
  Keystore="yourkeystorelocation"
  KeyAlias="thekeyaliasusedtosign"
  StorePass="thepasswordforthekeystore"
  ToolPath="NEWPATHTOJAVASDK" />
Run Code Online (Sandbox Code Playgroud)

如果您正在尝试在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>
Run Code Online (Sandbox Code Playgroud)

看起来它们$(JarsignerToolPath)在设置此值之前未定义的验证时非常好(至少在此版本中),如果此任务不执行任何操作并采用现有值.

在这个时候你有几个选项,它归结为它们将尊重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>
Run Code Online (Sandbox Code Playgroud)

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

显然你可以使用上述知识进一步研究它,如果你能替换它,就去研究$(_JavaSdkDirectory)......