【问题标题】:Xamarin and APK Signing - Change path to JarSignerXamarin 和 APK 签名 - 更改 JarSigner 的路径
【发布时间】:2015-04-16 11:31:53
【问题描述】:

当我构建我的 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

【问题讨论】:

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


    【解决方案1】:

    查看 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" />
    

    如果您尝试在 Visual Studio 环境中集成此功能,则需要开始在他们的 *.Targets 文件中四处寻找并追踪它,如果您对 MSBuild 不满意,我不建议您这样做.

    除此之外,根据 MURPHY 的说法,在无证土地上的任何担保都不会而且将在最不合适的时间打破

    在我的 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) 在设置此值之前未定义时非常好(至少在此版本中),如果是,此任务将不执行任何操作并采用现有值。

    此时您有几个选择,归结为他们将尊重 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)...

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 2013-09-06
      • 2020-06-08
      相关资源
      最近更新 更多