加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Gradle 多渠道打包

发布时间:2023-05-18 13:10:37 所属栏目:教程 来源:
导读:我们在日常开发中多多少少都会遇到多渠道打包的情况。这些版本可能会上传到不同的应用市场,也可能是是线下多渠道推荐。有时候可能不同的渠道使用的资源图片都不一样。古老的做法就是,需要打多少个渠道包拉出多少份
我们在日常开发中多多少少都会遇到多渠道打包的情况。这些版本可能会上传到不同的应用市场,也可能是是线下多渠道推荐。有时候可能不同的渠道使用的资源图片都不一样。古老的做法就是,需要打多少个渠道包拉出多少份代码分支,分别替换对应的资源文件和包名配置信息等。这种做法非常的耗时耗力。Gradle 可以帮我们用一份代码通过配置实现打出所有的渠道包。

创建多渠道资源文件目录

首先,我们新创建一个工程,然后在 main 模块下面,根据不同渠道创建不同的资源文件目录。我们先定义一个简单的页面,里面显示渠道跟一张图片。layout 布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="26sp"
        android:textColor="@color/colorPrimary"
        android:text="@string/chanl_name" />
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@mipmap/girl"
        >
    </ImageView>
</LinearLayout>

然后我们根据我们用到的资源,对不同渠道配置不同的资源。我们这里 model 比较简单,主要是图片和字符串,图片这里我们不同渠道显示的不同。具体目录如下所示:

Tips: 注意这里我们创建资源文件目录的时候不能包含 test ,否则会编译报错的。我亲自尝试过 res-test。

配置多渠道资源路径

前面我们创建了多渠道的资源目录,那么我们就需要将它配置在 build.gradle 中。我们前面介绍 AS 中 Android 项目的 Gradle 配置时讲到过,我们在 SourceSet 闭包配置。具体多渠道配置如下:

    //配置资源文件路径,可动态指定不同版本资源文件
    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            resources.srcDirs = ['src/main/resources']
            aidl.srcDirs = ['src/main/aidl']
            renderscript.srcDirs = ['src/maom']
            res.srcDirs = ['src/main/res']
            assets.srcDirs = ['src/main/assets']
            jniLibs.srcDir 'src/main/jniLibs'
        }
        //用各自对应的资源文件路径
        chanlA.res.srcDirs = ['src/main/res-a']
        chanlB.res.srcDirs = ['src/main/res-b']
        androidTest.setRoot('tests')
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

配置渠道及不同渠道包名等

配置多渠道在 Gradle 中使用 productFlavors 闭包,在这个闭包中我们可以配置所有的渠道,以渠道名为闭包,每个渠道可以配置 applicationId 和签名信息等。我们这里简单配置了applicationId。如下:

    /*
    * 渠道Flavors,配置不同Chanl的app
    * 资源文件不能用test字段命令(会运行报错的,如res-test)
    * */
    productFlavors {
        chanlA{
            applicationId "com.bthvi.chanla"//可为不同版本动态指定包名
        }
        chanlB{
            applicationId "com.bthvi.chanlb"//可为不同版本动态指定包名
        }
    }

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章