使用第三方SDK CLASSE
我正在开发的Android SDK(可AAR文件或jar文件)使用第三方SDK CLASSE
在我的SDK我希望使用由应用程序本身
引用第三方的SDK例如,如果应用程序的的build.gradle本身有这样一行:
com.google.android.gms:play-services-ads:9.4.0
我想用在我自己的应用程序中的播放服务,广告类和方法,而无需引用它在我自己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'
}
这是从a library有点build.gradle
的,可以添加到智慧和HttpUrlConnection
任选到OkHttp。如果开发人员需要我的OkHttp逻辑,他们需要为兼容版本的OkHttp拥有自己的compile
指令。取决于我的图书馆将不会拉OkHttp。然而,在编译时,我仍然可以引用OkHttp类和东西。
有几个风险与provided
:
如果开发商跳过
compile
指令为您provided
依赖,然后尝试用你的逻辑,需要的依赖,你崩溃在运行时,因为类或您需要的方法不存在。您可以尝试使用反射来尝试检测已编译到应用程序中的库(例如,Class.forName()
以查看OkHttp中是否存在某些内容)。您可能对应用程序开发人员使用的依赖关系的版本有较少的控制权。使用第一种方法,您声明您支持的版本,如果应用程序开发人员尝试用他们自己的
compile
语句覆盖该版本,他们将获得Gradle警告和错误。如果他们的compile
声明的版本与您的provided
声明的版本冲突,我不确定应用程序开发人员是否获得相同级别的通知。
这个库是我第一次尝试provided
。到目前为止,我还没有多少投诉,但这个图书馆是相当新的。
也许我不太了解你的目标。
但是,如果您没有引用要使用的类,那么您如何编译您的项目?
只需要在使用sdk aar的最终应用程序项目中声明play-services-ads依赖关系。
另一个技巧是,你可以使用依赖“传递”属性在你的SDK的的build.gradle文件,如下所示:
compile('com.google.android.gms:play-services-ads:[email protected]') {
transitive = true;
}
什么是背后“你的目标,而无需引用它在我自己的AAR “?你只是想避免强迫开发者拥有“play-services-ads”依赖性吗? – CommonsWare
@CommonsWare试图尽可能减少aar/jar文件大小,并且不想在其中包含其他sdks依赖项 –