为Java Library 添加 Android 注解支持

2017-09-11  本文已影响695人  Whyn

前言

在编写Android程序时,我们经常使用 @NonNull@UiThread,@IntegerRes等等这些Android提供的注解:support-annotations

你可能在Android上使用的很爽,但是当你想在一个 Java Library中使用 support-annotations 时,你却发现 gradle 一直弹出 :

Failed to resolve: com.android.support:support-annotations:xx.xx.xx

提示无法解析 support-annotations 这个库,这个原因是因为 google 并没有将 support-annotations 库发布到 jcenter 这类代码仓库中,所以在 jcenter 就无法找到相应的 jar/aar 文件,也就有了上面的错误提示。而Android工程可以使用 support-annotations 的原因是因为 android 插件提供了相应功能去包含这些 support-annotations 依赖,而 java 插件却没有提供。

解决方法

上面说了那么多,那究竟要通过怎样的方式让我们能在 Java Library 中使用 support-annotations 呢,主要有下面3种方法:

  1. 下载 jar 包,手动进行依赖。
    既然我们无法从jcenter中找到 support-annotations 这个库,那我们就手动下载它的 jar 包,然后 gradle 引入就行啦。而 support-annotations 是默认在我们通过 sdk-manager 下载时就已经包含的了,路径就在我们的本地:
<your-SDK-path>/extras/android/support/annotations/android-support-annotations.jar
  1. 使用本地 maven 仓库。
    因为上面我们知道,support-annotations 已经早就被我们下载到我们的电脑上了,那么我们直接通过本地 maven 的方式引入,gradle 就可以找到了:
allprojects {
    repositories {
        jcenter()
        maven { url uri('<your-SDK-path>/extras/android/m2repository/') }
    }
}
//java library: build.gralde
compile 'com.android.support:support-annotations:26.0.0-alpha1'
  1. 代码引入(推荐)
    我们从第二种方法知道,解决的一种方法就是直接通过添加本地 maven 仓库,而对于不同的电脑,各自的sdk路径是不同的,所以方法2中的强编码适用性不强,而通过代码的方式,就可以实现动态解析得到各个电脑本地的sdk路径,从而直接添加 maven 本地仓库:
def logger = new com.android.build.gradle.internal.LoggerWrapper(project.logger)
def sdkHandler = new com.android.build.gradle.internal.SdkHandler(project, logger)
for (File file : sdkHandler.sdkLoader.repositories) {
  repositories.maven {
    url = file.toURI()
  }
}
//java library: build.gralde
compile 'com.android.support:support-annotations:26.0.0-alpha1'

你们可以对url进行打印一下,你就会发现其实上面这段代码就是添加了3个 maven 本地仓库:

 repositories {
        maven { url uri('<your-SDK-path>/extras/android/m2repository/') }
        maven { url uri('<your-SDK-path>/extras/google/m2repository/') }
        maven { url uri('<your-SDK-path>/extras/m2repository/') }
    }

参考

Android注解支持(Support Annotations)

上一篇下一篇

猜你喜欢

热点阅读