Android广告SDK聚合开发

开发需求需要聚合多渠道广告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
            dimension "version"
        }
        a {
     //only a
            dimension "version"
        }
        b {
     //only b
            dimension "version"
       }
    }
    sourceSets {
        standard {
            java.srcDirs = ['src/a/java/xxx/normal'
                            , 'src/b/java/xxx/normal', 'src/standard/java']
            res.srcDirs = ['src/a/res', 'src/b/res', 'src/standard/res']
            manifest.srcFile 'src/standard/AndroidManifest.xml'
        }
        a {
            setRoot 'src/a'
        }
        b {
            setRoot 'src/b'
        }
    }

路由方式来控制跳转

public static void startActivityForName(Context context, String name) {
        try {
            Class clazz = Class.forName(name);
            startActivity(context, clazz);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

 public static Fragment getFragment(String name) {
        Fragment fragment;
        try {
            Class fragmentClass = Class.forName(name);
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return fragment;
    }

Build Variant

  • Build Type + Product Flavor = Build Variant
  • flavor 是sunmi,build type是debug ,则build variant是sunmiDebug

此外贴一些为数不多的广告sdk开发相关的文章:

  • Android SDK 开发纪要
  • 教你如何在SDK开发使用美团Robust进行热更新
  • 简洁易用的SDK开发之道
  • Android SDK 是如何工作的

你可能感兴趣的:(sdk开发,Android编程,android,sdk,广告)