0

我正在将一个大型、复杂的 android 库项目迁移到 gradle,并且无法将库项目合并到大型项目中。这已在其他问题中讨论过,但还没有人(据我所知)发布有关此问题的信息。我有几个应用程序、一堆第三方库和我自己的共享库。文件夹结构如下:

--Root
   -build.gradle
   -settings.gradle
   |--apps
      |--MyApp
   |--libraries
      |--thirdparty
         |--actionbarsherlock
            -build.gradle
         |--facebook
            -build.gradle
         |--google-play-services-lib
            -build.gradle
      |--personal
         |--commons
            -build.gradle
            - AndroidManifest.xml
            |--src
               |--main, blah blah
         |--proprietary

现在,个人/公共库依赖于所有第三方库(ABS、Facebook 等)。每个第三方库仅依赖于可以从 mavenCentral 引入的通用 jar 文件,并且每个都可以完美构建。将第三方与个人库分开很重要,同样重要的是,无论是那个文件夹还是“libraries”文件夹本身都不是一个 android 项目。

(更新:删除了除基本 build.gradle 和 settings.gradle 文件之外的所有内容以简化。)

请注意,我正在尝试在一个稍微简单的问题中遵循类似的解决方案。

在我的 /root/ 文件夹中,settings.gradle 文件内容如下:

include ':libraries:personal:commons'  
include ':libraries:thirdparty:actionbarsherlock'
include ':libraries:thirdparty:facebook'
include ':libraries:thirdparty:google-play-services-lib'
include ':apps:MyApp'

并且同一级别(/root/)的 build.gradle 文件只是空的。

编辑:删除调用evaluationDependsOn(':thirdparty:facebook')和其他子项目。编译产生相同的答案依赖失败问题。

当我gradle build在 /root/libraries/personal 级别运行时(再次,按照链接的示例),它首先成功编译了所有第三方库(万岁!)。然后,它给出了看起来像实际的 java 编译错误:/Root/libraries/personal/commons/src/main/java/com/personal/commons/dialog/AlertDialogFragment.java:19: cannot find symbol symbol : method dismissAllowingStateLoss( ) 位置:类 com.personal.commons.dialog.AlertDialogFragment instance.dismissAllowingStateLoss();

不过,我怀疑这是一个链接问题,因为(1)它已经在 Eclipse 中编译了一年多而代码没有变化,并且(2)AlertDialogFragment 扩展了 SherlockDialogFragment,它本身扩展了 DialogFragment,它dismissAllowingStateLoss()是定义的位置。但是,它并没有抱怨类定义

public class AlertDialogFragment extends SherlockDialogFragment {

import com.actionbarsherlock.app.SherlockDialogFragment文件顶部的 ,所以它认为一切都很好,但无法解决依赖关系。当我查看 /root/libraries/thirdparty/actionbarsherlock 的 build 文件夹时,确实为 SherlockDialogFragment 输出了一个类文件。为什么我可怜的自定义库看不到这个?

到目前为止,解决这个问题的所有尝试都失败了,因为我的 gradle-fu 仍然很弱。有谁知道我的致命错误在哪里?

4

0 回答 0