我目前正在为Android开发一些插件,并遇到了在实现所有插件的最终项目中找不到资源的问题。要部署插件,我使用 gradlew install 生成 .aar ,此.aar包含.jar和包含资源文件的 res 文件夹形成那个项目。
问题概述:
插件A 使用google com.android.support:cardview-v7:23.2.0 依赖关系。
插件A 现在已将一个外部库添加到项目中,并可以访问cardview res 文件夹。
在编译插件B 时,它使用来自插件A 的资源,该资源是 cardview 的一个实例。
此 cardview 使用插件A 中 res 文件夹中的资源文件。
插件B 现在将插件A 添加为依赖项。
插件B 现在拥有来自插件A 的 res 文件夹,但仍然错过来自资源项 cardview 依赖项中的> res 文件夹。
此时抛出的错误是:
Error:(8) No resource identifier found for attribute 'cardCornerRadius' in package...
这是因为插件B 使用 cardview :
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="200dp"
android:layout_height="200dp"
card_view:cardCornerRadius="4dp">
<TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v7.widget.CardView>
我的项目中找不到遗漏的 card_view:cardCornerRadius ,因为它永远不会从插件A 复制到插件B
我的问题如下:
有没有办法让我的插件B 了解 card_view:cardCornerRadius 是什么,而不添加 com.android.support:cardview-v7:23.2。 0 依赖于插件B ,而是将其从插件A 复制过来?
答案 0 :(得分:2)
Raymond, aar 并没有发送依赖关系!至少它不会像 jar 那样容易。你需要在你的应用中再次重新导入它们(依赖项)。让我们说 app 使用插件-B (aar)。 插件-B 使用插件-A 作为依赖项。 Plugin-B 可以访问 plgin-A 资源,但应用不会。您需要再次将 plugin-A 导入您的应用。请参阅:Documentation:Dependency Management
仅工件表示法创建下载的模块依赖项 只有具有指定扩展名的工件文件。现有模块 描述符被忽略。
从 plguin-B 生成 aar 时,您可以尝试使用 plugin-A 传递:
lexical Id = [a-z]+;
start syntax P = Id i;
layout L = [\ \n\t]*;
parse(#start[P], "\naap\n").top // parses and returns the P node
parse(#start[P], "\naap\n").top.i // parses and returns the Id node
parse(P, "\naap"); // parse error at 0 because start wrapper is not around P
祝你好运,&#39;。
答案 1 :(得分:0)
根据您发布的xml代码,您确定在布局xml中添加了xmlns:card_view="http://schemas.android.com/apk/res-auto"
,并在添加依赖项后重新同步项目