为了账号安全,请及时绑定邮箱和手机立即绑定

android gradle 多渠道打包小结

标签:
Android

概述

多渠道对于android来说是一个比较常见的概念,举几个常见的用法:

  1. 根据不同的渠道使用不同的资源
  2. 根据不同的渠道使用不同的依赖
  3. 根据不同的渠道作不同的数据统计
  4. 根据不同的渠道,游戏app中对应不同的服务区

github地址

本文项目基于笔者自己写的demo,对其有兴趣的读者可以自行下载:
https://github.com/Double2hao/MultiChannelTest

android studio的多渠道

如果要使用多渠道,仅需要在该项目的build.gradle文件中增加以下代码:

android {
  flavorDimensions "version"
  productFlavors {
    oneTest {
    }
    twoTest {
    }
    threeTest {
    }
  }
}

然后可以在android studio左侧栏中的 Build Variants 中选择module的渠道,如下图:
图片描述

buildConfig区分不同的渠道

通过buildConfigField可以在BuildConfig中设置不同的参数,然后在代码中可以通过BuildConfig的参数来区分不同的渠道。

 productFlavors {
    oneTest {
      buildConfigField("String", "TEST_CHANNEL", "\"one\"")
    }
    twoTest {
      buildConfigField("String", "TEST_CHANNEL", "\"two\"")
    }
    threeTest {
      buildConfigField("String", "TEST_CHANNEL", "\"three\"")
    }
  }

Demo中BuildConfig的代码如下:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.example.multichanneltest";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "threeTest";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
  // Field from product flavor: threeTest
  public static final String TEST_CHANNEL = "three";
}

Demo中BuildConfig的使用代码如下:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//根据不同的渠道参数来作不同的逻辑
if (TextUtils.equals(BuildConfig.TEST_CHANNEL, "one")) {

} else if (TextUtils.equals(BuildConfig.TEST_CHANNEL, "two")) {

} else if (TextUtils.equals(BuildConfig.TEST_CHANNEL, "three")) {

}

}
}

manifest区分不同的渠道
通过使用manifestPlaceholders,为不同的渠道设置不同的值。

productFlavors {
oneTest {
manifestPlaceholders = [test_app_name: “TestOneApp”]
}
twoTest {
manifestPlaceholders = [test_app_name: “TestTwoApp”]
}
threeTest {
manifestPlaceholders = [test_app_name: “TestThreeApp”]
}
}

Demo中为不同的渠道设置了不同的appName,代码如下:


设置不同渠道的资源
通过设置sourceSets,可以为不同的渠道设置不同的资源。
如下,Demo中的代码,在不同的渠道下,使用不同的java资源。
如果在oneTest的渠道下,"src/main/twoTest"与"src/main/threeTest"目录下的文件不会参与编译。

android {
  sourceSets {
    oneTest {
      java {
        srcDirs = ["src/main/java", "src/main/oneTest"]
      }
    }
    twoTest {
      java {
        srcDirs = ["src/main/java", "src/main/twoTest"]
      }
    }
    threeTest {
      java {
        srcDirs = ["src/main/java", "src/main/threeTest"]
      }
    }
  }
}

————————————————

版权声明:本文为CSDN博主「许佳佳233」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Double2hao/article/details/115531299

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消