Разрешение в библиотеке Android¶
Внимание
Эта документация все еще является экспериментальной, и детали могут быть изменены по мере итераций. Не стесняйтесь делиться своими отзывами в обсуждении внутри рабочей группы для этой страницы.
Более того, она содержит несколько ручных шагов. Пожалуйста, обратите внимание, что это не будет представлять окончательный опыт разработчиков, когда Новая архитектура станет стабильной. Мы работаем над инструментами, шаблонами и библиотеками, которые помогут вам быстро начать работу с новой архитектурой без необходимости проходить всю процедуру настройки.
После того, как вы определили спецификации JavaScript для ваших родных модулей в рамках предварительных условий, настроили конфигурацию Codegen и выполнили настройку Android/Gradle, теперь вы готовы перенести вашу библиотеку на новую архитектуру. Вот шаги, которые вы можете выполнить для этого.
1. Расширить или реализовать сгенерированные кодом нативные интерфейсы¶
Спецификация JavaScript для вашего нативного модуля или компонента будет использоваться для генерации кода нативного интерфейса для каждой поддерживаемой платформы (т.е. Android и iOS). Эти файлы нативных интерфейсов будут генерироваться когда будет создано приложение React Native, зависящее от вашей библиотеки.
Хотя сгенерированный код нативного интерфейса не будет поставляться как часть вашей библиотеки, вам необходимо убедиться, что ваш код на Java/Kotlin соответствует протоколам, предоставляемым этими файлами нативного интерфейса.
Вы можете вызвать задачу generateCodegenArtifactsFromSchema
Gradle для генерации кода нативного интерфейса вашей библиотеки, чтобы использовать их в качестве ссылки:.
1 |
|
Файлы, которые выводятся, можно найти внутри build/generated/source/codegen
и не должны быть зафиксированы, но вам нужно будет обратиться к ним, чтобы определить, какие изменения нужно внести в ваши родные модули, чтобы они обеспечивали реализацию каждого сгенерированного интерфейса.
Вывод Codegen для модуля с именем NativeAwesomeManager
будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Расширяет абстрактный класс, предоставленный кодогеном¶
Обновите ваш нативный модуль или компонент, чтобы убедиться, что он расширяет абстрактный класс, который был сгенерирован из ваших спецификаций JavaScript (т.е. файл NativeAwesomeManagerSpec.java
из предыдущего примера).
Следуя примеру, приведенному в предыдущем разделе, ваша библиотека может импортировать NativeAwesomeManagerSpec
, реализовать соответствующий "родной" интерфейс и необходимые методы для него:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Обратите внимание, что генерируемый абстрактный класс, который вы сейчас расширяете (MyAwesomeSpec
в данном примере), сам расширяет ReactContextBaseJavaModule
. Поэтому вы не должны использовать доступ ни к одному из методов/полей, которые вы использовали ранее (например, ReactApplicationContext
и так далее). Более того, созданный класс теперь также будет реализовывать интерфейс TurboModule
для вас.