使用托管tfs构建服务器构建Xamarin.Android时缺少Android NDK工具链目录'\ toolchains'

问题描述 投票:3回答:3

我正在尝试建立一个TFS Build agent,以便在每次办理登机手续时自动构建我的Xamarin.Android项目。

我已按照此处列出的步骤操作:https://msdn.microsoft.com/library/vs/alm/build/apps/xamarin用于设置托管构建代理。

TFS Build模板还有一个Xamarin.Android模板,您可以期待它们已经准备好了。这也可以从上面的链接备份,该链接声明您可以在托管池上构建Xamarin.Android解决方案

但是我在构建项目时遇到以下错误:

缺少Android NDK工具链目录'\ toolchains'。请安装Android NDK

我在Xamarin https://developer.xamarin.com/guides/cross-platform/ci/configuring_tfs/tfs-and-xa/找到了一个链接,说我需要登录构建机器并将Android NDK复制并粘贴到我的远程机器上。

但很明显,对于托管池我无法登录到计算机。

我在设置中遗漏了什么吗?

tfs xamarin xamarin.android azure-devops tfsbuild
3个回答
8
投票

最初的问题是在Azure DevOps托管代理上构建Xamarin Android应用程序并出现错误,因为无法找到Android NDK。

是的,如果您禁用EmbedAssembliesIntoApkBundleAssemblies等选项,则构建将起作用,但这不是一个真正的解决方案,尤其是当您需要启用这些选项时。

由于在托管代理上构建时未找到Android NDK路径,因此解决方案是手动设置Android NDK路径。在构建任务的MSBuild选项中,提供以下附加参数:

  • VS2015托管代理:/p:AndroidNdkDirectory="C:\java\androidsdk\android-ndk-r13b"
  • VS2017特邀代理:/p:AndroidNdkDirectory="$(latestAndroidNDKPath)"

如果您想了解更多有关此问题的信息,我写了一篇文章,为您提供更多详细信息:

Building a Xamarin Android App with Bundle assemblies into native code option enabled on an Azure Visual Studio Team Services (VSTS) hosted agent (And getting the following error: "Error : Could not find a part of the path 'd:\platforms'."?)


如何在VS2017托管代理上检索最新的Android NDK:

$ndk_root = "C:\Microsoft\AndroidNDK64\"

if(Test-Path $ndk_root) {

    $androidNDKs = Get-ChildItem -Path $ndk_root | Sort-Object -Property Name -Descending | Select-Object -First 1

    $latestAndroidNDK = $androidNDKs.FullName;

    Write-Host "##vso[task.setvariable variable=latestAndroidNDKPath]$latestAndroidNDK" 

} else {

    Write-Host "NDK is not installed at path $ndk_root"

    exit 1
}

Write-Host Variable '$(latestAndroidNDKPath)' is $latestAndroidNDK

1
投票

Xamarin论坛也存在同样的问题,以下是解决方案:

修复:作为更新,如果其他人在构建Release时遇到此问题(缺少NDK \工具链),则表明mkbundle已损坏。

根本原因是“MakeBundleNativeCodeExternal”对于release是正确的,对于Debug是false。虽然这显示为许可问题,但我的构建代理程序已安装Enterprise许可证。

通过在记事本中编辑Android项目来禁用Release版本中的“MakeBundleNativeCodeExternal”,搜索“BundleAssemblies” - 并将Release配置部分下的“True”更改为“False”save,build Release,可以正常工作。

有关详细信息,请参阅此链接:Missing Android NDK toolchains directory


1
投票

逐步指导解决此问题。

如果可以,我建议使用带有Xamarin和this link的Visual Studio 2015 Update 2来设置自己的构建主机。这样做之后你可以使用this Xamarin link来确保。 1.您的java SDK和NDK位于本地(非用户特定区域,如果您使用Visual Studio安装它们),并且已添加环境变量(来自Xamarin链接):

调整环境变量在自动构建过程中,Xamarin.Android将需要在上面调整的路径上访问Android SDK和NDK。最好通过设置adjusting调整几个服务器范围的环境变量来完成:

如果尚未登录,请以管理员身份登录TFS计算机。打开“控制面板”,在搜索框中键入Environment,选择“编辑系统环境变量”,然后单击“环境变量...”按钮以显示以下对话框:

在“系统变量”下,选择“ANDROID_HOME”并单击“编辑...”,或者如果ANDROID_HOME不存在,请单击“新建...”以创建它:

将值设置为c:\ android-sdk(或移动SDK的位置),然后单击“确定”。在系统变量下,选择ANDROID_NDK_PATH,然后单击编辑...(或者根据需要添加新...):

将值设置为c:\ android-ndk \ android-ndk-r8d(或移动NDK的任何位置),然后单击“确定”。请注意,您需要此值中的第二个文件夹名称。选择Path变量,单击Edit ...按钮,然后将; c:\ android-sdk(或您使用的任何文件夹)追加到路径末尾,然后单击OK。不要忘记在此条目和先前条目之间包含分号(;)分隔符。

通过打开命令提示符,输入Set并检查变量来验证更改。 Team Foundation Server现在应该能够在团队项目中构建Android应用程序。

在此之后,您必须在project.Android.csproj文件中将以下属性设置为False

在记事本中打开文件,转到Release配置部分并将以下内容设置为false:

<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
<BundleAssemblies>False</BundleAssemblies>

您的项目现在将在托管池上构建!

虽然我认为这隐藏了真正的问题,因为将这些设置为true将构建在您的本地构建代理上。

我认为微软托管池缺少Android NDK环境变量,因为它没有显示在TFS的功能中

© www.soinside.com 2019 - 2024. All rights reserved.