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

use*_*er1 5 tfs tfsbuild xamarin.android xamarin azure-devops

我正在尝试设置一个在每次签入时自动TFS Build agent构建我的Xamarin.Android项目.

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

TFS构建模板也有一个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复制并粘贴到我的远程机器.

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

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

Viv*_*ier 9

最初的问题是在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)"

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

在Azure Visual Studio Team Services(VSTS)托管代理上启用带有Bundle程序集的Xamarin Android应用程序到本机代码选项(并收到以下错误:"错误:无法找到路径'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
Run Code Online (Sandbox Code Playgroud)


use*_*er1 2

解决此问题的分步指南。

\n\n

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

\n\n
\n

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

\n\n

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

\n\n

在“系统变量”下,选择 ANDROID_HOME 并单击“编辑\xe2\x80\xa6”,或者如果\n ANDROID_HOME 不\xe2\x80\x99 存在,请单击“新建\xe2\x80\xa6”进行创建:

\n\n

将值设置为 c:\\android-sdk(或将 SDK 移动到的位置),然后单击“确定”。在系统变量下,选择 ANDROID_NDK_PATH 并单击\n Edit\xe2\x80\xa6(或 New\xe2\x80\xa6,如有必要):

\n\n

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

\n\n

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

\n
\n\n

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

\n\n

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

\n\n
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>\n<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>\n<BundleAssemblies>False</BundleAssemblies>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n