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

时间:2016-04-29 14:27:45

标签: tfs xamarin xamarin.android azure-devops tfsbuild

我正在尝试设置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复制并粘贴到我的远程机器上。

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

我在设置中遗漏了什么?

3 个答案:

答案 0 :(得分:6)

最初的问题是在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 :(得分:1)

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

  

修正:作为更新,如果其他人在构建时遇到此问题   释放(缺少NDK \工具链)它似乎是mkbundle   坏了。

     

根本原因是“MakeBundleNativeCodeExternal”为真   对于Debug,发布和false。虽然这看起来像许可证   问题,我的构建代理已安装企业许可证。

     

通过编辑禁用发布版本中的“MakeBundleNativeCodeExternal”   在记事本中的Android项目,搜索'BundleAssemblies' - 和   将Release配置部分下的'True'更改为'False'   保存,构建发布,工作。

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

答案 2 :(得分:1)

逐步指导解决此问题。

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

  

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

     

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

     

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

     

将值设置为c:\ android-sdk(或移动SDK的位置)和   单击确定。在系统变量下,选择ANDROID_NDK_PATH并单击   编辑...(或新的......如有必要):

     

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

     

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

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

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

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

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

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

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