将Gradle依赖项res复制到另一个Gradle依赖项

时间:2016-03-18 17:03:27

标签: android gradle

我目前正在为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 复制过来?

2 个答案:

答案 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",并在添加依赖项后重新同步项目