cta*_*cke 1 android xamarin.android aapt xamarin
我经常在项目构建期间遇到问题,其中Resource.Designer生成但不再编译.我的搜索引擎显示我不是唯一有这个问题的人,但我也没有找到任何可靠的"修复".
例如,现在我有一个工作正常的项目,但是如果我添加对NuGet库(我创建的)的引用,那么应用程序将不再编译,因为Resource.Designer.cs中存在大量错误.
在另一个项目中,我只是升级了Xamarin Forms,现在我再也无法编译了,因为Resource.Designer.cs中出现了大量错误.
当然,最直接的问题是"如何修复这些项目中的错误",但实际上我想了解这里的基本内容.是什么导致Resource.Designer生成和重新生成?使用什么算法来决定将哪些项目放入该文件?为什么我们经常最终得到一个生成的文件然后无法实际编译?为什么没有获得这些项目所需的参考?
我真的很想从根本上理解这一点,这样一旦我越过当前的事情让我头痛,我可以在将来再次出现时避免它(我肯定会再次出现).
Resource.Designer.cs是R.javaAndroid的代名词.当然,这是由生成的常量引用的应用程序资源Resource ID.
这些项目通常在您Xamarin.Android的.csproj通过中定义:
<AndroidResgenClass>Resource</AndroidResgenClass> (这可能已经过时了)
要么
<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile> (当前)
这是工具将为项目中定义的每个资源生成相应的常量资源ID 的Android Build过程的一部分aapt(res/- Android,Resources/- Xamarin.Android).然后将它们处理成二进制形式并嵌入到.apk.因此,Resource.designer.cs在成功之后生成aapt.
然后它进一步定义Resource一个特定的Resource Type:
http://code.google.com/android/reference/android/R.html
由于
aapt在Android Build工具中调用,强烈建议不要手动调用它,除非您了解完整的Android构建过程.
https://developer.android.com/studio/command-line/index.html
就"算法"而言,除了简单地将a映射Resource ID到如上定义的资源之外,我认为它不是那么复杂.Merging Resources在项目意义上存在一些复杂性.例如库项目 - >您的应用项目:
构建工具将库模块中的资源与依赖应用程序模块的资源合并.如果在两个模块中都定义了给定的资源ID,则使用应用程序中的资源
如果多个AAR库之间发生冲突,则使用依赖项列表中首先列出的库中的资源(朝向依赖项块的顶部).
为避免公共资源ID的资源冲突,请考虑使用模块特有的前缀或其他一致命名方案(或在所有项目模块中是唯一的).
https://developer.android.com/studio/projects/android-library.html#Considerations
鉴于大多数人的问题Resource.designer.cs,他们通常来自理解实际第三方Resources来自何处以及如何获得支持的观点.以下是我个人使用的一些提示:
<TargetFrameworkVersion>MSBuild属性.我的一位同事有一篇令人惊叹的博客文章经历了这个因素的时间考验:http://redth.codes/such-android-api-levels-much-confuse-wow/
Resource来源.它来自官方的NuGet包吗?资源是什么时候引入Android框架的?(主要用于材料设计项目).例如,如果我有关于的错误消息colorPrimary,我可能会检查它引入的API:
在API级别21中添加
https://developer.android.com/reference/android/R.attr.html#colorPrimary
因此,我们现在知道我们至少需要API 21+才能使用此项目.
Resources它试图为您的项目提供什么.此外,您可以查看cache相应的.aar并查看它的res/文件夹.这对于像Android Support/ one这样的大型绑定非常有用Google Play Services.对于较小的项目,查找/res反编译中的字符串.dll例如,让我们来看看com.android.support:appcompat-v7:24.2.1:
首先,我们需要在我们的机器上找到缓存:
AppData\Local\Xamarin\Xamarin.Android.Support.v7.AppCompat\24.2.1\embedded\res(如果你在OSX上遇到困难,我写了一篇关于在这里找到这些路径的指南 - https://developer.xamarin.com/guides/android/troubleshooting/resolving-library-installation-errors/)
因此,我们现在可以查看所有相应的Resources这个库正试图给我们.
Resource.designer.cs从他们的项目中删除文件.该aapt过程完成后,它将生成一个新的或它将失败aapt.由您决定是否通过该步骤(即检查主项目Resources文件夹中新生成的Resource.designer.cs文件,以便您可以将其重新包含到项目中).| 归档时间: |
|
| 查看次数: |
3086 次 |
| 最近记录: |