【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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值