Android 不同渠道差异代码
前言
在开发过程中,会遇到这种业务。
在某一个渠道,需要引入一些三方sdk,需要写一些差异性代码,跟原来的业务有重叠。如果所有的判断逻辑都写在一起,会出现很多if(flavor==xxx),并且三方sdk的包也会都在app里产生增量,直接导致apk过大。
解决方案
话不多说,直接上解决方案:
1、src文件下面分渠道来写代码
2、build.gradle下使用 flavorImplemention 来引入渠道对应的三方库文件
详细案例请往下看
案例:在当贝渠道添加当贝sdk广告库
***’dangbeilibs‘***可以单独用于存放dangbeiSDK的库文件
!下面是重要图解
1、一般初始化sdk都需要在Application里面初始化。
DangbeiApp继承App
2、然后加载广告在DangbeiMainActivity里面加载。
DangbeiMainActivity继承MainActivity
3、清单文件也需要配置一下。
注意:红色框里面的代码。如果入口activity的category是launcher,那么多个activity就会出现多个桌面应用图标,这里这样写可以只有一个图标
具体的缘由可搜索:“Android清单文件替换优先级相关”
<activityandroid:name="com.xxxx.DangbeiMainActivity"android:screenOrientation="landscape"android:theme="@style/AppTheme.Splash"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>//这个activity和主工程里面配置一样,只是intent-filter会被进行替换,以致于整个清单文件 launcher的只有一个<activityandroid:name="com.xxxx.ui.main.MainActivity"android:screenOrientation="landscape"android:theme="@style/AppTheme.Splash"tools:node="replace"><intent-filter><action android:name="android.intent.action.MAIN" /></intent-filter></activity>
4、在继承的时候,原来MainActivity的一些属性和方法会被继承者使用的,应该改写成protected修饰符
5、如果你的工程使用了dagger,那么新增的Actiivty需要使用注解的,也需要新建module进行配置
6、如果你的宿主工程里面的方法使用到了class来进行判断,如果要区分是DangbeiMainActivity还是MainActivity,就需要进行特殊的处理。这里分享出一种方法。
比如: 如果你宿主MainActivity是要跳转到LivePlayActivity,你是这样写的。但是,DangbeiMainActivity里面如果是需要跳转到DangbeiLivePlayActivity(DangbeiLivePlayActivity继承于LivePlayActivity),而你宿主工程里面有没有DangbeiLivePlayActivity这个类,怎么办?
办法就是宿主工程里创建一个Util来保存class,在danbeiApp初始化的时候,设置一下。
public class ClassUtil {private static volatile ClassUtil mInstance;private ClassUtil() {}public static ClassUtil getInstance() {if (mInstance == null) {synchronized (ClassUtil.class) {if (mInstance == null) {mInstance = new ClassUtil();}}}return mInstance;}private Class livePlayClass = LivePlayActivity.class;public void setLivePlayClass(Class livePlayClass) {this.livePlayClass = livePlayClass;}public Class<Activity> getLivePlayClass() {return livePlayClass;}
}
这样在跳转的时候就可以这样
就实现了跳转到DangbeiLivePlayerActivity而不是宿主工程的原LivePlayActivity
结语
欢迎留言,欢迎交流
Android 不同渠道差异代码相关推荐
- android 渠道方案,Android 不同渠道差异代码
前言 在开发过程中,会遇到这种业务. 在某一个渠道,需要引入一些三方sdk,需要写一些差异性代码,跟原来的业务有重叠.如果所有的判断逻辑都写在一起,会出现很多if(flavor==xxx),并且三方s ...
- android多渠道 依赖,android 不同渠道 添加不同依赖jar 使用不同代码
android由于不同的渠道用到的依赖不同,比如个推sdk分谷歌市场版和国内版,要在同一个项目中根据渠道来分别加载两个sdk. 1.将两个jar包凡在src目录下的lib文件夹中,并且在gradle文 ...
- 【产品笔记】产品工作中Android和iOS差异
移动互联网时代,移动端产品的规划设计是大多数产品经理的必修课.广义来说,移动端产品主要包含iOS端App.Android端App.微信端H5.小程序.WAP版H5以及平板端App(HD版),本文主要就 ...
- android ble mesh,Android 蓝牙Mesh组网代码详解
文章目录前言Mesh组网基本理解扫描设备组网meshAddress添加与重连UUID连接登录修改信息控制与接收设备数据总结 前言 上面的几篇文章都是在说Android网络编程方面的内容,我本来就有打算 ...
- Android Studio中的代码格式快捷方式
本文翻译自:Code formatting shortcut in Android Studio I have started developing with Android Studio . 我已经 ...
- 浅谈Android保护技术__代码混淆
浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...
- 【错误记录】Android Studio 的 Flutter 代码界面没有 Logcat 面板 ( 2021年08月28日最新解决方案 )
文章目录 前言 一. 报错信息 二. 解决方案 前言 在之前的博客 [错误记录]Android Studio 的 Flutter 代码界面没有 Logcat 面板 中 , 处理了该问题 , 不过时去年 ...
- 安卓如何运行python_如何在android上运行Python代码?
这个非常简单,Termux和QPython3这2个安卓APP就可以,都集成了Python解释器,可以直接编辑运行Python代码,下面我简单介绍一下: Termux 这是一个安卓高级终端APP,类似于 ...
- Android如何在java代码中设置margin
Android如何在java代码中设置margin,也就是组件与组件之间的间距. 代码中设置: LinearLayout.LayoutParams params = new LinearLayout. ...
最新文章
- 语音信号的短时语音能量
- 查看linux是几位的操作系统
- Linux启动/停止/重启Mysql数据库的方法
- Ubuntu 14.04 安装flash插件;安装Cairo-Dock; 美化为Mac
- python函数可变参数_python中函数的可变参数
- [Editor][001][vim]VIM的辅助工具们
- linux moxa 多串口卡_MOXA多串口卡C32030TCPU模块双RISC-based处理器架构大幅提升I/O数据传输的效能达到8口或以上...
- zend studio使用xdebug调试程序不能单步调试的解决方案
- 用编译安装搭建自己的http服务器
- 计算机中的逻辑与或非,与或非运算(与或非逻辑运算口诀)
- 软考之---软件设计师考试经验与笔记分享
- 项目经理的工作就是胡搅蛮缠满地打滚
- java程序员工资有多少?java程序员现状如何?
- python图片转文字
- mc通用计算机,《我的世界》里打造一台计算机有多难?复旦大神花一年终于实现!...
- Go学习笔记_环境搭建
- 4kw机柜无通道封闭CFD模拟分析及优化(上篇) -孙长青
- leetcode 1833 雪糕的最大数量
- 获取网页中所有的小客车摇号信息
- 基于微信小程序的师生答疑交流平台APP