Gradle方式

Gradle

依赖类型

1. implementation 'com.google.protobuf:protobuf-javalite:3.11.0'  
2. implementation project(':core')
3. implementation fileTree(dir: 'libs', include: ['*.jar'])
4. implementation files('libs/core.jar', 'libs/core.jar')

说明:
第一种其实是依赖maven无论本地maven还是远程maven,都是可以用这种方式依赖的,但是本地依赖和远程依赖不同的是,本地maven需要将其他依赖都手动依赖否则没有传递性,但是远程maven则不用将其他依赖手动添加会自动添加。
第二种其实直接依赖本地 'core' module的方式,,直接可以debug进去。
第三种其实是本地依赖二进制方式,依赖moudle/libs/*.jar包 // 没有用过
第四种其实直接依赖本地一个文件,moudle/libs/core.jar  // 没有用过

依赖配置

目前Gradle版本支持的依赖配置有:implementation、compileOnly、api、runtimeOnly ,其中有很多已经废弃了,常用的是implementation、api、compileOnly三个依赖配置.

1. implementation ,这个其实上面类型也可以看到,将想要的模块依赖到本module中或者project中,其中直接依赖本地moudle的方式是可以debug进去的,在进行调试的时候可以用这种方式。针对依赖本地maven和远程maven的区别就是本地无法依赖到其他依赖需要手动添加,远程则无需这样做,会自动添加进来。此外都会将依赖打进aar获取apk中。
2. api 则是一个可以传递依赖的implementation,但是也会导致一些不想暴露的类或者api暴露出去。
3. compileOnly 只在编译时期有效,但是不会将其打包进入aar或者apk,这种比较适合那种通用的库,比如Protobuf,Gson,Okhttp,这样做的可以让打出来的包没有那么多冗余依赖,包会变小一点。

依赖冲突(实际遇到)

一般都会出现某个重复的类,或者每个方法找不到,或者直接没有对应的类,其中在pb依赖的时候碰到很多问题。如因为pb的版本不一致问题,javalite版本,java版本(一般不用,太大了),lite版本(最初为Android设计,但是不知道为啥更新两个版本后不更新了,现在官网推荐是javalite版本),sdk中使用的lite版本,但是其他sdk使用javalite,那么就会出现不兼容的问题,导致lite版本问题。其次遇到是多个so,直接用pickfirst可以解决,但是因为版本不一致so也不相同,很坑爹。

0. 可以将重复的so进行pick
   packagingOptions {
        pickFirst 'lib/armeabi-v7a/libprotobuf.so'
        pickFirst 'lib/arm64-v8a/libprotobuf.so'
    }
    
1. 可以直接将冲突的部分排除
exclude group: 'com.google.protobuf', module: 'protobuf-lite',这样在依赖lite版本sdk时其实可以将这个版本排除,针对这个lite版本冗余,如果不是lite版本还是不能解决问题。

2. 其实上面方式都不能解决前面说的pb问题,需要将sdk的版本替换成一致的,如果换成javalite版本建议直接使用3.10.0以上,不要使用3.9.1版本,否则在混淆的时候你会发现field not found,需要手动keep,如下
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite {
  <fields>;
}

3. 其实统一版本之外还有一个方法,就是直接将pb库自己手动修改命名空间,然后打进sdk里面,但是工作量有点大,以后更新版本都需要手动替换一遍,同时使sdk变大。

参考
https://juejin.im/post/5c1700f5f265da614312f794

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值