资源传递性:android.nonTransitiveRClass
android.nonTransitiveRClass 是 Android Gradle 插件中的一个属性,用于控制 R 类的生成和使用。 注意:android.nonTransitiveRClass 只适用于 Android Gradle 插件 3.5.0 及以上版本。
当 android.nonTransitiveRClass 设置为 true 时,Gradle 会生成一个非传递的 R 类,这意味着:
只有当前模块的资源会被编译到 R 类中, 依赖模块的资源不会被编译到 R 类中,这可以帮助避免资源冲突和重复定义的问题。
# 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
这也是默认值,只会在资源所属module的包名下生成对应R文件,其他module引用只能通过原module的包名引用。
当 android.nonTransitiveRClass 设置为 false 时,Gradle 会生成一个传递的 R 类,这意味着:
当前模块的资源和依赖模块的资源都会被编译到 R 类中 。
# 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=false
如遇到Android 不能引用子module资源文件,可以将此设置为false。
如果有资源冲突或重复定义,Gradle 会抛出错误,通常需要将 android.nonTransitiveRClass 设置为 true,以避免资源冲突和重复定义的问题。
更多字段详见:https://developer.android.google.cn/build/releases/past-releases/agp-8-0-0-release-notes?hl=zh-cn
android.nonFinalResIds | true | false | AGP 8.0 默认会生成包含非最终字段的 R 类。 |
android.nonTransitiveRClass | true | false | AGP 8.0 仅为当前模块中定义的资源生成 R 类。 |
精彩的人生需要浪漫、无畏和勇气。