android多渠道打包工具
2015-12-01 15:16
453 查看
在工作中我们经常会遇到这种需求,同一份android源码,需要打出来不同配置的包(更改服务器地址、换渠道配置),有时不同的包需要加载的资源不一样,更变态的是同一份代码打出不同包名的app(已经遇到过做在线教育的,每个年级打出来一个apk,需要换包名、app的名字、icon ....);如果全部手工做要累死人的,后来在github上面发现了一个叫multiple-apk-generator的开源项目就是解决这个问题的
这个项目使用shell脚本写的,打包依赖gradle,源码就400多行,功能却很强大。实现原理比较巧妙,每个需要打的包被认为是一个target, 为每个target创建一个module并添加到快照目录,按照配置替换target对应的module里的内容,然后执行打包,等一会包全出来,输出在项目根目录下的zz-targets/out目录。这个项目关注的是资源替换这块,打包细节gradle处理(签名、混淆都可以配置)。下面是这个项目的介绍
项目地址: https://github.com/typ0520/multiple-apk-generator
解决android apk的批量打包,支持渠道号替换或者服务器地址替换(字符串替换)、资源替换、指定文件修改、修改包名
轻量级: 使用shell脚本编写,方便开发者修改实现逻辑
基于gradle打包apk
欢迎大家参与进来完善这个项目,如果你在使用过程中碰到问题或者有改进建议可以给我发邮件 php12345@163.com
注: 需要依赖shell环境,mac和linux可以直接使用;如果是windows需要装模拟linux环境的shell工具(xshell、cygwin)
目前支持的插件有6种
修改目标app的包名
修改目标app的名字
递归替换某个文件夹的所有文件中的某个字符串
替换某个文件中的某个字符串
替换某个文件
替换某个文件中的指定行内容
以下是samples项目其中一个makefile内容(详情可以参考samples项目)
注意事项
最终输出的apk,在zz-targets/out目录下
在描述文件中以#开头的是注释,会被忽略掉
描述语言以行为单位 ,按空格分隔,第一个单词为动作,后面的依次为${1} ${2} ${3} ......
target目录名字以module的名字加下划线开头,再加上数字或字母(例如: app_1)
描述文件(makefile)参数中不能出现空格
这个项目使用shell脚本写的,打包依赖gradle,源码就400多行,功能却很强大。实现原理比较巧妙,每个需要打的包被认为是一个target, 为每个target创建一个module并添加到快照目录,按照配置替换target对应的module里的内容,然后执行打包,等一会包全出来,输出在项目根目录下的zz-targets/out目录。这个项目关注的是资源替换这块,打包细节gradle处理(签名、混淆都可以配置)。下面是这个项目的介绍
项目地址: https://github.com/typ0520/multiple-apk-generator
multiple-apk-generator简介
解决android apk的批量打包,支持渠道号替换或者服务器地址替换(字符串替换)、资源替换、指定文件修改、修改包名轻量级: 使用shell脚本编写,方便开发者修改实现逻辑
基于gradle打包apk
欢迎大家参与进来完善这个项目,如果你在使用过程中碰到问题或者有改进建议可以给我发邮件 php12345@163.com
使用说明
注: 需要依赖shell环境,mac和linux可以直接使用;如果是windows需要装模拟linux环境的shell工具(xshell、cygwin)1. 把multiple-apk-generator.sh复制到gradle的项目根目录 2. 在项目根目录下新建zz-targets目录,保存apk的配置信息 3. zz-targets中新建代表一个打包任务的文件夹,名字是(对应的module的名字 + 下划线 + xxxx) 4. 在第一步新建的目录下面创建makefile文件,使用规定的描述语言(参考下面一节)描述输出apk之前做的一些资源替换操作
描述语言说明
目前支持的插件有6种修改目标app的包名
修改目标app的名字
递归替换某个文件夹的所有文件中的某个字符串
替换某个文件中的某个字符串
替换某个文件
替换某个文件中的指定行内容
以下是samples项目其中一个makefile内容(详情可以参考samples项目)
#修改目标包名 package com.example.samples2 #修改app的名字 app_name 测试项目 #修改服务器地址(全局字符串替换) match_all /src/main/ www.baidu.com www.google.com #把src/main/目录下所有文件中包含的字符串testString,替换为testString2(使用这个可以完成渠道号替换或者服务器地址替换) match_all src/main/ testString pretestStringsub #把config.java的中的字符串github修改为aagithubbb match_file src/main/java/com/example/samples/Config.java github aagithubbb #复制文件(如果对应的文件存在就覆盖掉) copy_file app_icon.png src/main/res/drawable-hdpi/ic_launcher.png #把src/main/assets/test.txt文件的第5行内容替换成replace-line5ffgdg replace_line src/main/assets/test.txt 5 replace-line5ffgdg
注意事项
最终输出的apk,在zz-targets/out目录下
在描述文件中以#开头的是注释,会被忽略掉
描述语言以行为单位 ,按空格分隔,第一个单词为动作,后面的依次为${1} ${2} ${3} ......
target目录名字以module的名字加下划线开头,再加上数字或字母(例如: app_1)
描述文件(makefile)参数中不能出现空格
相关文章推荐
- Android Studio之导入Project(项目)
- 简单讲解Android开发中触摸和点击事件的相关编程方法
- Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)
- Android事件分发机制浅析
- android Dialog去掉黑色的背景和边框
- Android应用开发--MP3音乐播放器代码实现(一)
- Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)
- Android String Placeholders
- Android支付之支付宝支付(一)
- Android 5.1 Dialog 溢出
- AndroidManifest.xml 配置文件
- 安卓扫码:简单的ZXing使用记录
- Android开发中Socket通信的基本实现方法讲解
- Android编程实现设置按钮背景透明与半透明及图片背景透明的方法
- android图表收益曲线-MPAndroidChart
- Android快捷方式解密
- Android编程实现TextView字体颜色设置的方法小结
- Android获取图片任意一点的RGB值
- Android 使用SharedPreferences 进行保存账号or密码or其它数据
- Android 料阅读及视频观看,先下载后打开