Android: импорт ресурсов в featureModule по сравнению с библиотечным модулем - PullRequest
4 голосов
/ 01 августа 2020

App Structure

featureModule = apply plugin: 'com.android.dynamic-feature'

libraryModule = apply plugin: 'com.android.library'

Problem - Using any library resources in feature module requires full package name qualifier which eventually creates a problem for databinding generated classes in feature module.

Description - I have this above app structure. When I am trying to use any library resource in any featureModule it requires to specify the resource with full package name qualifier because by default I have the feature resource R as the main import.

So for any kotlin class let say activity code looks like this

feature-1/TestActivity.kt

internal class TestActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityTestBinding = DataBindingUtil.setContentView(this, R.layout.activity_test)
        binding.testName.text = getText(R.string.abc_test) // this resource is present in core-lib module
    }
}

The above will lead to an unresolved reference error which you can resolve by using full-name so instead of R.string.abc_test use com.blah.core-lib.R.string.abc_test.

R.layout.activity_test

  

Но для XML -databinding это создает большую проблему. Поскольку R.layout.abc_test находится в функциональном модуле, он не может получить доступ к библиотечному ресурсу. Я могу решить эту проблему, используя служебный класс, и разрешить служебному классу возвращать строку с квалификатором полного имени пакета, но эта проблема ограничивает многие функции привязки данных, когда я не могу использовать ресурс непосредственно в самом XML.

PS : все это отлично работает, если я конвертирую свой функциональный модуль в библиотечный модуль. Даже на уровне кода я не использую квалификатор полного имени пакета, если это библиотечный модуль.

Есть ли у кого-нибудь лучшие предложения по решению этой проблемы для функциональных модулей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...