Small
Small copied to clipboard
lib.* 中依赖 support-annotations-27.0.2,代码中访问 @ColorInt 等,编译插件时出现 错误: 程序包android.support.annotation不存在
我在 lib.* 中引用了 compile 'com.android.support:support-annotations:27.0.2',在代码调用的时候,出现 @ColorInt、@IntDef 等方式调用,然后在编译插件的时候出现如下错误:
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/Corner.java:4: 错误: 程序包android.support.annotation不存在
import android.support.annotation.IntDef;
^
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/Corner.java:9: 错误: 找不到符号
@IntDef({
^
符号: 类 IntDef
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:14: 错误: 程序包android.support.annotation不存在
import android.support.annotation.ColorInt;
^
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:15: 错误: 程序包android.support.annotation不存在
import android.support.annotation.DimenRes;
^
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:16: 错误: 程序包android.support.annotation不存在
import android.support.annotation.DrawableRes;
^
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedDrawable.java:20: 错误: 程序包android.support.annotation不存在
import android.support.annotation.ColorInt;
^
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedDrawable.java:21: 错误: 程序包android.support.annotation不存在
import android.support.annotation.NonNull;
^
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:228: 错误: 找不到符号
public void setImageResource(@DrawableRes int resId) {
^
符号: 类 DrawableRes
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:266: 错误: 找不到符号
public void setBackgroundResource(@DrawableRes int resId) {
^
符号: 类 DrawableRes
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:408: 错误: 找不到符号
public void setCornerRadiusDimen(@DimenRes int resId) {
^
符号: 类 DimenRes
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:419: 错误: 找不到符号
public void setCornerRadiusDimen(@Corner int corner, @DimenRes int resId) {
^
符号: 类 DimenRes
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:480: 错误: 找不到符号
public void setBorderWidth(@DimenRes int resId) {
^
符号: 类 DimenRes
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:493: 错误: 找不到符号
@ColorInt
^
符号: 类 ColorInt
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedImageView.java:498: 错误: 找不到符号
public void setBorderColor(@ColorInt int color) {
^
符号: 类 ColorInt
位置: 类 RoundedImageView
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedDrawable.java:249: 错误: 找不到符号
protected void onBoundsChange(@NonNull Rect bounds) {
^
符号: 类 NonNull
位置: 类 RoundedDrawable
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedDrawable.java:258: 错误: 找不到符号
public void draw(@NonNull Canvas canvas) {
^
符号: 类 NonNull
位置: 类 RoundedDrawable
/Users/isos/Work/Projects/trunk/lib.share/src/main/java/com/gala/video/lib/share/common/widget/roundedimageview/RoundedDrawable.java:527: 错误: 找不到符号
public RoundedDrawable setBorderColor(@ColorInt int color) {
^
符号: 类 ColorInt
位置: 类 RoundedDrawable
同样的依赖库,如果放在 app+* 或者改成以 jar 的方式引用,不会出现上述编译问题。
环境说明:
buildscript
{
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'net.wequick.tools.build:gradle-small:1.2.0-beta3'
}
}
apply plugin: 'net.wequick.small'
small {
buildToAssets = false
aarVersion = '1.3.0-beta5'
android {
compileSdkVersion = 25
buildToolsVersion = "25.0.2"
supportVersion = "25.1.0"
}
}
这个问题的原因已经找到了,
AppPlugin.groovy
protected void resolveReleaseDependencies() {
// Pre-split all the jar dependencies (deep level)
def compile = project.configurations.compile
compile.exclude group: 'com.android.support', module: 'support-annotations
rootSmall.preLinkJarDir.listFiles().each { file ->
if (!file.name.endsWith('D.txt')) return
if (file.name.startsWith(project.name)) return
file.eachLine { line ->
def module = line.split(':')
compile.exclude group: module[0], module: module[1]
}
}
}
求问下,为什么要将这个库单独 exclede 呢?我改为 jar 方式引用,目前没发现什么问题。@galenlin
@bovyoung 这个库是官方稳定的通用库,不需要独立更新,所以设计上是直接放在宿主或分身里(AppCompat会默认依赖这个包),插件里 exclude 掉以避免出现类重复。