我正在尝试设置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复制并粘贴到我的远程机器上。
但很明显,对于托管池,我无法登录到计算机上。
我在设置中遗漏了什么?
答案 0 :(得分:6)
最初的问题是在Azure DevOps托管代理上构建Xamarin Android应用程序并出现错误,因为无法找到Android NDK。
是的,如果您禁用EmbedAssembliesIntoApk
或BundleAssemblies
等选项,则构建将有效,但这不是一个真正的解决方案,尤其是当您需要启用这些选项时。
由于在托管代理上构建时未找到Android NDK路径,因此解决方案是手动设置Android NDK路径。 在构建任务的MSBuild选项中,提供以下附加参数:
/p:AndroidNdkDirectory="C:\java\androidsdk\android-ndk-r13b"
/p:AndroidNdkDirectory="$(latestAndroidNDKPath)"
如果您想了解有关此问题的更多信息,我写了一篇文章,为您提供更多详细信息:
如何在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的功能中