-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
app对lib的间接依赖无效 #117
Comments
你是说buildLib过程中,lib.base的编译会因为找不到com.facebook.fresco的类失败? 那buildLib的时候,是lib.base先执行的还是lib.common先执行的? |
从gradle的日志看lib.common先执行,并且生成了so文件,打开so中的dex文件这些依赖的类都在 |
那就奇怪了。 fresco应该是一个aar依赖,检查一下buildLib之后,build-small/intermediates/small-pre-jar/base/ 下面有没有fresco的jar? |
有的 |
能否把项目上传到github上,我拉下来跑一下 |
@peacepassion @tcking 看了下 还是
于是 // Pre-split shared libraries at release mode
// - host, appcompat and etc.
def baseJars = project.fileTree(dir: rootExt.preBaseJarDir, include: ['*.jar'])
project.dependencies.add('provided', baseJars) 无法正确遍历到fresco等jar并添加至依赖,导致错误。 |
aar依赖这个东西真的好复杂………… 这里还没有涉及到版本冲突问题,如果版本不一致的话,肯定还会有更微妙的问题...... |
@peacepassion 对,这个我也发现了哈。jars/libs/*.jar的拷贝容易修正,不过第一个问题不好解决。。 |
@galenlin 改为prebuild.doFirst的时候,resovleDenpendency是否可行? |
依赖管理需通过工程结构上统一管理,不允许apk插件引入第三方依赖,build的时如果发现多次引入build应该直接失败,这也是我想通过这种方式来组织工程的原因 |
似乎不行,以前试过evaluate完成后无法重新设置 |
根据这个思路,把
|
@tcking evaluate顺序调整后,还需要改写 baseJars的收集方式,因为直接通过fileTree遍历preBaseJarDir目录是暂时无结果的-还未编译生成。 需要通过某种方式(DependencyUtils.getAllDependencies)先得到各jar的名称然后手动拼接路径。 不过这种方法还是有局限,我在尝试用 // AppPlugin
compileLibs.each {
Project lib = it.dependencyProject
project.dependencies {
provided project(path: lib.path, configuration: 'jars')
}
} |
@tcking @peacepassion |
我测了一下,OK了。 |
太好了,编译正常通过!
|
这个是因为目前lib/bundle依赖aar的时候,没有将aar所生成的R.java打进包里面。 参见 #119 |
对于这种问题,有一个思路: |
@tcking 在宿主里都写好应该是没问题的,这个自动处理的逻辑是有的了。 |
现在麻烦的是对于要做成 |
@galenlin 我的想法是这样的: 期望: 目前的现状: |
恩,现在设计是这样的:
这样理论上可以满足大部分需求了。 |
这样做会有一个问题:lib.* 中可能需要用到 |
@tcking ,lib._依赖aar,把aar 当做lib._先编译一下,然后开发的时候依赖aar,真正编译的时候用编译出来的so包(类似于依赖android.jar),应该可以解决依赖aar的问题 |
@skylz 没太理解这个过程,可否详细的描述下 |
方法数过多,在4.x的手机上会出现ClassNotFoundException,看http://blog.csdn.net/jia635/article/details/55103846 |
@galenlin @peacepassion 请问一下,项目中有moduelA和moduleB,ModuleA依赖了ModuelB,这个moduleB依赖了Fresco。moduleA依赖moduleB,如果在build.gradle中写成compile project(':moduleB')是可以正常运行的。如果如果我把ModuelB打成一个aar的sdk形式,这个时候放到ModuleA的libs里面去依赖,就会报错:找不到com.facebook.drawee.view.SimpleDraweeView的类文件。这个怎么解? |
前提条件:
1.工程 lib.common 引入第三方的依赖 ,例如
compile 'com.facebook.fresco:fresco:0.9.0+'
2.工程 lib.base 依赖lib.common
compile project(':lib.common')
问题:
在执行
buildLib
时提示找不到com.facebook.fresco
中的类 (AS没有提示错误,app能单独跑)期望:
app引用了lib工程,lib引用了其他lib工程的依赖能作用于app,例如对
compile 'com.android.support:appcompat-v7:23.3.0'
的引用只需要在一个lib引用,如app间接引用了此lib,则不需要再dependencies
中引用 (目前每个app都需要声明依赖)The text was updated successfully, but these errors were encountered: