Android 批量打包 基于Walle的多渠道快速打包自动脚本

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yin13753884368/article/details/78880232

Android 批量打包 基于Walle的多渠道快速打包自动脚本

Android Signature V2 Scheme签名下的新一代渠道包打包神器

github主页:https://github.com/Meituan-Dianping/walle

当然了,Walle并不是为了解决打包速度而产生的一个工具,美团研究walle的原因是因为在Android 7.0(Nougat)推出了新的应用签名方案>APK Signature Scheme v2后,之前快速生成渠道包的方式(美团>Android自动化之旅—生成渠道包)已经行不通了,具体可以看看Walle自己是怎么说的。

Walle的使用

android {
	//签名 引用位置
	signingConfigs {
        sankuai {
            storeFile file("keystore/123keyStore.jks")
            storePassword "123456"
            keyAlias "key"
            keyPassword "123456"
        }
    }
	
	
	//调用签名设置
	buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.sankuai
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.sankuai
        }
    }
	
	//个性化设置
	productFlavors {
        honry {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "honry"]
        }
    }
}

//配置 build.gradle
//在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:

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

//并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
apply plugin: 'walle'

dependencies {
	compile 'com.meituan.android.walle:library:1.1.5'
}

Walle信息配置

//在当前App的 build.gradle 中添加如下信息
walle {
    // 指定渠道包的输出路径
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定制渠道包的APK的文件名称
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
}

配置项具体解释:
apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'${appName}-${buildType}-${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:包含渠道配置信息的文件路径。 具体内容格式详见:渠道配置文件示例,支持使用#号添加注释。

channel文件

meituan # 美团
samsungapps #三星
hiapk
anzhi
xiaomi # 小米
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
wandou
# Google Play
# googleplay
# 百度
baidu
#
# 360
360cn
#
# 应用宝
myapp

用法示例:在Android Studio的Terminal命令行输入确保在同一个项目根目录下

生成渠道包 :gradlew clean assembleReleaseChannels
支持 productFlavors : gradlew clean assembleMeituanReleaseChannels


用AndroidStudio 打包

项目依赖成功后,双击项目Gradle projects—>项目名—>package—>assembleReleaseChannels


命令行输入打包

下载walle-cli-all.jar文件

执行命令:

命令一:(单个写入,如果未指定目录,生成的新Apk与[apk路径]同级目录)

java -jar walle-cli-all.jar put -cqiyu C:\Users\Administrator\Desktop\apksigner\qiyu_jiagu_zipalign_v2_sign_walla_channel_tools.apk

java -jar walle-cli-all.jar put -c[渠道名] [apk路径]

java -jar walle-cli-all.jar put -c[渠道名] [apk路径] [生成的apk路径(可选)]

 

命令二:(批量写入,如果未指定目录,生成的新apk与[apk路径]同级目录)

java -jar walle-cli-all.jar batch-f C:\Users\apksigner\channel C:\Users\apksigner\qiyu_tools.apk C:\Users\apksigner\apk

java -jar walle-cli-all.jar batch-f [渠道文件] [apk路径] [生成的新apk路径(可选)]

原始方法打包 在项目的gradle中定义flavorDimensions 增加多种维度

谷歌官方解说:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html?utm_source=android-studio#variant_aware

android{
	flavorDimensions "fruit","hais" //定义 Specifies two flavor dimensions.
	productFlavors{
        mh{
           dimension "fruit"
        }
        mhss{
           dimension "hais"
        }
    }
}

欢迎大家入群,一起来学习

猜你喜欢

转载自blog.csdn.net/yin13753884368/article/details/78880232