我正在将一个庞大,复杂的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等)。每个第三方lib仅依赖于可以从mavenCentral引入的常见jar文件,并且每个第三方lib都完美地构建。将第三方与个人图书馆分开是非常重要的,同样重要的是,无论是图书馆还是图书馆"文件夹本身就是一个Android项目。
(更新:删除除了基本build.gradle和settings.gradle文件之外的所有内容以简化。)
请注意,我尝试遵循类似的解决方案in a slightly simpler problem。
在我的/ 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')
和其他子项目的调用。编译产生相同的答案依赖性失败问题。
当我在/ root / libraries /个人级别运行gradle build
时(再次按照链接的示例),它首先成功编译所有第三方库(万岁!)。然后,它给出了看起来像的实际java编译错误:
/Root/libraries/personal/commons/src/main/java/com/personal/commons/dialog/AlertDialogFragment.java:19:找不到符号
符号:方法dismissAllowingStateLoss()
location:class 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仍然很弱。有谁知道我的致命错误在哪里?