4

我的库中有以下代码:

@Documented
@IntDef({OpacityAnimationType.NONE,
        OpacityAnimationType.BLINKING,
        OpacityAnimationType.SHINY,
        OpacityAnimationType.AURA,
})
public @interface OpacityAnimationType {
    int NONE = 0;
    int BLINKING = 1;
    int SHINY = 2;
    int AURA = 3;
}

在图书馆的毕业典礼上,我有

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["library" : "true"]
            }
        }
    }
}

configurations {
    javadocDeps
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.android.support:appcompat-v7:$supportLibraryVersion"
    compile "com.android.support:support-annotations:$supportLibraryVersion"

    javadocDeps "com.android.support:support-annotations:$supportLibraryVersion"
}

我将其部署到 JFrog BinTray,然后尝试在我的应用程序中使用它。我必须从库依赖项中排除 appcompat-v7 和 support-annotations,但我构建仍然失败:

错误:无法解决:annotationProcessor

现在我被卡住了,尝试了很多东西,但没有任何帮助。我无法用这个库构建主项目。我是否需要实现任何自定义 AnnotationProcessor 才能使用@IntDef?

4

3 回答 3

3

所以最后我已经能够克服这个问题了!

看起来在自定义注释的情况下,还需要自定义注释处理器。现在我决定跳过创建自定义注解处理器并且不使用自定义注解进行@IntDef 枚举。

但是无论如何,如果您的库使用现有的注释并且您将它发布到 mavenCentral 或 jCenter 或其他存储库并在其他项目中使用它,那么您需要为 javadoc 任务添加一些魔法。

它从这里开始: https ://github.com/vulko/AnimatedArcProgressView/blob/master/library/build.gradle

    configurations {
        javadocDeps
    }
    dependencies {
        // ...
        compile("com.android.support:support-annotations:$supportLibraryVersion") {
            transitive false;
        }   
        javadocDeps "com.android.support:support-annotations:$supportLibraryVersion"
    }

然后继续在此处发布 gradle 脚本:https ://github.com/vulko/AnimatedArcProgressView/blob/master/gradle/publish-library.gradle :

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.source

    // this is the magic
    classpath += configurations.javadocDeps

    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

无论如何,所有代码都可以在这里找到: https ://github.com/vulko/AnimatedArcProgressView/

于 2017-03-22T19:29:22.187 回答
0

一直在谷歌搜索这个问题,看起来如果库中有任何注释,库需要一个包含这些注释的项目。虽然不确定处理器,希望它不会被需要,否则我将不得不从自定义注释切换到 @IntDef 与一些静态最终 int 代替。

还需要一些 gradle 魔法来做到这一点,到目前为止还没有好的教程,但是 github 上有一堆带有处理器和注释的代码。我想避免使用自定义处理器,因为我根本不需要它。

无论如何,当我最终设法解决这个问题时,我会尽量保持这个线程的更新。

于 2017-03-21T11:58:48.903 回答
0

现在故事还在继续。我必须在库项目中为注释创建一个注释子模块,并且我必须将@IntDef 移出它,否则它将无法将任何 android 注释导入子模块。所以我已经将@IntDef's 移到库中,他们现在使用子模块中的自定义注释。

即使我能够构建和部署它,也无法导入库工件,原因是:

错误:找不到 com.kvolkov.animatedprogressviews:注释:未指定。在以下位置搜索:要求:项目:> com.kvolkov.animatedprogressviews:library:1.0-RC5

我认为发生这种情况是因为我现在需要将注释子模块部署为单独的工件,但我不能这样做,因为我无法将注释模块的 .gradle 的一些教程中的代码与 bintray 的插件进行匹配以部署它从工作室那里...

好吧,这还没有结束。如果 any1 有兴趣或愿意提供帮助,您可以在这里查看当前库的代码: https ://github.com/vulko/AnimatedArcProgressView

我很高兴收到一些帮助或建议,因为有关此的所有信息都使用 apt 而不是注释处理器。

于 2017-03-21T16:52:34.613 回答