Small icon indicating copy to clipboard operation
Small copied to clipboard

lib.* 中依赖 support-annotations-27.0.2,代码中访问 @ColorInt 等,编译插件时出现 错误: 程序包android.support.annotation不存在

Open bovyoung opened this issue 8 years ago • 2 comments

我在 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"
    }
}

bovyoung avatar Jan 18 '18 01:01 bovyoung

这个问题的原因已经找到了, 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 avatar Jan 22 '18 01:01 bovyoung

@bovyoung 这个库是官方稳定的通用库,不需要独立更新,所以设计上是直接放在宿主或分身里(AppCompat会默认依赖这个包),插件里 exclude 掉以避免出现类重复。

galenlin avatar May 02 '18 22:05 galenlin