wequick / Small

A small framework to split app into small parts
http://code.wequick.net/Small
Apache License 2.0
5.04k stars 1.11k forks source link

ButterKnife8.3不支持 #293

Open xiaobaDev opened 8 years ago

xiaobaDev commented 8 years ago

cessing.Processor: Provider butterknife.compiler.ButterKnifeProcessor could not be instantiated: java.lang.NoClassDefFo undError: butterknife/OnCheckedChanged

搜了下作者已经在其他地方答复这周修复了,还是想确认下,因为很多地方都用上ButterKnife了,替换成本很高

iceboundrock commented 8 years ago

应该已经修复了吧,我简单测了一下可以用。

tobiashu2016 commented 7 years ago

[Small] building bundle 1 of 1 - app.main (0x77) 错误: 服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor: Provider butt erknife.compiler.ButterKnifeProcessor could not be instantiated: java.lang.NoClassDefFoundError: butterknife/OnCheckedChanged时抛出异常错误

small的版本是1.0.0-alpha2 butterKnife版本是8.2.1

kuwork commented 7 years ago
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'net.wequick.tools.build:gradle-small:1.1.0-beta4'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

small {
    aarVersion = '1.1.0-alpha1'
    strictSplitResources = false

}

错误: 服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor: Provider butt erknife.compiler.ButterKnifeProcessor could not be instantiated: java.lang.NoClassDefFoundError: butterknife/OnCheckedChanged时抛出异常错误

butterKnife版本是8.4.0 还是出错,什么时候能修复?

xiaobaDev commented 7 years ago

和butterknife 版本没关系,需要作者修复的

taoqiyang commented 7 years ago

@xiaobaDev 各位现在还有这个问题么 我这比较奇怪 前几天还好好的用着 今天突然就报同样的错 最新版本 D疼死了 还有就是用annotationproccesser和apt都一样的问题

MaYunFei commented 7 years ago

@taoqiyang 我用着没啥事儿

classpath 'com.android.tools.build:gradle:2.2.3'
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
taoqiyang commented 7 years ago

经过多次尝试,这里分享下结果,希望有用(用sample测试): 首先,butterknife有两个包,暂定名主包(包信ButterKnife等类)和一个注解包(主要放的各个注解) 方案有三: 1。把butterknife的引用放到各个app.里面单独引用,可行但是得每个app.都管理butter的引用并且打出来的包里面包含butter的两个包里面的所有类。 2。把butterknife放到app+stub,所有module可以自动引用,但是会出现所有的lib.打出来的包里面都有butter注解包里面的类。并且得把buildLib后生成的lib.和app所引用到的jar包配置(根目录->build-small->samll-pre-link-jar->-D.txt)中,把所有butter注解配置行删除,否则打app.包时会出现找不到注解包 中类的错误,类似找不到OnCheckedChange.这样打出来的app.中会包含butter注解包的所有类和butter主包的部分(比如你在代码中只调了ButterKnife的bind方法,那打出来的包里面就有ButterKnife类,并且这个类里面只会有bind方法,还包含bind方法所用到的类和方法)类似混淆时去掉jar包中没有用的到类和类的方法。 3。把butter放到一个公共lib中,比如我是放到lib.utils里。这样buildLib时打出来的包里面只会在lib.utils里面包含butterknife。app.得手动引用这个lib.并且还是得把buildLib后生成的lib.utils用到的jar包配置lib.utils-D.txt中butter注解的配置行删掉。这样打出来的app.*和方案2打出来的一样。

另: 1。不管用什么方法,butter的apt或者annotationProcessor都得在app.里面定义。 2。因为ButterKnife类中bind方法中调用了butter主包中的几个类的方法,如果想在优化一点不把这个几个类打到app.里面的话,可以参照lib.analytics中使用友盟 包的方式,加一个工具类,其中只定义一个bind方法调用ButterKnife类的bind方法,这样打出来的时候就不会把butter的主包中的类打到app.*,只会把这个工具类打进去。 3。当然还是希望作者将来优化后能让打出来的包里面没有重复的类。

laborchu commented 7 years ago

@taoqiyang 我用dagger也出现这个问题,如果app.和app里面都配置了dagger,为了防止重复打包的问题,会把dagger写到build-small->samll-pre-link-jar->-D.txt这里,这里面的依赖会被放到compile.exclude里面,导致annotationProcessor如果有依赖就会出现NotFoundException,如果要build通过,一定要删除D.txt里面关于dagger配置,至于重复打包问题,把app.里面的compile改成provided应该可以解决,但是还是希望作者能优化掉,现在DataBinding也不能用

aheadlcx commented 7 years ago

@laborchu 你好,你用 Dagger2 ,会出现 buildBundle 的时候,说找不到 Dagger 生成的 类么。例如 DaggerApplicationComponent .可是已经生成了的。检查过 debug 和 release 下面都是有的。