Android 多渠道打包多模块项目

异常:

Unresolved reference: ads

问题:

多模块项目根据不同渠道加载模块

场景:同一个项目需要同时上架海外和国内,但是海外上架不允许引入国内的广告资源,但是国内的包又需要使用广告。这个时候就可以将广告变成单独的模块,然后通过判断该不该加载广告资源模块。下面以广告模块(ads)在googlePlay渠道包上为例

  1. 创建一个模块New->Module->Android Library
  1. 在一个公共模块中创建一个公共的广告接口,被其他模块实现
  1. 创建一个广告ads模块,里面包含广告方法的实现和资源的引入,实现公共接口AdsInterface
  1. 在ads同一层下创建一个空实现的广告模块emptyAd,里面实现和ads模块完全一样的包名和类名
  1. 在项目的gradle.properties里面创建一个INTERNATIONAL_VERSION,用来判断加载的是哪个模块,名字任意
  1. 创建一个公共模块ChannelBase,实现一个工厂方法,获取对应广告的初始值。这个方法最关键的是ads和emptyAd模块使用了同样的模块包名才可以不管你导入的是哪个模块都可以调用该模块下的方法

6.在公共模块ChannelBase的build.gradle.kts里面调用gradle.properties的值进行判断引入哪个模块资源

kotlin 复制代码
val international: Boolean by project.extra {
    (findProperty("INTERNATIONAL_VERSION") as? String)?.toBoolean() ?: false
}
plugins {
   
}
android {
}

dependencies {

   //这个是广告接口AdsInterface所在的类,必须引入才能在工厂类AdManagerFactory里面调用
    implementation(project(":core:tool-utils"))

   //根据gradle.properties中定义的值进行引入对应的模块资源
    if (international) {
        implementation(project(":core:emptyAd"))
    } else {
        implementation(project(":core:ads"))
    }
}
  1. 其他模块可通过工厂类直接调用广告,这样不管打的包里面有没有实现对应的广告方法都不会导致引用处报错
scss 复制代码
AdManagerFactory.csj().initADS()
AdManagerFactory.csj().loadSplashAd()
相关推荐
正经教主19 小时前
【Git】Git06:Git 管理 Android 项目教程(含GitHub)
android·git
安卓理事人19 小时前
安卓多种通知ui更新的方式(livedata,rxjava,eventbus等)
android·ui·echarts
BS_Li19 小时前
【Linux系统编程】Ext系列文件系统
android·linux·ext系列文件系统
zhangphil19 小时前
Android宽高不均等Bitmap缩放为指定宽高FitCenter到正方形Bitmap,Kotlin
android·kotlin
别或许20 小时前
13.用户管理
android
q***96581 天前
springboot3整合knife4j详细版,包会!(不带swagger2玩)
android·前端·后端
巧克力芋泥包1 天前
前端使用阿里云图形验证码;并且与安卓进行交互
android·前端·阿里云
Just_Paranoid1 天前
【MQTT】基于 Android 设备接入物联网平台最佳实践
android·mqtt·eclipse·iot·paho·mqtt.fx
alexhilton1 天前
深入理解withContext和launch的真正区别
android·kotlin·android jetpack
TDengine (老段)1 天前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据