在其他第三方sdk中使用第三方sdk类



我正在开发android sdk(可以是aar文件或jar文件)

在我的sdk中,我想使用由应用程序本身引用的第三方sdk

例如,如果构建。Gradle的应用程序本身有这样一行:

com.google.android.gms:play-services-ads:9.4.0

我想在我自己的应用中使用play-services-ads类和方法,而不需要在我自己的aar中引用它们

我想到了一种方法——使用反射?

你能建议其他方法吗?

我知道有两种选择:安全的方法和简单的方法。

安全的方法是使用两个库模块。一个包含大多数库代码。另一个依赖于第一个库和第三方库,这里是使用第三方库的代码所在的地方。如果开发人员想要使用使用第三方库的代码,他们依赖于你的第二个库;否则,它们只使用第一个库。

简单的方法是使用provided作用域:

apply plugin: 'com.android.library'
dependencies {
    androidTestCompile 'com.android.support.test:rules:0.5'
    compile 'com.android.support:support-annotations:24.2.0'
    provided 'com.squareup.okhttp3:okhttp:3.4.1'
    androidTestCompile 'com.squareup.okhttp3:okhttp:3.4.1'
}

这是一个库中的build.gradle,可以为HttpUrlConnection添加智能,也可以选择为OkHttp添加智能。如果开发人员想要我的OkHttp逻辑,他们需要为OkHttp的兼容版本拥有自己的compile指令。仅仅依赖于我的库不会拉OkHttp。然而,在编译时,我仍然可以引用OkHttp类和东西。

provided有几个风险:

  • 如果开发者为你的provided依赖项跳过compile指令,然后尝试使用需要依赖项的逻辑,你会在运行时崩溃,因为你需要的类或方法不存在。你可以尝试使用反射来检测被编译到应用程序中的库(例如,Class.forName()来查看是否存在OkHttp中的内容)。

  • 你可能无法控制应用开发者使用的依赖版本。使用第一种方法,你声明你支持的版本,如果应用程序开发人员试图用他们自己的compile语句覆盖它,他们将得到Gradle警告和错误。我不确定应用程序开发人员是否得到相同级别的通知,如果他们的compile语句的版本与您的provided语句的版本冲突。

这个库是我第一次尝试provided。到目前为止,我还没有收到很多抱怨,但是这个库相当新。

也许我没有很好地理解你的目标。

但是如果你不引用要使用的类,你怎么能编译你的项目呢?

简单地说,你应该在使用sdk aar的最终应用项目中声明play-services-ads依赖项。

另一个技巧是你可以在sdk的构建中使用依赖项"transitive"属性。Gradle文件,如下所示:

compile('com.google.android.gms:play-services-ads:9.4.0@aar') {
    transitive = true;
}

相关内容

  • 没有找到相关文章

最新更新