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
时间: 2024-10-13 12:23:24

android 多渠道 shell 脚本的相关文章

下载Google官方/CM Android源代码自动重新开始的Shell脚本

国内由于某种原因,下载CM或Google官方的Android源代码总容易中断.总看着机器,一中断就重新执行repo sync还太麻烦,所以我特意编写了一段shell脚本(download.sh).通过获取shell最后返回的状态码来决定是否再次执行repo sync命令. #!/bin/bash echo "======start repo sync======" repo sync # 第一次下载android源代码 while [ $? != 0 ]; do echo "

可显示Android设备选择列表,并进入指定Android设备Console的Shell脚本

如果PC上连接多部Android设备(包括Android模拟器),在进入Console时还需要使用adb -s deviceid shell.比较麻烦,本文为此编写了一个Shell脚本文件(需要在Linux或OS X下才能使用,windows下需要用bat或cmd从新编写).      基本思路时先用adb devices命令扫描有多少Android设备连接到PC上,然后从返回值中截取设备名称,并显示一个菜单.最后用户可以选择菜单项前面的序号进入指定的Android设备.无需再输入devicei

Android程序中如何执行shell脚本

在做Android应用时,经常需要执行shell脚本,以快速实现某些功能: 在Android应用程序中执行shell脚本可以省去一大堆繁琐的代码,还可以避免不必要的错误: 比如:拷贝文件夹时,可以执行shell命令中的 cp 命令达到目的:而在代码中实现拷贝文件夹时,不仅需要编写一大堆繁琐的代码,还容易陷入递归死循环的错误中: 比如:获取文件系统的读写权限,只需要执行shell脚本中一句 mount -o rw,remount / 就能轻松搞定: 比如:删除文件夹下某一个文件.或者某一类文件.或

〖Android〗存在多个Android设备时,使用Shell脚本选择一个Android设备

Shell脚本: #!/bin/bash devices=( $(adb devices|grep device$|awk '{print $1}'|xargs echo) ) case ${#devices[@]} in 0 ) echo "can't found a android device!" ;; 1 ) serial=$devices ;; * ) select serial in ${devices[@]}; do break; done ;; esac if [[ -

Android以root起一个process[shell脚本的方法]

有时候我们写的app要用uid=0的方式启动一个process,framework层和app层是做不到的,只有通过写脚本,利用am来实现.下面是具体步骤: 1.创建一个包含Main()方法Java project 1.1.创建一个Java project 1.2.添加Main()方法 1.3.导出为jar包 1.4.将java 版本的jar变成android 版本的jar 首先,找到dx工具所在文件夹,如android-sdk/build-tools/20.0.0,并将该文件夹加入到环境变量PA

android手机执行shell脚本

注意: 1.手机必须root 2.shell脚本需要有执行权限 流程: 1.编写shell脚本 #!/system/bin/sh i=1 while [ $i -le 100 ] do let i++ sleep 2 input swipe 100 950 200 300 150 done 解释:每隔2秒滑屏一次,一共滑动100次(这个脚本比较简单,明白流程后可自行优化) 2.把shell脚本传到/data/目录(/system目录也可以) adb push  D:\test_apk\test.

[Android]Recovery调用外部Shell脚本,Shell脚本使用ui_print方法

busybox_bin=/sbin/busybox # 获取PIPE get_outfd(){ if $busybox_bin ls -l /proc/self/fd/21 | $busybox_bin grep -q 'pipe'; then echo 21 else local all_pipe_file=/tmp/all_pipe_file.txt $busybox_bin ls -l /proc/self/fd/ > $all_pipe_file $busybox_bin grep 'p

使用sh-x调试shell脚本

参考:http://blog.chinaunix.net/uid-20564848-id-73502.html 1. 通过sh -x 脚本名  #显示脚本执行过程2.脚本里set -x选项,轻松跟踪调试shell脚本 [以下字段转自:http://linux.chinaitlab.com/SHELL/727128_4.html]"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具."-x"选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示

Android多渠道批量打包

如若感觉排版不舒服,请移步Android多渠道批量打包 1.为什么要进行多渠道打包? 安卓应用商店(一个商店也叫做一个渠道,如豌豆荚,360手机助手,应用宝)众多,大大小小几百个,每当我们发新版本时,需要将Android客户端分发到各个应用市场,为了统计这些市场的效果(下载量.活跃数等),需要有一种方法来唯一标识它们,所以才有了多渠道打包. 2.如何统计各个渠道的下载量.活跃数? 现在有比较成熟的第三方应用帮我们实现统计功能(比如友盟),统计的本质就是收集用户信息传输到后台,后台生成报表,帮助我