Android Studio - 在库项目中如何引用应用资源



我想向我创建的库项目公开我的应用程序资源。 该库称为身份验证(是Firebase UI的一个分支(,它是Android Studio中的一个库模块。然后,我有了我的应用程序代码来构建应用程序。 但是我希望库能够看到一些资源。 将资源复制到库中会更好吗?我认为不是这样占用更多空间。如何仅公开资源?我的另一个想法是将所有资源放入一个"公共库"中,应用程序和身份验证都可以访问它?但我认为这有点搞砸了我干净的架构。 我可以做的另一件事是使库依赖于应用程序。所以会有循环依赖。 可以吗,因为这样不仅我的资源而且代码也会暴露?

我尝试将可绘制对象作为参数传递,但正在寻找另一种解决方案,也许在 gradle 中?

您可以将资源复制到库中。如果它们具有相同的名称,则Android构建将合并资源,因此您不会获得重复项。不过请注意优先级,这取决于构建顺序。

我不知道

你为什么要这样做。我无法想象你应该使用的任何极端情况,但如果你坚持下去,你可以使用 Resources.getIdentifier((。

int getIdentifier (字符串名称, 字符串定义类型, 字符串定义包(

例:

resources.getString(resources.getIdentifier("app_name", "string", "app_package_name"))

我已经尝试过,它工作正常,但我不推荐它。

PS : 我完全同意亨利的评论。

我只是想出了一个更聪明的方法来做这一切。 我们可以从样式中做到这一点。 如果我在应用程序中覆盖相同的库样式,它将影响库(只要我们保持相同的名称(。这是一种强制执行miles_christian答案。以下是基本概念:

在库中声明一个样式,例如:

<style name="MyApp.my_library_style">
        <item name="drawableStartCompat">@drawable/fui_ic_phone_white_24dp</item>
        <item name="android:background">@drawable/mylibrary_logo</item>
        <item name="android:textColor">#ffffff</item>
    </style>

如果要覆盖背景,例如在应用程序样式中,请在应用程序中声明完全相同的 Stye 声明,它将被覆盖:

<style name="MyApp.my_library_style">
        <item name="drawableStartCompat">@drawable/fui_ic_phone_white_24dp</item>
        <item name="android:background">@drawable/myapp_logo</item>
        <item name="android:textColor">#ffffff</item>
    </style>

最新更新