我正在将一个大型、复杂的 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 仍然很弱。有谁知道我的致命错误在哪里?