在图书馆解决方案中是一个Android库项目(让我们称之为 Core.Droid ),该项目具有9个补丁图像,如项目的屏幕截图所示
此解决方案是使用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才能正常工作。
答案 0 :(得分:2)
只是为了澄清,解决方案是更新过去的Xamarin.Android 4.18,因为4.18.1似乎已经解决了这个问题: