Xamarin 9-Patch in Library Solution&通过TeamCity NuGet引用

时间:2015-03-06 21:58:17

标签: android xamarin nuget teamcity nine-patch

配置

在图书馆解决方案中是一个Android库项目(让我们称之为 Core.Droid ),该项目具有9个补丁图像,如项目的屏幕截图所示

AndroidProject.Resources.drawable-hdpi.textfield_acivated_holo_light.9.png

此解决方案是使用TeamCity构建的,因此项目是NuGet包。

另一个解决方案包含一个Android项目(让我们称之为 DroidApp )并引用NuGet包 Core.Droid


问题

构建 DroidApp 时(VS2013)会显示以下编译错误:

9-patch image C:\[path to project]\obj\Debug\__library_projects__\Core.Droid\library_project_imports\res\drawable-hdpi\textfield_activated_halo_light.9.png malformed

为了证明问题出在NuGet包过程中的某个地方...... 如果我通过右键单击直接引用 Core.Droid 项目 DroidApp 中的引用,单击添加引用... ,然后在 Reference Manager - DroidApp 窗口中, 浏览选项卡,单击浏览... 并在核心的bin \ debug位置选择 Core.Droid.dll .Droid 项目然后 DroidApp 将编译并运行,没有任何编译或运行时错误。


问题

Core.Droid Android库项目包含9-时,如何让 Core.Droid NuGet包在 DroidApp 中运行补丁图片?

注意:普通图像工作得很好,只有9个图片会导致此问题。


当前解决方法

如果我们将9补丁图片放在 DroidApp 中,那么一切都是hunky-dory。但是,这使得无法在公共库项目中跨多个应用程序共享图像,因此我们在多个项目中拥有相同的图像。 This is bad

其他信息

我在诊断构建日志中看到了这一点:

2>AAPT : error : 9-patch image C:\Workspace\DroidApp\obj\Debug\__library_projects__\Core.Droid\library_project_imports\res\drawable-mdpi\textfield_activated_holo_light.9.png malformed.
2>         No marked region found along edge. (TaskId:145)
2>         Found along top edge. (TaskId:145)

但是我认为这是问题的症状,不一定是原因,因为项目中包含的图像没有格式错误......事实上,如果我直接引用该项目( Core.Droid )而不是使用NuGet包...它的工作原理。但是,如果我浏览到错误中的路径,则图像确实格式不正确(删除了9个边框边框)。所以问题是......这是怎么发生的?为什么当它是一个NuGet项目时它会剥离边界?我知道,如果我从.apk中获取图像,那么9-patch边框实际上被移除了...所以也许在构建NuGet包时构建过程中的某个地方发生这种情况......而当项目作为直接引用包含在内时步骤不会发生...有没有办法防止在NuGet构建中发生这一步骤?

附加信息II

如果我在本地计算机上构建NuGet包并使用该NuGet包,那么它可以工作。只有使用TeamCity的NuGet软件包,9patch才能正常工作。

1 个答案:

答案 0 :(得分:2)

只是为了澄清,解决方案是更新过去的Xamarin.Android 4.18,因为4.18.1似乎已经解决了这个问题:

https://bugzilla.xamarin.com/show_bug.cgi?id=23835

http://developer.xamarin.com/releases/android/xamarin.android_4/xamarin.android_4.18/#Xamarin.Android_4.18.1

哪个也解决了https://bugzilla.xamarin.com/show_bug.cgi?id=23823