Giter Site home page Giter Site logo

Comments (23)

Anayuta avatar Anayuta commented on July 17, 2024

Caused by: java.lang.ClassNotFoundException: com.yt.mecomponent.databinding.MeFragmentPersoncenterBinding

from ddcomponentforandroid.

leobert-lan avatar leobert-lan commented on July 17, 2024

看起来像是:module B包含一些界面,module C包含一些databinding的内容,B 依赖于 C,将B打成AAR包给module A使用时,抛出了找不到module C中类的问题?没记错的话,module依赖会按照相对路径遍历下去,将module B打成AAR后,寻找module C的时候是会出现这类问题。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

写了下和这个原本结构类似,也就是在reader和share中加了databinding,componentrelease放了几个导出的模块aar文件,宿主去构建出来的apk就这样。具体该怎么解决呢

from ddcomponentforandroid.

leobert-lan avatar leobert-lan commented on July 17, 2024

@Anayuta 一般我都会避免多层的module依赖的,MVVM的我用的不多,不确定这种多层的module依赖结构是否能规避。如果确实是要这样的,一般我会把module C打aar包发到仓库,module B 依赖C的包,而不再直接依赖module C。 往往module 依赖 B的包的时候,还要再声明下依赖 C包。 对于打包研究不深。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

那就像这个结构一样,share依赖了service,那样的话不是得把service打包额,这样就比较麻烦了,毕竟service得一直添加接口给其他组件调用啊。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

应该是你说的那样,我把这个项目clone到本地 在share那加了databinding后,导出的aar用在宿主下,运行和上面的异常是一样的

from ddcomponentforandroid.

leobert-lan avatar leobert-lan commented on July 17, 2024

之前一直没有仔细研究过databinding,不确定是否和他的plugin有关系,晚上抽空研究下看,希望这个问题早日得到解决。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

好。

from ddcomponentforandroid.

leobert-lan avatar leobert-lan commented on July 17, 2024

我刚才又尝试了一遍,并没有复现这个问题呃。而且我前面说的多层次依赖往往发生于:Module A 依赖了发布到远程仓库的Module B的AAR包,跟当前场景还有一定的差异。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

可能是父类的继承中使用了3个泛型参数<T extends BasePresenter, E extends BaseModel, B extends ViewDataBinding>,使用的是这方式初始化 ,发现ViewDataBinding出现了异常。
public static T getT(Object o, int i) {

    Type type = o.getClass().getGenericSuperclass();
    if (type instanceof ParameterizedType) {
        try {
            return ((Class<T>) ((ParameterizedType) type).getActualTypeArguments()[i]).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    return null;
}

然后把对应的前面2泛型参数去掉了,databinding又出了Didn't find class "android.databinding.DataBinderMapper这个问题~~!。。

from ddcomponentforandroid.

leobert-lan avatar leobert-lan commented on July 17, 2024

如果说这是这样的话,那可能并不是组件化编译导致的问题。建议你通过runalone单独调试你使用了databinding的Module。另外,一旦你使用了databinding,例如shareComponent,那么appmodule也要申明,否则无法编译通过。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

昨晚单模块是3个泛型参数也是可以的,然后导出的arr包到宿主上就不行。很是奇怪。

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

现在一直存在这个问题异常,导出的aar使用了databinding;给宿主app使用。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.biaozhun.biaozhun_component, PID: 2122
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBinderMapper;
at android.databinding.DataBindingUtil.(DataBindingUtil.java:31)
at android.databinding.DataBindingUtil.bind(DataBindingUtil.java:140)
at net.biaozhun.framework_base.base.BaseDataBindingFragment.onCreateView(BaseDataBindingFragment.java:99)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:601)
at net.biaozhun.framework_base.base.BaseActivity.onStart(BaseActivity.java:87)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1254)
at android.app.Activity.performStart(Activity.java:6782)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2839)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2941)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6475)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1134)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.databinding.DataBinderMapper" on path: DexPathList[[zip file "/data/app/net.biaozhun.biaozhun_component-2/base.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_dependencies_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_0_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_1_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_2_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_3_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_4_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_5_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_6_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_7_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_8_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/net.biaozhun.biaozhun_component-2/lib/arm64, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.databinding.DataBindingUtil.(DataBindingUtil.java:31) 
at android.databinding.DataBindingUtil.bind(DataBindingUtil.java:140) 
at net.biaozhun.framework_base.base.BaseDataBindingFragment.onCreateView(BaseDataBindingFragment.java:99) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339) 
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:601) 
at net.biaozhun.framework_base.base.BaseActivity.onStart(BaseActivity.java:87) 
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1254) 
at android.app.Activity.performStart(Activity.java:6782) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2839) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2941) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:203) 
at android.app.ActivityThread.main(ActivityThread.java:6475) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1134) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995) 

from ddcomponentforandroid.

mqzhangw avatar mqzhangw commented on July 17, 2024

目前得到所有的组件都使用了databinding,但是暂时没有编译成aar,采用的是第一种组件引用语法,没有遇到问题。你可以试一下采用这种方式。aar的问题我有时间查一下,理论上是不应该出现的

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

@mqzhangw 我看了下那gradle,里面依赖的是在componmentrelease文件夹下的aar,所以其他我模块我导出了aar包在那文件夹下供宿主编译时依赖。具体你那使用的第一种组件引用是怎样的?

from ddcomponentforandroid.

mqzhangw avatar mqzhangw commented on July 17, 2024

使用demo中的依赖的方式吧,直接引用module,目前看这种方式是可以的。发布aar比较麻烦,前提是所有的依赖库都需要发布到maven上才可以,这种只适合已经比较稳定的大型app,中型项目使用第一种方案是最方便的。

from ddcomponentforandroid.

LzDocker avatar LzDocker commented on July 17, 2024

同样遇到这个问题,请问最后解决了吗?怎么解决的

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

@LzDocker 模块配置的依赖有问题,检查配置

from ddcomponentforandroid.

LzDocker avatar LzDocker commented on July 17, 2024

@Anayuta 直接引用的时候没有问题,把module当作aar引入的时候报错和上面基本一直,能说下解决的大致方向吗?今天找了一天。。

from ddcomponentforandroid.

LzDocker avatar LzDocker commented on July 17, 2024

image
image
@Anayuta 现在楼上维护的那个库还存在这样的问题吗?

from ddcomponentforandroid.

Anayuta avatar Anayuta commented on July 17, 2024

@LzDocker 你那问题很明显databinding 找不到,那么原因就出在打包上,你看看你的gradle的配置。
我用的是2.14.1的,没遇到其他奇葩的问题。库代码也就在那,遇到其他问题也都可以自己调。

from ddcomponentforandroid.

LzDocker avatar LzDocker commented on July 17, 2024

@Anayuta 多谢

from ddcomponentforandroid.

LzDocker avatar LzDocker commented on July 17, 2024

@Anayuta 打包aar时用的gradle版本,buildToolsVersion 以及classpath 'com.android.tools.build:gradle:3.0.0' 这三个地方都要和宿主app的保持保持一直,然后就解决了

from ddcomponentforandroid.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.