Android 不同渠道差异代码

前言

在开发过程中,会遇到这种业务。
在某一个渠道,需要引入一些三方sdk,需要写一些差异性代码,跟原来的业务有重叠。如果所有的判断逻辑都写在一起,会出现很多if(flavor==xxx),并且三方sdk的包也会都在app里产生增量,直接导致apk过大。

解决方案

话不多说,直接上解决方案:

1、src文件下面分渠道来写代码
2、build.gradle下使用 flavorImplemention 来引入渠道对应的三方库文件

详细案例请往下看

案例:在当贝渠道添加当贝sdk广告库

工程结构

build.gradle

***’dangbeilibs‘***可以单独用于存放dangbeiSDK的库文件

!下面是重要图解

重要图解

1、一般初始化sdk都需要在Application里面初始化。

DangbeiApp继承App

2、然后加载广告在DangbeiMainActivity里面加载。

DangbeiMainActivity继承MainActivity

3、清单文件也需要配置一下。

注意:红色框里面的代码。如果入口activity的category是launcher,那么多个activity就会出现多个桌面应用图标,这里这样写可以只有一个图标
具体的缘由可搜索:“Android清单文件替换优先级相关”

  <activity
            android: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的只有一个
 <activity
            android: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进行配置

配置dagger的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;
    }
}

设置class

这样在跳转的时候就可以这样

就实现了跳转到DangbeiLivePlayerActivity而不是宿主工程的原LivePlayActivity

结语

欢迎留言,欢迎交流

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的实现方式: 1. 首先,在布局文件中添加多个ImageView控件,并为它们分别设置一个唯一的ID,例如: ``` <ImageView android:id="@+id/image1" android:src="@drawable/image1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/image2" android:src="@drawable/image2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/image3" android:src="@drawable/image3" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` 2. 在Java代码中,为每个ImageView控件设置点击事件,并在事件处理函数中显示不同的对话框,例如: ``` ImageView image1 = findViewById(R.id.image1); ImageView image2 = findViewById(R.id.image2); ImageView image3 = findViewById(R.id.image3); image1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Image 1 Dialog") .setMessage("This is the dialog for Image 1.") .setPositiveButton("OK", null) .show(); } }); image2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Image 2 Dialog") .setMessage("This is the dialog for Image 2.") .setPositiveButton("OK", null) .show(); } }); image3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Image 3 Dialog") .setMessage("This is the dialog for Image 3.") .setPositiveButton("OK", null) .show(); } }); ``` 在这个示例中,我们为每个ImageView控件设置了一个点击事件,在事件处理函数中创建一个AlertDialog,并为其设置标题和内容。点击“OK”按钮将关闭对话框。 注意,在上面的代码中,我们使用了MainActivity.this作为AlertDialog.Builder的上下文,这是因为我们在MainActivity类中编写了这段代码。如果你在其他类中编写这段代码,你应该使用相应的上下文。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值