插件用得好,功能翻倍;用得不好,全是坑
做手机应用开发的,没人能绕开插件。地图定位要集成SDK,支付得接第三方,连个分享功能都得靠社交平台的插件。用起来是方便,但问题也跟着来了——依赖越来越多,项目越来越重,一升级就报错,打包动不动就冲突。
前几天同事改了个登录流程,顺手更新了微信登录插件,结果编译直接卡在 dependency resolve 阶段。查了半天才发现,新版本偷偷升级了底层网络库,和我们正在用的OkHttp版本打架。这种事在团队协作里太常见了。
版本锁定不是小事
很多人图省事,直接写 implementation 'com.example.plugin:core:+',觉得能自动用最新版。可“最新”不等于“稳定”。建议把关键插件的版本号固定下来,比如:
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.1.0'
implementation 'com.amap.api:map-2d:9.5.0'这样哪怕别人拉代码、换机器,构建出来的包也是一致的。不然今天你跑得好好的,明天CI流水线就挂了。
排除冲突,该动手时就动手
两个插件都引入了不同版本的Gson?别慌,Gradle支持依赖排除。比如某个插件自带旧版 Retrofit,而你需要新版:
implementation('com.some.plugin:sdk:2.3.1') {
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
}
implementation 'com.squareup.retrofit2:retrofit:2.9.0'这样既能保留插件功能,又能用上自己控制的网络框架。
本地模块化,把关键依赖收回来
有些核心功能,比如图片压缩、数据加密,别一股脑塞进主工程。可以拆成独立module,只暴露接口。外部插件变更多,影响范围也能锁住。
比如我们有个工具模块叫 “common-util”,里面封装了所有第三方调用。一旦某个SDK停服或者收费,改一处,全项目生效,不用满代码找 implementation。
定期做依赖体检
运行 ./gradlew app:dependencies 看看依赖树,经常能发现重复引入的库。比如一个插件带了Kotlin标准库1.7,另一个带了1.8,最后APK体积莫名变大几MB。
还有些插件打着“一键集成”的旗号,实际把整个框架都打进去,哪怕你只用了其中10%的功能。这时候就得掂量下,是不是自己实现更划算。
插件不是越多越好,依赖也不是越新越强。管好你的 build.gradle,就像管好厨房里的调料——放对地方才提味,乱加只会毁菜。