开发需求需要聚合多渠道广告SDK,并对外提供一套调用接口,中间控制层添加己方服务器交互以及控制逻辑(广告填充优先级等),初次开发sdk,整理遇到的问题希望可以帮到有缘人。
遇到的问题
aar嵌套引用ClassNotFound
这个问题在于当前SDK lib需要打包成aar以供app调用,lib集成的第三方广告sdk提供的也是aar包,这个问题刚开始用gradle3.0以后的implementation依赖第三方aar包,用项目直接依赖方式运行没有问题,但是在将lib打包之后会发现项目运行找不到第三方aar包含的类,报错是ClassNotFound。搜索解决方式全都是gradle3.0以前的构建方式(诸如本地maven仓库),尝试无果后看Android官方文档,最终尝试出在lib使用compileOnly(编译时依赖,不会打包到lib的aar)依赖第三方aar,然后app重复依赖所有lib依赖,得解。
分功能打包lib包问题
这个需求在于要根据渠道的不同打出不同功能的sdk包,要求每个渠道包都只包含自己需要的代码,所以就需要分开代码,同样遍寻网络基本没有可用的解决方案(sdk开发的确有些非主流。),读Android官方构建文档,最终尝试出解决方式,在Project视图中建立和main同等级通结构的渠道module(名称同渠道名,此哩即有standard、a、b三个渠道,AS可自动识别),然后在构建文件中如下配置:
publishNonDefault true
flavorDimensions "version"
productFlavors {
standard {//with a&b