Библиотеки, включенные в пользовательскую библиотеку, не используются / не видны в примере проекта Android - PullRequest
0 голосов
/ 09 ноября 2018

Я создаю простую библиотеку, которая делает вызовы API погоды, в моем lib-проекте я использую RxJava и RxAndroid и модифицирую для вызовов http. Мой WeatherService выполняет вызов и получает результат как json, и ему необходимо выполнить некоторые манипуляции и вернуть его как 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 я хотел протестировать одну функцию, чтобы увидеть, работает ли она должным образом, но когда я пытаюсь вызвать функцию, которая возвращает Single, он показывает ошибку компиляции:

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")
}

Настройки клиентского приложения. Gradle:

include ':app', ':weatherlib'

Я что-то здесь скучаю?

Значит ли это, что каждый, кто захочет использовать эту библиотеку, должен будет также добавить зависимости rx в свой gradle?

1 Ответ

0 голосов
/ 09 ноября 2018

Вам необходимо использовать api вместо implementation для зависимостей вашей библиотеки.

См. Здесь разницу между ними.

...