android 多渠道 shell 脚本

Posted 章炎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 多渠道 shell 脚本相关的知识,希望对你有一定的参考价值。

背景

多渠道打包这个本没啥难度,但是按照官方的做法一般都要重新编译 apk, 当 apk 很大的时候,会非常耗时,美团已经提供了一种解决思路,请点击这里查看美图的思路, 之前有个群里的同学想让我将这里面的 python 代码写成 shell,  好久没写 shell 也想增加点熟练度,所以便欣然同意了。

功能

将工作目录下指定的 apk 文件夹中的 apk 进行复制,然后在新的 apk 的 meta-info 目录下创建一个空的文件,这个文件以 channel.txt 中指定的渠道命名

代码

# !/usr/bin/bash
model=$1
channel_file=$2
# 空文件 便于写入此空文件到apk包中作为channel文件
src_empty_file=czt.txt
# 创建一个空文件(不存在则创建)
if [ -e $src_empty_file ]; then
    rm -i $src_empty_file
fi

touch $src_empty_file

if [ ! $? -eq 0 ]; then
   exit 1;
fi

# 获取当前目录中所有的apk源包
src_apks=()
if [ "$model" = "" ];then
  file_path="."
else   file_path
="./$model"
fi
for file in $(cd $file_path | ls); do if [ -f $file ];then basename $file | grep \.apk$ && src_apks=("${src_apks[@]}" "$file") fi done # 获取渠道列表 if [ "$channel_file" = "" ];then channel_file=channel.txt fi f=$(cat $channel_file) function copy(){ if [ ! -e $1 ];then return 1 fi cp $1 $2 } for src_apk in ${src_apks[@]};do # file name (with extension) src_apk_file_name=$(basename $src_apk) # 分割文件名与后缀 src_apk_name=${src_apk_file_name%.apk} # 后缀名,包含. 例如: ".apk " src_apk_extension=${src_apk_file_name##*.} # 创建生成目录,与文件名相关 output_dir=output-${src_apk_name}/ if [ -e $output_dir ]; then rm -r $output_dir fi mkdir -p $output_dir # 遍历渠道号并创建对应渠道号的apk文件 for line in $f;do target_channel=$line target_apk=${output_dir}${src_apk_name}-${target_channel}${src_apk_extension} echo "${output_dir}=======>${src_apk_name}=======>, ${target_channel} =======>, ${src_apk_extension} =======>" # 拷贝建立新apk cp $src_apk $target_apk # 初始化渠道信息 empty_channel_file="META-INF/cztchannel_${target_channel}" # 写入渠道信息 if [ ! -e $(dirname $empty_channel_file) ]; then mkdir -p $(dirname $empty_channel_file) fi touch $empty_channel_file jar -uvf $target_apk -C . $empty_channel_file done done

 

以上是关于android 多渠道 shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本 片段

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

gradle打包android (实现外部导入签名文件多渠道打包导入ant脚本)

常用python日期日志获取内容循环的代码片段

Android程序中如何执行shell脚本

Android 多渠道打包方式详解