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()
相关推荐
zh_xuan29 分钟前
Android Looper源码阅读
android
用户02738518402611 小时前
[Android]RecycleView的item用法
android
前行的小黑炭11 小时前
Android :为APK注入“脂肪”,论Android垃圾代码在安全加固中的作用
android·kotlin
帅得不敢出门12 小时前
Docker安装Ubuntu搭建Android SDK编译环境
android·ubuntu·docker
tangweiguo0305198713 小时前
Android Kotlin 动态注册 Broadcast 的完整封装方案
android·kotlin
fatiaozhang952713 小时前
浪潮CD1000-移动云电脑-RK3528芯片-2+32G-安卓9-2种开启ADB ROOT刷机教程方法
android·网络·adb·电脑·电视盒子·刷机固件·机顶盒刷机
前行的小黑炭13 小时前
Android 不同构建模式下使用不同类的例子:如何在debug模式和release模式,让其使用不同的类呢?
android·kotlin·gradle
andyguo14 小时前
AI模型测评平台工程化实战十二讲(第一讲:从手工测试到系统化的觉醒)
android
2501_9159214314 小时前
小团队如何高效完成 uni-app iOS 上架,从分工到工具组合的实战经验
android·ios·小程序·uni-app·cocoa·iphone·webview
幂简集成14 小时前
通义灵码 AI 程序员低代码 API 课程实战教程
android·人工智能·深度学习·神经网络·低代码·rxjava