注释:@EViewGroup - 注释参数必须是 Android 库模块中的编译时常量错误
Annotations: @EViewGroup - annotation argument must be compile-time constant error in Android library module
我正在尝试将一些现有的应用程序代码拆分到一个 android 库模块中。在将我的工作代码复制到模块目录时,我遇到了一个注释问题,其中行 @EViewGroup(R.layout.dialog_action_item)
抛出一个编译时错误消息
An annotation argument must be a compile-time constant
当完全相同的代码在应用程序模块中运行时,我不明白为什么这突然成为一个问题。两个模块 gradle 文件实现相同的依赖关系,布局文件也是旧布局文件的副本。
查看文件:
import android.content.Context
import android.graphics.Typeface
import android.os.Build
import android.support.annotation.AttrRes
import android.support.v4.content.ContextCompat
import android.util.AttributeSet
import android.widget.FrameLayout
import com.lam.locationmapservicelib.R
import kotlinx.android.synthetic.main.dialog_action_item.view.*
import com.lam.locationmapservicelib.utils.ImageLoader
import com.lam.locationmapservicelib.utils.ViewManager
import com.lam.locationmapservicelib.views.dialog.DialogActionItemModel
import org.androidannotations.annotations.EViewGroup
@EViewGroup(R.layout.dialog_action_item)
open class DialogActionItem : FrameLayout {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr)
some methods..
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_button_size">
<TextView
android:id="@+id/buttonText"
style="@style/Body1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/padding_16"
android:layout_marginStart="@dimen/padding_16"
android:ellipsize="end"
android:lines="1"
android:textAlignment="center" />
</FrameLayout>
Gradle:
kapt 'org.androidannotations:androidannotations:4.4.0'
implementation 'org.androidannotations:androidannotations-api:4.4.0'
构建错误堆栈:
`e: ...\LocationMapService\locationmapservicelib\build\tmp\kapt3\stubs\debug\com\lam\locationmapservicelib\fragments\map\MapFragment.java:5: error: incompatible types: <null> cannot be converted to int
@org.androidannotations.annotations.EFragment(value = null)
^
e: ...\LocationMapService\locationmapservicelib\build\tmp\kapt3\stubs\debug\com\lam\locationmapservicelib\views\dialog\Dialog.java:5: error: incompatible types: <null> cannot be converted to int
@org.androidannotations.annotations.EViewGroup(value = null)
^
e: ...\LocationMapService\locationmapservicelib\build\tmp\kapt3\stubs\debug\com\lam\locationmapservicelib\views\dialog\views\DialogActionItem.java:5: error: incompatible types: <null> cannot be converted to int
@org.androidannotations.annotations.EViewGroup(value = null)`
gradle 和布局文件与 DialogActionItem class.
在同一模块 (locationmapservicelib) 中
非常感谢任何帮助!
不幸的是 R
字段在 Android 库项目中不是常量,所以我们不能简单地将它们放入注释参数中。
有两种方法可以解决这个问题:
- 使用
resName
参数并传递一个字符串:@EViewGroup(resName = "dialog_action_item")
- 使用 ButterKnife Gradle 插件在
R2
class 中生成最终字段,并使用它们:@EViewGroup(R2.layout.dialog_action_item)
您必须将配置添加到 AndroidAnnotations 这两个。见 detailed documentation for library projects.
我正在尝试将一些现有的应用程序代码拆分到一个 android 库模块中。在将我的工作代码复制到模块目录时,我遇到了一个注释问题,其中行 @EViewGroup(R.layout.dialog_action_item)
抛出一个编译时错误消息
An annotation argument must be a compile-time constant
当完全相同的代码在应用程序模块中运行时,我不明白为什么这突然成为一个问题。两个模块 gradle 文件实现相同的依赖关系,布局文件也是旧布局文件的副本。
查看文件:
import android.content.Context
import android.graphics.Typeface
import android.os.Build
import android.support.annotation.AttrRes
import android.support.v4.content.ContextCompat
import android.util.AttributeSet
import android.widget.FrameLayout
import com.lam.locationmapservicelib.R
import kotlinx.android.synthetic.main.dialog_action_item.view.*
import com.lam.locationmapservicelib.utils.ImageLoader
import com.lam.locationmapservicelib.utils.ViewManager
import com.lam.locationmapservicelib.views.dialog.DialogActionItemModel
import org.androidannotations.annotations.EViewGroup
@EViewGroup(R.layout.dialog_action_item)
open class DialogActionItem : FrameLayout {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr)
some methods..
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_button_size">
<TextView
android:id="@+id/buttonText"
style="@style/Body1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/padding_16"
android:layout_marginStart="@dimen/padding_16"
android:ellipsize="end"
android:lines="1"
android:textAlignment="center" />
</FrameLayout>
Gradle:
kapt 'org.androidannotations:androidannotations:4.4.0'
implementation 'org.androidannotations:androidannotations-api:4.4.0'
构建错误堆栈:
`e: ...\LocationMapService\locationmapservicelib\build\tmp\kapt3\stubs\debug\com\lam\locationmapservicelib\fragments\map\MapFragment.java:5: error: incompatible types: <null> cannot be converted to int
@org.androidannotations.annotations.EFragment(value = null)
^
e: ...\LocationMapService\locationmapservicelib\build\tmp\kapt3\stubs\debug\com\lam\locationmapservicelib\views\dialog\Dialog.java:5: error: incompatible types: <null> cannot be converted to int
@org.androidannotations.annotations.EViewGroup(value = null)
^
e: ...\LocationMapService\locationmapservicelib\build\tmp\kapt3\stubs\debug\com\lam\locationmapservicelib\views\dialog\views\DialogActionItem.java:5: error: incompatible types: <null> cannot be converted to int
@org.androidannotations.annotations.EViewGroup(value = null)`
gradle 和布局文件与 DialogActionItem class.
在同一模块 (locationmapservicelib) 中非常感谢任何帮助!
不幸的是 R
字段在 Android 库项目中不是常量,所以我们不能简单地将它们放入注释参数中。
有两种方法可以解决这个问题:
- 使用
resName
参数并传递一个字符串:@EViewGroup(resName = "dialog_action_item")
- 使用 ButterKnife Gradle 插件在
R2
class 中生成最终字段,并使用它们:@EViewGroup(R2.layout.dialog_action_item)
您必须将配置添加到 AndroidAnnotations 这两个。见 detailed documentation for library projects.