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
相关文章推荐
- 小黑的日常折腾-复制外部命令的可执行文件和依赖库文件到指定目录下的对应目录
- 将PHP作为Shell脚本语言使用
- Shell Script介绍及变量使用
- -bash: rz: command not found
- shell 中的for、while循环及if语句
- 慕课linux学习笔记(二)Xshell与虚拟机的连接
- shell 与 /etc/shells 功能
- Linux Shell 学习笔记3:环境变量的操作及相关命令
- shell 常用命令语法简介
- 输入adb shell 时 提示error: more than one device and emulator
- 输入adb shell 时 提示error: more than one device and emulator
- 深度学习整体认识Deep Learning in a Nutshell
- Shell练习 验证号码
- 利用git bash丰富windows 命令行
- Linux Shell 常用命令总结(持续更新)
- 自动生成C、C++、shell程序基本框架脚本
- shell 调试技术,伪信号打印程序出错位置
- 较完整的Bash快捷键,让命令更有效率
- (9) linux shell 命令 -- touch
- 2.8-saltstack远程执行shell脚本