美文网首页
为Java Library 添加 Android 注解支持

为Java Library 添加 Android 注解支持

作者: Whyn | 来源:发表于2017-09-11 01:26 被阅读695次

    前言

    在编写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)

    相关文章

      网友评论

          本文标题:为Java Library 添加 Android 注解支持

          本文链接:https://www.haomeiwen.com/subject/cclxsxtx.html