一、compileOnly、implementation、api 三者区别;
总结对比表:
| 配置 | 编译时可用 | 运行时可用 | 是否传递 | 使用场景 |
|---|---|---|---|---|
implementation |
✅ | ✅ | ❌ | 普通依赖,默认推荐 |
api |
✅ | ✅ | ✅ | 需要暴露给其他模块使用的依赖 |
compileOnly |
✅ | ❌ | ❌ | 仅编译时需要,如注解、平台 SDK |
compileOnly 适合依赖机器存在jar代码时用,如编译的framework.jar,可减小apk体积。
最佳实践建议:
- **默认使用
implementation**:避免不必要的依赖传递。 - **慎用
api**:只有当多个模块需要共享某个库的 API 时才使用。 - **合理使用
compileOnly**:如 Lombok、Dagger 编译时生成代码,或 Android 中的provided场景。 - 迁移旧项目 :将旧的
compile改为implementation或api,根据实际暴露需求决定。
二、混淆配置
本地测试来看,编译aar时,
minifyEnabled true 表示开混淆,为true时,proguard-rules.pro才有用;
consumerProguardFiles "consumer-rules.pro" 会将consumer-rules.pro 中的内容打包到aar中proguard.txt 中,类似一个说明作用。
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
则是按proguard-rules.pro 中的文件来决定哪些类不进行混淆。
但参数类型和注释保留测试不起作用。