Walle —— Android多渠道打包神器

栏目: 编程工具 · 发布时间: 6年前

内容简介:在项目的build.gradle文件中添加walle插件依赖按照以上配置,基本上这里就可以使用了,还有一个小问题,build的时候会出现这样的错误这是因为release变体的构建没有开启v2签名的原因,在build.gradle文件的android代码块中添加signingConfigs签名配置信息,然后在buildTypes中对应的变体中配置signingConfig。

在项目的build.gradle文件中添加walle插件依赖

dependencies {
        classpath 'com.meituan.android.walle:plugin:1.1.6'
    }

然后,在app的build.gradle文件中apply插件,同时添加一个用于读取渠道名的依赖库

    apply plugin: 'walle'
    
    dependencies {
        //walle
        implementation 'com.meituan.android.walle:library:1.1.6'
    }
复制代码

按照以上配置,基本上这里就可以使用了,还有一个小问题,build的时候会出现这样的错误

Plugin requires 'APK Signature Scheme v2 Enabled' for release.
复制代码

这是因为release变体的构建没有开启v2签名的原因,在build.gradle文件的android代码块中添加signingConfigs签名配置信息,然后在buildTypes中对应的变体中配置signingConfig。

v1SigningEnabled和v2SigningEnabled的代码会注视掉,是因为默认为true 同时signingConfigs还可以配置打包时签名的keystore相关信息

android{
        //...
        signingConfigs {
            debug {
                //...
            }
            release {
                //v1SigningEnabled true
                //v2SigningEnabled true
                keyAlias 'alias名字'
                keyPassword '对应alias密码'
                storeFile file('keystore的文件路径')
                storePassword 'keystore的密码'
            }
        }
        buildTypes {
            debug {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.debug
            }
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.release
            }
        }
    }
复制代码

配置walle

walle {
        // 指定渠道包的输出路径
        apkOutputFolder = new File("${project.rootDir}/output/channels/")
        // 定制渠道包的APK的文件名称
        apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk'
        // 渠道配置文件
        channelFile = new File("${project.getProjectDir()}/channel")
    }
复制代码

配置项具体解释:

apkOutputFolder:指定渠道包的输出路径, 默认值为new File("

Walle —— Android多渠道打包神器
Walle —— Android多渠道打包神器

{appName}-{channel}.apk' 可使用以下变量:

projectName - 项目名字
    appName - App模块名字
    packageName - applicationId (App包名packageName)
    buildType - buildType (release/debug等)
    channel - channel名称 (对应渠道打包中的渠道名字)
    versionName - versionName (显示用的版本号)
    versionCode - versionCode (内部版本号)
    buildTime - buildTime (编译构建日期时间)
    fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)
    flavorName - 编译构建 productFlavors 名
复制代码

channelFile:包含渠道配置信息的文件路径。

其中channelFile文件,每行是一个渠道名,支持使用#注释,具体的格式如下:

360
    #百度
    baidu
    develoer.huawei #华为
复制代码

获取渠道信息

在需要渠道等信息时可以通过下面代码进行获取

public class ChannelUtil {
        public static String getChannelName(Context context){
            if(context == null){
                return "";
            }
            return WalleChannelReader.getChannel(context,"");
        }
    }
复制代码

如何生成渠道包

生成渠道包的方式是和 assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在build/outputs/apk/,也可以通过walle代码块中的apkOutputFolder参数来指定输出目录,在AndroidStudio的终端中执行构建指令即可。具体指令:

生成渠道包 gradle clean assembleReleaseChannels

支持 productFlavors gradle clean assemblevariantNameChannels指令结合,渠道包的生成目录默认存放在build/outputs/apk/,也可以通过walle代码块中的apkOutputFolder参数来指定输出目录,在AndroidStudio的终端中执行构建指令即可。

Window环境可能需要使用gradlew才能执行

以上指令都是在walle配置好的基础上进行打包,也可以通过指令临时生成某个或某个渠道文件对应的渠道包

//单个渠道
    gradle clean assembleReleaseChannels -PchannelList=baidu
    //多个渠道
    gradle clean assembleReleaseChannels -PchannelList=baidu,360
    gradle clean assembleReleaseChannels -PchannelFile=/user/mrtrying/AS_WorkSpace/ReleaseExample/channel
复制代码

更多使用方式

官方文档还提到configFile的使用,configFile是包含渠道信息和额外信息的配置文件路径。配置文件采用json格式,支持为每个channel单独配置额外的写入信息。具体内容格式详见:渠道&额外信息配置文件示例。

walle {
        // 渠道&额外信息配置文件,与channelFile互斥
        configFile = new File("${project.getProjectDir()}/config.json")
    }
复制代码

此配置项与channelFile功能互斥,开发者在使用时选择其一即可,两者都存在时configFile优先执行。

extraInfo不要出现以channel为key的情况

可以通过如下方法获取对应key的信息:

public static String getExtraInfo(Context context,String key){
        if(context == null){
            return "";
        }
        ChannelInfo channelInfo= WalleChannelReader.getChannelInfo(context.getApplicationContext());
        if (channelInfo != null) {
            //如果要获取渠道
            //String channel = channelInfo.getChannel();
            Map<String, String> extraInfo = channelInfo.getExtraInfo();
            return extraInfo.get(key);
        }else {
            return "";
        }
        // 或者也可以直接根据key获取
        //return WalleChannelReader.get(context, key);
    }
复制代码

指令也还有其他的用法:

生成渠道包&写入额外信息:gradle clean assembleReleaseChannels -PchannelList=baidu -PextraInfo=buildtime:20161212,hash:xxxxxxx

使用临时configFile生成渠道包:gradlew clean assembleReleaseChannels -PconfigFile=/user/mrtrying/AS_WorkSpace/ReleaseExample/config.json

使用上述-P参数后,本次打包channelFile/configFile配置将会失效,其他配置仍然有效。-PchannelList,-PchannelFile,-PconfigFile三者不可同时使用。

注意: 上述的extraInfo以key:value形式提供,多个以,分隔。

命令行 工具 使用方式

可以使用命令行工具来支持各类自定义的需求,具体使用方式详见:Walle CLI 使用说明


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming PHP

Programming PHP

Rasmus Lerdorf、Kevin Tatroe、Peter MacIntyre / O'Reilly Media / 2006-5-5 / USD 39.99

Programming PHP, 2nd Edition, is the authoritative guide to PHP 5 and is filled with the unique knowledge of the creator of PHP (Rasmus Lerdorf) and other PHP experts. When it comes to creating websit......一起来看看 《Programming PHP》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器