您的位置:首页 > 运维架构 > Shell

android shell打包

2016-04-04 20:47 495 查看

android常见打包方式

原始的打包方式(eclipse或者android studio,打包时很容易让开发工具crash);

python脚本打包(这个接触得少);

ant脚本打包(我前面有篇文章介绍了/article/8922643.html);

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.csdn.net/detail/a394268045/9481031
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: