android shell打包

本文深入解析了使用Shell脚本自动化批量打包Android应用的过程,包括环境配置、解包、按渠道分类、参数替换以及最终的打包、签名和归档步骤。详细阐述了如何利用Shell命令高效地实现Android应用的快速部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android常见打包方式

  1. 原始的打包方式(eclipse或者android studio,打包时很容易让开发工具crash);
  2. python脚本打包(这个接触得少);
  3. ant脚本打包(我前面有篇文章介绍了http://blog.youkuaiyun.com/a394268045/article/details/50838478);
  4. shell脚本打包(本帖重点说这个~)。

shell打包环境配置

如果是在windows上的话,需要有shell环境(自行百度),本人是在mac上进行开发打包的,自支持shell命令,另外需要android环境(apktool和zipalign),这个不讲太多,如果环境有问题的话,请留言~

shell批量打包流程

定义全局常量

全局常量通常是定义的一些路径啥的,举例如下:

RESOURCE_PATH='/Users/luoxiaohui/Desktop/zhenwei_pack/Resource_test'
APKOUTPUT_DIR='/Users/luoxiaohui/Desktop/zhenwei_pack/apk'

左边一般是大写,然后下划线隔开,右边路径用单引号引起来~

解包

apktool d test.apk

按渠道将解开的包放到不同目录

echo "ready to create temp dir"
TARGETOUTPUT_PATH=temp/$channel
mkdir -p $TARGETOUTPUT_PATH
cp -rf target/ $TARGETOUTPUT_PATH
echo "create temp dir completely"

正则表达式抠出参数

#正则表达式抠出所需参数
FILE_LINE=`cat channel_test.txt|grep ${channel}`
A_=`echo $FILE_LINE|awk -F "@" '{ print $1 }'`
B_=`echo $FILE_LINE|awk -F "@" '{ print $2 }'`
C_=`echo $FILE_LINE|awk -F "@" '{ print $3 }'`

echo "parameterA—->"$A_
echo "parameterB——>”$B_
echo "parameterC——>"$C_

替换渠道所需参数及资源文件

#替换smali中存放R文件的目录
echo "ready to replace replace R file"
ORIGINAL_R=$TARGETOUTPUT_PATH/smali/…
TARGETOUTPUT_R=$TARGETOUTPUT_PATH/smali/…/$channel
cp -rf $ORIGINAL_R $TARGETOUTPUT_R
rm -rf $ORIGINAL_R
echo "replace R file completely"

#替换channel_test.txt中渠道所需参数
#在某个small中更改参数
sed -e “s/特殊字符穿/${A_}/g” $TARGETOUTPUT_PATH/smali/…/abc.smali > ./tmp.txt
mv tmp.txt $TARGETOUTPUT_PATH/smali/…/abc.smali
#在string.xml中替换appname
sed -e “s/app名/${$B_}/g” $TARGETOUTPUT_PATH/res/values/strings.xml > ./tmp.txt
mv tmp.txt $TARGETOUTPUT_PATH/res/values/strings.xml 
#在manifest中替换baidu_key
sed -e "s/baidu_key/${$C_}/g” $TARGETOUTPUT_PATH/AndroidManifest.xml > ./tmp.txt
mv tmp.txt $TARGETOUTPUT_PATH/AndroidManifest.xml
echo "replace channel.txt completely"

打包

apktool b $TARGETOUTPUT_PATH

签名

DIST_DIR=$TARGETOUTPUT_PATH/dist
jarsigner --verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your.keystore -storepass 密码 $DIST_DIR/target.apk 别名
zipalign -v 4 $DIST_DIR/target.apk $DIST_DIR/$A_.apk
mv $TARGETOUTPUT_PATH/dist/$A_.apk $APKOUTPUT_DIR/$A_.apk

遇到的问题及思路

1. 对于shell脚本不是很熟练;

写脚本前,将项目打包需求先列出来,然后一个个对号入座,遇到不懂的shell语句,直接百度谷歌,但不要去了解它的所有,能为我们所用就行了~

2. mac中sed替换的特殊用法

刚开始我用的sed -i去替换,但是会提示路径不对,其实路径是对的,然后用的sed -e,但是它需要先放到临时文件,中转一下

3. 替换smali文件注意

我替换某个smali的文件的某个带final的静态常量,发现没替换过来,打包签名成功后,再解包去看,这个常量确实替换了,但就是没生效,我就纳闷了,后面将final字段渠道,就OK了~

最后,shell脚本下载地址:
http://download.youkuaiyun.com/detail/a394268045/9481031

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值