Android Gradle 多渠道打包、动态配置AppName

目录

  • 一、简介
  • 二、Gradle多渠道打包
    • 1、普通做法
    • 2、Gradle多渠道打包

一、简介

因为国内Android应用分发市场的现状,我们在发布APP时,一般需要生成多个渠道包,上传到不同的应用市场。这些渠道包需要包含不同的渠道信息,在APP和后台交互或者数据上报时,会带上各自的渠道信息。这样,我们就能统计到每个分发市场的下载数、用户数等关键数据。

二、Gradle多渠道打包

1、普通做法

通常情况下的做法是在 AndroidManifest 中增加渠道号:

<meta-data android:name="SDK_CHANNEL" android:value="Channel ID" />

如需更改则手动设置,然后再次打包。如此一来,重复的工作量大大增加。于是就有了AndroidStudio上的多渠道打包。

2、Gradle多渠道打包

对于这种情况,Android Gradle提供了非常便捷的方法让我们来替换AndroidManifest文件中的内容,他就是 manifestPlaceholderManifest 占位符。

ManifestPlaceholdersProductFlavor 的一个属性,是一个Map类型,所以我们可以同时配置很多个占位符。下面我们就通过这个配置渠道号的例子来演示manifestPlaceholders的用法。

build.gradle 中的 android 标签内增加如下代码:

android {...productFlavors{google{manifestPlaceholders = [SDKChannel: "google",app_name : "@string/app_name",]}baidu{manifestPlaceholders = [SDKChannel: "baidu",app_name : "@string/app_name",]}}
}

AndroidManifest.xml 文件中代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.sdk"><application ...android:label="${app_name}"><meta-dataandroid:name="SDKChannel"android:value="${SDKChannel}" />...</application>
</manifest>

接下来我们就来看看打包效果了。
在这里插入图片描述在这里插入图片描述
如果,一个App的渠道号很多的话,我们总不能一个个配置吧,太多也太累,维护也麻烦,我们还可以通过迭代productFlavors批量的方式进行修改。

android {...productFlavors{google{}baidu{}}productFlavors.all { flavor ->flavor.manifestPlaceholders = [SDKChannel: name, app_name : "@string/app_name"]}
}

我们通过all函数遍历每一个ProductFlavor,然后把它们的name作为渠道名,非常方便。这里不止可以做这一个事情,在遍历ProductFlavor的时候,你可以做很多你想做的事情,这就是Gradle的灵活之处,把脚本当程序写。

Android Gradle提供的manifestPlaceholders占位符的应用方式,让我们可以替换AndroidManifest文件中任何${Var}格式的占位符。所以他的使用场景不限于渠道名这一个,比如还有ContentProvider的auth的授权,或者其他动态配置meta信息等。灵活运用它能帮助我们做很多事情,让我们的构建更灵活,更方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Gradle 批量修改生成的apk文件名

目录一、简介二、代码实现1、 Gradle 3.0以下版本2、Gradle 3.0以上版本一、简介 平时开发都知道&#xff0c;我们要上线的时候需要在Android studio打包apk文件&#xff0c;可是默认的打包名是app-release.apk或者app-debug.apk这样的名字&#xff0c;太没有辨识度了。 下面…

Android Studio 代理设置以及代理完全清除

目录一、代理设置二、代理完全清除一、代理设置 首先我们来看下怎样设置代理&#xff0c;Mac下打开【Preferences…】&#xff0c;然后搜索"HTTP"&#xff0c;选择【HTTP Proxy】&#xff0c;按图中设置配置好后&#xff0c;点击【Apply】&#xff0c;然后在点击【O…

安卓布局位置,dp与px的区别

手机6寸—指对角线 布局位置 横轴—x轴 纵轴—y轴 一个像素点 dp与Px dp:设备无关像素,与像素密度相关,像素距离 dpi:像素密度,每英寸包含的像素数 px:屏幕上一个物理像素点 ldpi低密度 1dp0.75px mdpi中密度 1dp1px hdpi高密度 1dp1.5px xhdpi超高密度 1dp2px xxhdpi超…

Android程序结构

Project方式 .gradle文件夹:编译相关生成 .idea文件夹:idea生成 app文件夹----应用程序的源代码和资源 build----编译后的文件存放的位置,最终apk文件存放的位置 libs:存放.jar和.so文件 src:AndroidTest与test存放测试相关的内容 main中Java文件夹存放Java源码,res文件…

通过Github创建Android库供其他项目依赖引用

目录一、简介二、实现第一步&#xff1a;将自己的项目托管到Github上。第二步&#xff1a;点击releases。第三步&#xff1a;创建release。第四步&#xff1a;填写版本号、名称、描述信息。第五步&#xff1a;点击【Publish release】。第六步&#xff1a;复制项目路径。第七步…

使用boost模板函数实现读写锁

介绍 shared_mutex即读写锁&#xff0c;不同与我们常用的独占式锁mutex&#xff0c;shared_mutex是共享与独占共存的锁&#xff0c;实现了读写锁的机制&#xff0c;即多个读线程一个写线程&#xff0c;通常用于对于一个共享区域的读操作比较频繁&#xff0c;而写操作比较少的情…

安卓内边距padding与外边距magrin

内边距padding与外边距margin 内边距只有容器才有,即里面要有视图 具体示例

Android Studio发布项目到jcenter

目录一、创建Bintray账户及Maven仓库二、上传项目到jcenter1、配置Android项目2、Gradle命令上传3、在项目中引用4、Add to JCenter三、Demo示例一、创建Bintray账户及Maven仓库 1、打开Bintray首页&#xff0c;点击 For an Open Source Account &#xff0c;快速注册或者用第…

Android MotionEvent中getX()、getRawX()和getTop()的区别

为了展示getX()、getRawX()和getTop()方法的区别&#xff0c;我们写了一个简单的测试Demo&#xff0c;我们写了一个自定义控件&#xff08;继承ImageView&#xff09;。 package com.demo.ui;import android.content.Context; import android.support.annotation.Nullable; im…

毛概 第二章新民主主义革命理论

1.新民主主义革命的总路线 2.

解决undefined reference to symbol ‘sem_close@@GLIBC_2.2.5‘问题

错误图示 问题原因 编译的时候&#xff0c;没有引入库文件 sem()位于pthread库中&#xff0c;所以在编译和链接时请确保使用-pthread标志&#xff0c;因此在编译的时候需要导入pthread库文件编译的顺序出现问题 解决办法 在clion的CMakeLists.txt文件中添加这一行代码set(CM…

C++运算符与类型转换

除法/ 参与运算时,结果符号按照(为,–为,-或为-),两个都是整型结果直接去除小数部分 -3/1-1 -3/-13 3/-13 除法 一律向0取整&#xff08;即直接切除小数部分&#xff09;。 取余% 参与运算为整型,结果符号和第一个相同(当结果不为0时) /* 21%63 -21%6-3 -21%-6-3 参与取余的运…

安卓常用布局学习

线性布局 布局方向 水平 android:orientation“horizontal” 垂直android:orientation“vertical” gravity对齐方式–center 布局权重:视图中剩余部分的面积所占比例 android:layout_weight“1”(数字) 水平布局:android:layout_width“0dp” 垂直布局:android:layout_heigh…

Android Canvas绘制带箭头的直线

先看下效果图&#xff1a; 下面我们直接看代码 我自定义了一个View&#xff0c;代码如下&#xff1a; package com.davis.drawtrangle;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; imp…

C++的输入与输出

输入与输出 输入:从外部输入设备(键盘)向计算机输入数据 输出:从计算机向外部输出设备(显示屏)输出数据 C使用流对象实现 使用流对象cin与cout,将标准输入输出流库的头文件iostream包含到源文件 #include<iostream>//标准输入输出库 using namespace std;//使用标准命…

Android 动态计算ListView的高度

目录一、简介二、效果图三、代码实现一、简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度&#xff0c;比如说&#xff0c;ScrollView中嵌套ListView的时候&#xff0c;我们就需要手动精确计算ListView的高度了。 如果ListView的Item高度是固定的话还好计算…

linux使用共享内存进行进程通信

一、什么是共享内存 共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。使用共享内存进行通信的进程都需要同一段共享内存连接到它们自己的地址空间…

安卓TextView文本框与自定义边框

常用属性 自定义边框 基本使用 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"rectangle矩形/ring圆环/oval椭圆/line直线"当为圆环时android:s…

Android RecyclerView实现九宫格效果

RecyclerView更加优化的复用机制和方便实现UI效果&#xff0c;几乎替代Listview和GridView的使用。但是分割线的实现&#xff0c;需要自己继承ItemDecoration来绘制。 完整代码已上传至Github&#xff1a;RecyclerView实现九宫格效果 效果图 item的布局文件 <?xml versi…