Почему моя активность модуля Android не обнаружена в объединенных AndroidManifest из основного приложения? - PullRequest
0 голосов
/ 28 мая 2020

Мое текущее Android Приложение имеет основное приложение и несколько модулей пользовательского интерфейса,

Я пытаюсь запустить действие модуля пользовательского интерфейса из основного приложения следующим образом ...

 activity.startActivity(Intent().setClassName(it.screen.packageName(), it.screen.className()))

исключение, которое я вижу, это

 android.content.ActivityNotFoundException: Unable to find explicit activity class {org.research.development.ui_module_a/org.research.development.ui_module_a.ModuleAScreenOneActivity}; have you declared this activity in your AndroidManifest.xml?

Я думал, что все AndroidManifiest файлы были объединены в один, поэтому наверняка во время выполнения есть один файл манифеста, и он будет содержать все действия?

Это Невозможно запустить действие модуля с использованием имени пакета и имени класса в виде строк?

Единственный ли вариант - использовать фильтры намерений действий?

1 Ответ

1 голос
/ 28 мая 2020

Я думал, что все файлы AndroidManifyt были объединены в один, поэтому наверняка во время выполнения есть один файл манифеста, и он будет содержать все действия?

Они есть. Вы можете проверить это в Android Studio, открыв свой основной файл манифеста (обычно расположенный в app /) и выбрав вкладку «объединенный манифест».

Вероятно, вы не устанавливаете имя класса и пакет назовите правильно. Для иллюстрации предположим, что у меня есть модуль приложения (основной) и еще один модуль, mymodule. Модуль приложения зависит от этого. Предположим также, что это отладочная сборка, и у нас настроен суффикс «.debug». В этом случае значения будут

package = "com.mypackage.debug"
classname = "com.mypackage.somethingonmymodule.MyActivity"

Таким образом, пакет должен быть пакетом вашего приложения, видимым ОС (и определенным в конечном манифесте, который связан с apk), а имя класса - полностью квалифицированный пакет. как вы определяете его в своей кодовой базе. Оба этих значения должны быть видны в объединенном представлении манифеста (как указано выше).

В качестве альтернативы, если модуль приложения зависит от mymodule, вы можете создать свое намерение другим способом:

Intent(context, MyActivity::class.java)
...