android studio - 在库项目中如何引用app资源

时间:2018-03-24 05:47:24

标签: android android-library

我想将我的应用程序资源公开给我创建的库项目。该库名为auth(是firebase UI的一个分支),它是android studio中的一个库模块。然后我有我的应用程序代码来构建应用程序。但是有一些资源我希望图书馆能够看到。将资源复制到库中会更好吗?我认为不是因为它占用了更多的空间。我怎样才能暴露资源?我的另一个想法是将所有资源放入一个“公共库”,应用程序和auth都可以访问它?但它有点混乱我清洁的建筑,我想这样。我能做的另一件事是让库依赖于应用程序。所以会有循环依赖。没关系,因为不仅仅是我的资源,但代码也暴露了?

我已经尝试将drawables作为参数传递但是寻找另一种解决方案,也许是在gradle中?

3 个答案:

答案 0 :(得分:1)

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

int getIdentifier(String name,                 字符串defType,                 字符串defPackage)

示例:

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我只想找到一个更聪明的方法来做这一切。我们可以从风格做到这一点。如果我在应用程序中覆盖相同的库样式,它将影响库(只要我们保持相同的名称)。这是强制执行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>