gradle Android Studio:无法将模块资源合并到主应用程序

3bygqnnd  于 2023-04-06  发布在  Android
关注(0)|答案(1)|浏览(186)

我有几个Android项目,它们共享相同的助手函数(在Kotlin中)和相同的资源,如button_保存,吐司_press_back_again_to_exit.将所有这些函数和资源提取到一个公共库中是很自然的,所有应用程序项目只需要包含这个库,而不是再次定义所有这些东西。
一切都很好,直到昨天我开始了一个新项目,我仍然可以在布局xml中引用那些公共资源,比如,andoird:text=“R.string.button_保存”,但我再也不能在Kotlin中通过R.string.button_save直接引用它们,我必须使用“com.example.app.common.R.string.button_save”。
看起来Android Studio无法将库/模块资源合并到主应用的R.java中。我认为这可能是因为最新的Gradle版本(8.0.2 +com.android.tools.build:gradle:7.4.2),我试图将Gradle降级到旧项目使用的相同版本(7.5.1 + com.android.tools.build:gradle:7.2.2),但它仍然不起作用。
我在谷歌上搜索了几个小时,但大多数都在谈论如何解决资源合并过程中的冲突,但我面临的问题是他们根本没有合并。
我甚至尝试从头开始创建一个应用程序项目,在其中不定义任何内容以确保没有冲突,然后创建一个新的模块库,只定义一个简单的字符串资源,以32位随机字符串作为其名称,也确保没有冲突。但是,在应用程序方面,我不能通过www.example.com使用这个字符串资源R.string.xxx,但必须通过com.example.myapplication.mylibrary.R.string.xxx使用它。
为什么?任何线索都将不胜感激!

9nvpjoqh

9nvpjoqh1#

不要紧,找到了根本原因。
在最新的Android Studio中,自动生成的 gradle.properties 文件包含以下内容:

# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true

相关问题