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()
相关推荐
2601_949543011 小时前
Flutter for OpenHarmony垃圾分类指南App实战:主题配置实现
android·flutter
2601_949833392 小时前
flutter_for_openharmony口腔护理app实战+知识实现
android·javascript·flutter
晚霞的不甘2 小时前
Flutter for OpenHarmony从基础到专业:深度解析新版番茄钟的倒计时优化
android·flutter·ui·正则表达式·前端框架·鸿蒙
鸟儿不吃草3 小时前
android的Retrofit请求https://192.168.43.73:8080/报错:Handshake failed
android·retrofit
Minilinux20183 小时前
Android音频系列(09)-AudioPolicyManager代码解析
android·音视频·apm·audiopolicy·音频策略
李子红了时3 小时前
【无标题】
android
Android系统攻城狮5 小时前
Android tinyalsa深度解析之pcm_close调用流程与实战(一百零四)
android·pcm·tinyalsa·音频进阶·音频性能实战·android hal
weixin_411191845 小时前
LifecycleEventObserver和DefaultLifecycleObserver使用
android
、BeYourself5 小时前
Intent :跳转与数据传递的正确打开方式
android·android-studio
灵感菇_5 小时前
Android 列表控件全面解析:ListView 与 RecyclerView
android·ui