为什么appcompat-v7不能在库模块中使用compileOnly

问题描述 投票:1回答:1

我们知道gradle 3.xx更新了依赖配置,我在使用时有一个问题,我们知道如果项目使用v7:26.0.1,最好在库模块中使用相同的版本,所以我认为使用compileOnly是最好的选择,它将通过编译时间并在运行时使用app库的v7代码,它会减小apk大小并且不关心v7版本吗?但是你试试,你会发现它无法通过编译时间,为什么?

这些是我得到的错误,它们都与xml没有找到值有关。

Error:(43) No resource identifier found for attribute 'srcCompat' in package 'com.yalantis.ucrop.test'

Error:(19, 20) No resource found that matches the given name (at 'style' with value '@style/TextAppearance.Widget.AppCompat.Toolbar.Title').
android gradle
1个回答
1
投票

compileOnly意味着它只是编译。在运行时的含义,当它需要AppCompat库时,它不存在,因为该库未添加到APK本身。

您可以使用像Lombok这样的库来执行compileOnly,因为它在运行时不需要 - 只需编译时间。但是,在运行时也需要AppCompat。不要使用compileOnly。使用implementation(如果你有使用它的gradle版本,则使用compile)。

你可以使用compileOnly关键字,例如:注释库(如Lombok),因为通常在编译时删除对库的引用(并转换为非库代码)。当然有例外,但这是一个使用示例。

使用compileOnly的APK较小,因为该库未添加到APK中。使用compileOnly时,不能在运行时使用任何库功能,因为在运行时无法找到库

© www.soinside.com 2019 - 2024. All rights reserved.