【问题标题】:Android Studio 3rd Party Library IntegrationAndroid Studio 3rd 方库集成
【发布时间】:2017-01-10 16:53:30
【问题描述】:

我必须将第 3 方库集成到我的 Android Studio 项目中,而且效果很好,没有任何问题。

它要求将以下配置添加到项目's build.gradle(示例配置如下)

allprojects {
    repositories {
        jcenter()
         maven {
            url "http://link/location"
         }
    }
}

然后给app.gradle添加依赖如下

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'com.android.support:support-v4:24.1.1'
    compile 'com.android.support:cardview-v7:24.1.1'
    compile 'xxx.xx:xxx:1.11.0:@aar'
}

但我在这里的要求是创建一个库模块(在项目中),其中包含这个第 3 方库集成。

想法是将包含少量公共方法(其中使用此第 3 方库方法)的我的库分发给其他人,以便与他们的应用程序集成。

正如我之前提到的,要使用这个 3rd 方库,我需要使用他们自己的 Maven 存储库并要求将设置放在 Projects build.gradle 中。但是因为我想在我的库模块中扭曲所有内容,所以我刚刚测试了将 repository 位添加到 Library Module's build.gradle 中。但这会产生编译错误。

 repositories {
    jcenter()
     maven {
        url "http://link/location"
     }
 } 

我的问题是我能实现我想要做的事情吗?如果是这样,我在这里缺少什么。谢谢

编辑

简要说明我想要做什么。

此第 3 方库在标准 jcenter 或 mavenCentral 存储库中不可用。相反,它驻留在自己的 Maven 存储库服务器上。这就是为什么当需要集成时,它要求在根级别(项目)build.gradle 中指定服务器位置,如下所示。然后我可以添加依赖...

allprojects {
    repositories {
        jcenter()
         maven {
            url "http://link/location"
         }
    }
}

但由于我想在库模块中完成此集成,因此尝试将上述存储库位置添加到我的库模块中的 gradle.build 中。

所以我可以访问这些类,但编译我的库项目的主应用程序说无法解析第 3 方库位置中的库。其实主应用程序不应该想知道,只要我的库模块知道它......

【问题讨论】:

  • 好吧,如果您没有compile 'xxx.xx:xxx:1.11.0:@aar',您希望您的库模块如何访问来自compile 'xxx.xx:xxx:1.11.0:@aar' 的代码?这不是唯一的,因为 AAR 位于不同的存储库中 - 如果您想使用某个库,您需要能够访问该库的代码,通常通过 compile 语句。
  • 感谢 CommonsWare,我基本上可以访问该 3rd 方库中的类并使用它们。但是当尝试在手机中安装时提供参考错误。想知道这是否是因为我没有在 root build.gradle 中指定 Maven LINK,而是在 Library 模块中指定。我在这里无法理解的是,理论上这是我想要做的事情是否可能。
  • 我还在库模块的 build.gradle 下的依赖项块中添加了“xxx.xx:xxx:1.11.0:@aar”。
  • “理论上这是我想要做的事情是否可能” - 目前还不清楚你想要做什么。如果您的问题是“App A 是否可以针对库 B 编译,而库 B 可以针对库 C 进行编译?”,那么答案是“是”。
  • 感谢 CommonsWare,请检查我的问题中的 EDITS 部分。

标签: android maven android-studio gradle android-gradle-plugin


【解决方案1】:

实际上,只要我的库模块知道,主应用程序就不应该知道它

如果第三方模块是开源的,则对其进行 fork,将您的包装器代码放入 fork,然后以您自己的方式发布 fork。

如果第三方模块不是开源的,请与供应商讨论通过其他方式(例如,您自己的内部存储库,以及您自己的库)分发此代码的选项。

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多