多渠道对于android来说是一个比较常见的概念,举几个常见的用法:
本文项目基于笔者自己写的demo,对其有兴趣的读者可以自行下载:
https://github.com/Double2hao/MultiChannelTest
如果要使用多渠道,仅需要在该项目的build.gradle文件中增加以下代码:
android {
flavorDimensions "version"
productFlavors {
oneTest {
}
twoTest {
}
threeTest {
}
}
}
然后可以在android studio左侧栏中的 Build Variants 中选择module的渠道,如下图:
通过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")) {
}
}
}
通过使用manifestPlaceholders,为不同的渠道设置不同的值。
productFlavors {
oneTest {
manifestPlaceholders = [test_app_name: "TestOneApp"]
}
twoTest {
manifestPlaceholders = [test_app_name: "TestTwoApp"]
}
threeTest {
manifestPlaceholders = [test_app_name: "TestThreeApp"]
}
}
Demo中为不同的渠道设置了不同的appName,代码如下:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${test_app_name}"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MultiChannelTest">
</application>
通过设置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"]
}
}
}
}
昨天刚学了html的一些内容,就迫不及待的想做个京东上面的搜索条,结果做是做出...
在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序...
一.前言 .NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区...
2 月 18 日消息 据外媒 Windowslatest 报道,在预览版本中发现的参考资料表明,...
文章目录 前言 本周最重要的五件事情 本周搞砸的四件事情 本周的四个启发 前言 ...
首先插件配备好了,写一个HTML测试一下 首先创建一个文件夹,创建一个HTML 文件...
第一课趣味二进制——修改植物大战僵尸数据 任务介绍 学习目标 知识需求 需求工...
JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚...
1.ajax跨域传递值是所需要的回传的类型为jsonp $.ajax({url: "http://.......",t...
IT之家2月18日消息外媒 Windows Latest 报道,微软正在与谷歌合作进行一项新的改...