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"//可为不同版本动态指定包名 } } (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |