android常见打包方式

  1. 原始的打包方式(eclipse或者android studio,打包时很容易让开发工具crash);
  2. python脚本打包(这个接触得少);
  3. ant脚本打包(我前面有篇文章介绍了http://blog.csdn.net/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/$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

更多相关文章

  1. Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方
  2. Android利用系统提供的函数或常量判断版本大小
  3. android中Activity传递参数之onActivityResult
  4. python获取android设备的GPS信息脚本分享
  5. java代码控制layout_Margin参数

随机推荐

  1. 自定义ListView4
  2. Android多渠道SDK开发心得(5)——多渠道s
  3. android在物联网的应用
  4. android使用include调用内部组件的方法
  5. Android emulator 常用快捷键
  6. android 判断应用程序是否已安装(附带常用
  7. Android使用Ant自动编译签名打包详解
  8. android 控件跟随手指移动
  9. Android发送HTTP POST请求示范
  10. Android 进阶的小技巧整理(整理自第一行代