欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

程序员文章站 2022-07-04 12:34:29
最近没更新博客了,公司里新手让我指导一下签名和多渠道打包,心血来潮,写篇新手指引博客创建签名文件和多渠道打包。1.签名文件的创建2.多渠道打包gradle代码配置3.使用美团的Walle进行多渠道打包1.签名文件的创建首先点击Android Studio的Build菜单下的Genreate Signed Bundle Or APK,如下所示:接着就会出现以下界面,选择Apk【1处】,然后点击next:接着出现以下界面:这个界面是用已存在的签名文件进行签名,并且输入签名文件密码,....

本篇文章将带你一起学习如何使用Android Studio进行多渠道打包,学习向导如下:

  • 1.签名文件的创建
  • 2.多渠道打包gradle代码配置
  • 3.使用美团的Walle进行多渠道打包

1.签名文件的创建

首先点击Android Studio的Build菜单下的Genreate Signed Bundle Or APK,如下所示:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

接着就会出现以下界面,选择Apk【1处】,然后点击next:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

接着出现以下界面:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

这个界面是用已存在的签名文件进行签名,并且输入签名文件密码,密钥名和密钥密码,我们现在是要创建新的签名文件,因此我们要点击Create new…

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

接着就会出现以下界面:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

填好以上信息之后点击下方的OK之后,新版本的Android Studio会出现以下弹框:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

只需要点击OK即可,这对签名文件的创建没有影响,接着会出现以下界面:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

点击Next之后,出现以下界面:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

注意一定要选中V1和V2,最好是将签名文件放在项目目录内,我放的地方是app下的jks文件夹内,因为避免弄丢,弄丢之后上传市场以及更新版本上传安装包时会特别麻烦,需要重新各种申请啥的。点击finish之后,Android Studio会帮你打一次包,build文件下会生成一个releas和debug包,这里我就不给截图了,到这里签名文件的创建就完成了。接下来我们就来学习一下如何使用gradle进行脚本配置,进行一次性的打包和多渠道打包。

关于V1和V2签名的作用:Android V1及V2签名原理简析

2.多渠道打包gradle代码配置

2.1 配置签名文件 & 非渠道打正式包

首先我们需要在打包的module中存放签名文件,这个路径很重要,笔者将签名文件创建在了app/jks文件下,如下图所示:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

然后在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菜单,如下所示

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

接着在弹出来的窗体中点击build下的assemble Task即可进行一键打包,打包完成后就可以在编译完成之后的build目录下看到release和debug包,这里我就不啰嗦了。

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

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个渠道,接下来就进行一键打包试试效果

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

如果出现以下错误:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

这是由于版本较新,需要在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个渠道包被一一打出来了,如下图所示:

【Android新手指引】Android Studio如何使用Gradle进行多渠道打包

到这里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

相关标签: android博客