当前位置:主页 > 查看内容

android gradle 多渠道打包小结

发布时间:2021-06-10 00:00| 位朋友查看

简介:概述 多渠道对于android来说是一个比较常见的概念举几个常见的用法 根据不同的渠道使用不同的资源 根据不同的渠道使用不同的依赖 根据不同的渠道作不同的数据统计 根据不同的渠道,游戏app中对应不同的服务区 github地址 本文项目基于笔者自己写的demo对其有……

概述

多渠道对于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,代码如下:

  <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"]
      }
    }
  }
}
;原文链接:https://blog.csdn.net/Double2hao/article/details/115531299
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐