自定义库中包含的库不是示例项目 Android 中的 usable/visible
Libraries included in custom library not usable/visible in sample project Android
我正在创建调用天气的简单库 api,在我的 lib 项目中,我使用 RxJava 和 RxAndroid 并改进了 http 调用。
我的 WeatherService 进行调用并接收结果为 json 并且需要进行一些操作并将其 return 作为 Single<CurrentWeather>
发送给客户端应用程序。
在我的 lib 项目中,我向 gradle 添加了 rx 和改造所需的所有依赖项。
我的图书馆gradle:
ext{
rxJava = "2.1.17"
rxAndroid = "2.0.2"
support = "27.1.1"
retrofitVersion = "2.4.0"
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.android.support:appcompat-v7:$support"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroid"
implementation "io.reactivex.rxjava2:rxjava:$rxJava"
}
现在,在我的 MainActivity 示例应用程序中,我想测试一个函数以查看它是否按预期工作,但是当我尝试调用 return Single 的函数时,它显示 comlpile 错误:
error: cannot access Single
class file for io.reactivex.Single not found
lib函数声明:
public Single<Current> getCurrentWeather(double lat, double lng) {
return mClient.getWeather(lat + "," + lng).flatMap(new Function<JSONObject, SingleSource<Current>>() {
@Override
public SingleSource<Current> apply(JSONObject jsonObject) throws Exception {
//parse jsonObject and return as Single<Current>
return Single.create(new SingleOnSubscribe<Current>() {
@Override
public void subscribe(SingleEmitter<Current> emitter) throws Exception {
Current current = new Current();
emitter.onSuccess(current);
}
});
}
});
}
客户端应用程序 MainActivity:此处出现编译错误。
WeatherService.getIsnstance().getCurrentWeather(32.5554, 35.545)
客户端应用 gradle:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation project(":weatherlib")
}
客户端应用程序 settings.gradle:
include ':app', ':weatherlib'
我错过了什么吗?
这是否意味着每个希望使用此库的人都必须在他们的 gradle 中添加 rx 依赖项?
您需要使用 api
而不是 implementation
作为库的依赖项。
他们的区别
我正在创建调用天气的简单库 api,在我的 lib 项目中,我使用 RxJava 和 RxAndroid 并改进了 http 调用。
我的 WeatherService 进行调用并接收结果为 json 并且需要进行一些操作并将其 return 作为 Single<CurrentWeather>
发送给客户端应用程序。
在我的 lib 项目中,我向 gradle 添加了 rx 和改造所需的所有依赖项。
我的图书馆gradle:
ext{
rxJava = "2.1.17"
rxAndroid = "2.0.2"
support = "27.1.1"
retrofitVersion = "2.4.0"
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.android.support:appcompat-v7:$support"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroid"
implementation "io.reactivex.rxjava2:rxjava:$rxJava"
}
现在,在我的 MainActivity 示例应用程序中,我想测试一个函数以查看它是否按预期工作,但是当我尝试调用 return Single 的函数时,它显示 comlpile 错误:
error: cannot access Single
class file for io.reactivex.Single not found
lib函数声明:
public Single<Current> getCurrentWeather(double lat, double lng) {
return mClient.getWeather(lat + "," + lng).flatMap(new Function<JSONObject, SingleSource<Current>>() {
@Override
public SingleSource<Current> apply(JSONObject jsonObject) throws Exception {
//parse jsonObject and return as Single<Current>
return Single.create(new SingleOnSubscribe<Current>() {
@Override
public void subscribe(SingleEmitter<Current> emitter) throws Exception {
Current current = new Current();
emitter.onSuccess(current);
}
});
}
});
}
客户端应用程序 MainActivity:此处出现编译错误。
WeatherService.getIsnstance().getCurrentWeather(32.5554, 35.545)
客户端应用 gradle:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation project(":weatherlib")
}
客户端应用程序 settings.gradle:
include ':app', ':weatherlib'
我错过了什么吗?
这是否意味着每个希望使用此库的人都必须在他们的 gradle 中添加 rx 依赖项?
您需要使用 api
而不是 implementation
作为库的依赖项。