kotlin多模块下使用allopen、noarg插件

目前Android上有许多好用的库,但是它们在和Kotlin配合的时候,并不是那么愉快。Kotlin中的data class是一种非常好用的类,它可以自动生成许多方法,来方便我们的使用。但是Android的第三方库需要通过反射来加载一些class,这就要求class必需有一个无参的构造函数,而Kotlin的data class默认没有无参构造函数,并且data class默认为final类型,不可以被继承,这造成了第三方库使用的诸多不便。好在Kotlin官方为我们提供了两个插件,可以为我们解决以上两个问题。

1. project的build中添加

### 最上方加入
apply plugin: "kotlin-noarg"
apply plugin: "kotlin-allopen"

dependencies{
    
    
	classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"	
    //要跟kotlin版本一直
}

2. 创建一个注解

New -> Kotlin File/Class,输入一个名称,Kind选择File,点击确定
在新建的文件内输入:

annotation class NoArg

这里我将这个注解创建到了base层,所以要在base对应的build下添加

//填写你们自己的对应的路径
allOpen {
    
    
        annotation("com.***.common_base.NoArg")
    }
    noArg {
    
    
        annotation("com.***.common_base.NoArg")
    }

3. 使用注解

在我们需要无参构造的bean类使用在我们需要使用无参构造的bean中使用注解

4. 在对应的build中添加apply

因为我是在base中写的注解,所以在base中的Build添加,但是我别的模块用到了无参构造,所以用到该注解或使用无参构造也需要添加

apply plugin: "kotlin-noarg"

5. 使用无参构造

val eventMessage = EventMessageBean::class.java.newInstance()

大功告成!!!

在这配置中遇到一个错误:

Annotation processors must be explicitly declared now.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.

解决办法:
在app的build中添加

defaultConfig {
    
    
        javaCompileOptions {
    
     
        	annotationProcessorOptions {
    
     
        		includeCompileClasspath = true 
        		} 
        	}	
  }

如果没有遇到就更好啦~~~

猜你喜欢

转载自blog.csdn.net/Mr_ziheng/article/details/103409498