android studio - 在库项目中如何引用应用程序资源
android studio - within library project how to reference app resources
我想将我的应用程序资源公开给我创建的库项目。该库称为 auth(是 firebase UI 的一个分支),它是 android studio 中的一个库模块。然后我有我的应用程序代码来构建应用程序。但有一些资源我希望图书馆能够看到。将资源复制到图书馆会更好吗?我认为不是这样,因为它占用了更多 space。我怎样才能公开资源?我的另一个想法是将所有资源放入 "common-library" 中,应用程序和授权都可以访问它?但我这样想有点弄乱了我干净的架构。我可以做的另一件事是让图书馆依赖于应用程序。所以会有循环依赖。这样可以吗,因为那样不仅我的资源而且代码也会暴露?
我试过将可绘制对象作为参数传递,但正在寻找另一种解决方案,也许在 gradle 中?
我不知道你为什么要这样做。我无法想象你应该使用的任何极端情况,但如果你坚持下去,你可以使用 Resources.getIdentifier()。
int getIdentifier (字符串名称,
字符串定义类型,
字符串 defPackage)
示例:
resources.getString(resources.getIdentifier("app_name", "string", "app_package_name"))
我试过了,效果很好,但我不推荐。
PS : 我完全同意亨利的评论。
您可以将资源复制到图书馆。如果它们具有相同的名称 Android build 将合并资源,因此您不会得到重复的资源。不过请注意优先级,这取决于构建顺序。
我只是想出了一个更聪明的方法来完成这一切。我们可以从样式中做到这一点。如果我在应用程序中覆盖相同的库样式,它将影响库(只要我们保持相同的名称)。这是一种强制性的 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>
如果您想在您的应用样式中覆盖背景,例如在您的应用中声明完全相同的麦粒肿声明,它将被覆盖:
<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>
我想将我的应用程序资源公开给我创建的库项目。该库称为 auth(是 firebase UI 的一个分支),它是 android studio 中的一个库模块。然后我有我的应用程序代码来构建应用程序。但有一些资源我希望图书馆能够看到。将资源复制到图书馆会更好吗?我认为不是这样,因为它占用了更多 space。我怎样才能公开资源?我的另一个想法是将所有资源放入 "common-library" 中,应用程序和授权都可以访问它?但我这样想有点弄乱了我干净的架构。我可以做的另一件事是让图书馆依赖于应用程序。所以会有循环依赖。这样可以吗,因为那样不仅我的资源而且代码也会暴露?
我试过将可绘制对象作为参数传递,但正在寻找另一种解决方案,也许在 gradle 中?
我不知道你为什么要这样做。我无法想象你应该使用的任何极端情况,但如果你坚持下去,你可以使用 Resources.getIdentifier()。
int getIdentifier (字符串名称, 字符串定义类型, 字符串 defPackage)
示例:
resources.getString(resources.getIdentifier("app_name", "string", "app_package_name"))
我试过了,效果很好,但我不推荐。
PS : 我完全同意亨利的评论。
您可以将资源复制到图书馆。如果它们具有相同的名称 Android build 将合并资源,因此您不会得到重复的资源。不过请注意优先级,这取决于构建顺序。
我只是想出了一个更聪明的方法来完成这一切。我们可以从样式中做到这一点。如果我在应用程序中覆盖相同的库样式,它将影响库(只要我们保持相同的名称)。这是一种强制性的 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>
如果您想在您的应用样式中覆盖背景,例如在您的应用中声明完全相同的麦粒肿声明,它将被覆盖:
<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>