【Android新手指引】Android Studio如何使用Gradle进行多渠道打包
本篇文章将带你一起学习如何使用Android Studio进行多渠道打包,学习向导如下:
- 1.签名文件的创建
- 2.多渠道打包gradle代码配置
- 3.使用美团的Walle进行多渠道打包
1.签名文件的创建
首先点击Android Studio的Build菜单下的Genreate Signed Bundle Or APK,如下所示:
接着就会出现以下界面,选择Apk【1处】,然后点击next:
接着出现以下界面:
这个界面是用已存在的签名文件进行签名,并且输入签名文件密码,密钥名和密钥密码,我们现在是要创建新的签名文件,因此我们要点击Create new…
接着就会出现以下界面:
填好以上信息之后点击下方的OK之后,新版本的Android Studio会出现以下弹框:
只需要点击OK即可,这对签名文件的创建没有影响,接着会出现以下界面:
点击Next之后,出现以下界面:
注意一定要选中V1和V2,最好是将签名文件放在项目目录内,我放的地方是app下的jks文件夹内,因为避免弄丢,弄丢之后上传市场以及更新版本上传安装包时会特别麻烦,需要重新各种申请啥的。点击finish之后,Android Studio会帮你打一次包,build文件下会生成一个releas和debug包,这里我就不给截图了,到这里签名文件的创建就完成了。接下来我们就来学习一下如何使用gradle进行脚本配置,进行一次性的打包和多渠道打包。
关于V1和V2签名的作用:Android V1及V2签名原理简析
2.多渠道打包gradle代码配置
2.1 配置签名文件 & 非渠道打正式包
首先我们需要在打包的module中存放签名文件,这个路径很重要,笔者将签名文件创建在了app/jks文件下,如下图所示:
然后在app下的build.gradle中添加以下代码:
//配置签名信息
signingConfigs{
release{
keyAlias 'test'
keyPassword '123456'
storeFile file('jks/test.jks')
storePassword '123456'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//应用签名配置
signingConfig signingConfigs.release
}
}
然后你就可以进行一键打包了,点击右侧Gradle菜单,如下所示
接着在弹出来的窗体中点击build下的assemble Task即可进行一键打包,打包完成后就可以在编译完成之后的build目录下看到release和debug包,这里我就不啰嗦了。
2.2 使用gradle配置多渠道打包
接下来我们来看看如何配置多渠道,首先在app下的AndroidManifest.xml配置以下代码添加一个渠道的变量:
<!--多渠道打包配置渠道的变量-->
<meta-data
android:name="APP_CHANNEL"
android:value="${APP_CHANNEL_VALUE}"
/>
然后在app下的build.gradle下配置以下代码:
//渠道配置
productFlavors{
xiaomi{
manifestPlaceholders = [APP_CHANNEL_VALUE:"xiaomi"]
}
baidu{
manifestPlaceholders = [APP_CHANNEL_VALUE:"baidu"]
}
google{
manifestPlaceholders = [APP_CHANNEL_VALUE:"google"]
}
pp{
manifestPlaceholders = [APP_CHANNEL_VALUE:"pp"]
}
}
笔者添加了xiaomi,baidu,google,pp等4个渠道,接下来就进行一键打包试试效果
如果出现以下错误:
这是由于版本较新,需要在app下build.gradle添加一个配置代码,代码如下所示:
android {
compileSdkVersion 29
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.android_study"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
//添加下面这行代码
flavorDimensions "default"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
......
}
添加完成之后再次进行打包,就可以发现等一会儿,4个渠道包被一一打出来了,如下图所示:
到这里gradle配置多渠道打包已经完成,那么现在还存在一个问题,那就是如何获取当前的渠道呢?代码如下所示:
Kotlin代码:
fun getChannelName(ctx: Activity?): String? {
if (ctx == null) {
return null
}
var channelName: String? = ""
try {
val packageManager = ctx.packageManager
if (packageManager != null) {
//注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
val applicationInfo =
packageManager.getApplicationInfo(ctx.packageName, PackageManager.GET_META_DATA)
if (applicationInfo.metaData != null) {
channelName = applicationInfo.metaData.getString("你的渠道变量名")
}
}
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return channelName
}
Java代码:
//获取渠道名称
public static String getChannelName(Activity ctx) {
if (ctx == null) {
return null;
}
String channelName = "";
try {
PackageManager packageManager = ctx.getPackageManager();
if (packageManager != null) {
//注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
channelName = applicationInfo.metaData.getString("你的渠道变量名");
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelName;
}
查看完整代码请点击此处
3.使用美团的Walle进行多渠道打包
美团的Walle打包可谓是神器,笔者公司也是在一直使用,相比于自己去手动配置gradle进行多渠道打包,Walle不仅仅是方便,而且还有很多特色的功能,笔者这里也就不啰嗦了,直接上官方博客吧:新一代开源Android渠道包生成工具Walle
本文地址:https://blog.csdn.net/ClAndEllen/article/details/110521687
下一篇: React学习笔记——组件