我想将我的应用程序资源公开给我创建的库项目。该库名为auth(是firebase UI的一个分支),它是android studio中的一个库模块。然后我有我的应用程序代码来构建应用程序。但是有一些资源我希望图书馆能够看到。将资源复制到库中会更好吗?我认为不是因为它占用了更多的空间。我怎样才能暴露资源?我的另一个想法是将所有资源放入一个“公共库”,应用程序和auth都可以访问它?但它有点混乱我清洁的建筑,我想这样。我能做的另一件事是让库依赖于应用程序。所以会有循环依赖。没关系,因为不仅仅是我的资源,但代码也暴露了?
我已经尝试将drawables作为参数传递但是寻找另一种解决方案,也许是在gradle中?
答案 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>