Внедрение lib камеры с мультиплатформой Kotlin - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь понять, какая структура должна иметь мультиплатформенную библиотеку. Проверяя в Интернете, я видел огромное количество примеров, объясняющих, как сделать журнал или «привет мир», но не хватает сложных примеров, даже в официальной документации (важно отметить, что яЯ заинтересован только в мобильной платформе, iOS и Android).

Итак, я хочу создать пример, который просто открывает камеру (как библиотека, а не как мультиплатформенное приложение), просто чтобы иметь представление о том, какработать с реальной функцией, которая также является родной. Прямо сейчас я создал проект по официальному примеру , поэтому у него есть общий модуль (с использованием ожидаемого) и один для Android и один для iOS (с использованием фактического), и теперь это мои сомнения:

  • Я видел, что модуль iOS также находится в Kotlin, Kotlin / Native, как я понимаю. Должен ли мой проект иметь оболочку в Swift или в библиотеке не будет кода Swift? И если это так, где это должно быть в структуре проекта?

  • Также в модуле Android я заметил, что не могу импортировать ни класс «Activity», ни «Intent», которыйМне нужно будет открыть камеру, почему? этот код ограничен Java без библиотек Android? Должен ли он также иметь обертку для Android? Если да, как я могу настроить эти обертки?

  • Я знаю, что могу использовать клавишу «ожидание» при создании классов, но, как я понимаю, общий и нативный модули всегда будутотдельные классы. Я имею в виду, если я создаю класс в общем модуле, могу ли я определить методы этого класса, используя «ожидание», и определить их позже в нативном?

  • Может ли моя библиотека иметь манифест?

  • Наконец, кто-нибудь знает реальный пример, который действительно объясняет более сложную ситуацию?

Спасибо

1 Ответ

1 голос
/ 05 ноября 2019

Хорошо, давайте рассмотрим ваши вопросы один за другим.

  1. Я бы порекомендовал вам взглянуть на этот пример
  2. iOSВ результате модуль создает основу Objective-C. Он может использоваться проектом XCode так же, как и любой другой фреймворк с происхождением, отличным от Kotlin.
  3. Похоже, что недоступность использования Android SDK является результатом использования цели jvm("android") вместо android()один. Чтобы использовать цель Android, нужно применить плагин Gradle android в дополнение к мультиплатформенному kotlin.
  4. Я думаю, вы хотите сделать что-то подобное: просто обычное объявление класса в common и функцию расширения. для него с модификатором expect. А затем актуализировать его в коде, специфичном для платформы.
  5. Я так думаю.
  6. Я бы также рекомендовал вам взглянуть на this и this, возможно, эти примеры будут достаточно сложными для вас.
...