android shell打包
16lz
2021-01-23
android常见打包方式
- 原始的打包方式(eclipse或者android studio,打包时很容易让开发工具crash);
- python脚本打包(这个接触得少);
- ant脚本打包(我前面有篇文章介绍了http://blog.csdn.net/a394268045/article/details/50838478);
- 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/$channelmkdir -p $TARGETOUTPUT_PATHcp -rf target/ $TARGETOUTPUT_PATHecho "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/…/$channelcp -rf $ORIGINAL_R $TARGETOUTPUT_Rrm -rf $ORIGINAL_Recho "replace R file completely"#替换channel_test.txt中渠道所需参数#在某个small中更改参数sed -e “s/特殊字符穿/${A_}/g” $TARGETOUTPUT_PATH/smali/…/abc.smali > ./tmp.txtmv tmp.txt $TARGETOUTPUT_PATH/smali/…/abc.smali#在string.xml中替换appnamesed -e “s/app名/${$B_}/g” $TARGETOUTPUT_PATH/res/values/strings.xml > ./tmp.txtmv tmp.txt $TARGETOUTPUT_PATH/res/values/strings.xml #在manifest中替换baidu_keysed -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/distjarsigner --verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your.keystore -storepass 密码 $DIST_DIR/target.apk 别名zipalign -v 4 $DIST_DIR/target.apk $DIST_DIR/$A_.apkmv $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
更多相关文章
- Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方
- Android利用系统提供的函数或常量判断版本大小
- android中Activity传递参数之onActivityResult
- python获取android设备的GPS信息脚本分享
- java代码控制layout_Margin参数