Android自动打包流程详细图:

在前面一些博客我们知道了如何通过命令行打包,如何通过Eclipse打包,如何通过编写shell脚本来进行打包,但是这些都不能很好的跨平台进行打包。

因Python本身具有很好的跨平台特性,故本博就是通过使用Python来进行编写跨平台打包脚本,脚本如下(build.py):

#!/bin/python
# build Android application package (.apk) from the command line using the SDK tools import os
import re
import sys
import time
import shutil
import hashlib build_root = os.path.dirname(os.path.abspath('__file__'))
build_source_name = 'source'
build_apk_name = 'FullscreenActivity-release.apk'
release_apk_path = build_root + '/release_apks'
publish_apks = build_root + '/publish_apks'
android_sdk = os.environ.get('ANDROID_SDK')
build_tool_ant_path = android_sdk + '/tools/ant'
build_bin_path = 'bin'
build_bin_classes_path = 'classes'
source_dir = build_root + '/' + build_source_name rev_cmd = "svn info"
rev_pattern = r"Last Changed Rev: ([0-9]*)" # delete file folder
def delete_file_folder(src):
if os.path.isfile(src):
try:
os.remove(src)
except:
pass
elif os.path.isdir(src):
for item in os.listdir(src):
itemsrc = os.path.join(src,item)
delete_file_folder(itemsrc)
try:
os.rmdir(src)
except:
pass # calc file md5
def calcMD5(filepath):
with open(filepath,'rb') as f:
md5obj = hashlib.md5()
md5obj.update(f.read())
hash = md5obj.hexdigest()
return hash # get source code from svn Repository
def get_source_code():
if (os.path.exists(release_apk_path)):
print release_apk_path + ' exists!'
else:
os.makedirs(release_apk_path) if (os.path.exists(source_dir)):
os.chdir(source_dir)
os.system('svn update')
else:
os.makedirs(source_dir)
os.chdir(source_dir)
os.system('svn checkout https://github.com/clarck/AutoBuildProject/trunk .') # clear classes file folder
def clear_classes_folder():
classes_abs_path = source_dir + '/' + build_bin_classes_path
if (os.path.exists(classes_abs_path)):
delete_file_folder(classes_abs_path)
else:
os.makedirs(classes_abs_path) # get svn revision
def get_revision():
rev = os.popen(rev_cmd).read()
m = re.search(rev_pattern, rev)
if m == None:
return None
return m.group(1) # get current time
def get_time():
return time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime(time.time())) # ant build
def ant_build():
os.system('android update project -p . --target android-19')
os.system('ant clean & ant release') # copy apk file to target folder
def copy_apk():
apk_file = source_dir + '/' + build_bin_path + '/' + build_apk_name
target_apk_file = release_apk_path + '/' + build_apk_name
if (os.path.exists(apk_file)):
shutil.copyfile(apk_file, target_apk_file)
else:
print apk_file + ' is not exists!' # delete source code files
def delete_source_file():
delete_file_folder(source_dir) # publish apk
def publish(date, rev):
if (os.path.exists(publish_apks)):
print publish_apks + ' exists!'
else:
os.makedirs(publish_apks) md5 = calcMD5(release_apk_path + '/' + build_apk_name)
apk_file = release_apk_path + '/' + build_apk_name
publish_file = publish_apks + '/' + date + '_' + rev + '_' + 'release.apk'
shutil.move(apk_file, publish_file)
delete_file_folder(release_apk_path) # main function
def main():
get_source_code()
clear_classes_folder()
rev = get_revision()
date = get_time()
ant_build()
copy_apk()
publish(date, rev) if __name__ == '__main__':
main()

最后执行:python build.py即可。

[原]Android打包之跨平台打包的更多相关文章

  1. [原]Android打包之Eclipse打多渠道包

    Android自动打包流程详细图: 步骤一和步骤二参考:[原]Android打包之Eclipse打包 步骤三:编写build.xml <?xml version="1.0" ...

  2. Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式

      相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...

  3. Gradle 实现 Android 多渠道定制化打包

    Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...

  4. Android一键多渠道分发打包实战和解析

    当项目需要有更多的客户的时候,你就会考虑将apk上架到应用商店了,无奈天朝Android应用商店真的是百家争鸣,据某地不完全统计已经有900+.若将Apk上架到所有的应用商店是个好主意,但是据统计也就 ...

  5. Android 自动编译、打包生成apk文件 4 - 多渠道批量打包

    相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式 > < ...

  6. Android Gradle 指定 Module 打包

    Android Gradle 指定 Module 打包 项目中有许多的可以直接独立运行的 Module ,如何在 Gradle 中将签名文件配置好了,那么就不需要普通的手动点击 Generate Si ...

  7. Android Studio下多渠道打包

    Android Studio下实现多渠道打包 直接上步骤 步骤 1. 清单文件添加属性(以友盟统计为例) 在application标签下添加meta-data属性 <application -- ...

  8. Android Studio将项目打包成apk

    Android Studio将项目打包成apk 第一种方法:适合自己调试用. (1)直接在项目中生成: (2)位置是在你的项目中 第二种方法:适合发布应用. (1)找到Generate Signed ...

  9. Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式

    from://http://blog.csdn.net/androiddevelop/article/details/11100109 相关文章列表: <Android 自动编译.打包生成apk ...

随机推荐

  1. atitit.设计模式(2) -----查表模式/ command 总结

    atitit.设计模式(2) -----查表模式/ command 总结 1. 应用场景: 1 1. 取代一瓦if else 1 2. 建设api rpc风格的时候儿. 1 3. 菜单是Command ...

  2. Vue.js进阶

    <!-- 动态Props --><!DOCTYPE html> <html lang='utf-8'> <head> <meta charset= ...

  3. 通过MSSQl作业定时执行批处理BAT文件

    前言 有些时候,我们可能会需要定时执行一下批处理来达到一定的目的,比如Oracle数据库的定时备份,当然Oracle也可以通过Rman实现定时备份.我们大多数的时候是通过操作系统的计划任务实现定时执行 ...

  4. Moses在Ubuntu14.04平台的安装过程

    平台环境:在windows 7中建立VMware虚拟机,操作系统为Ubuntu_14.04_amd_64 1.安装GIZA++ 安装步骤如下: wget http://giza-pp.googleco ...

  5. canvas之万花筒

    canvas也有css3里transform的变换功能,transform的底层运算的方式是运用了线性代数里矩阵, 而矩阵是在我们的生活实践中会经常被使用,它可以把复杂的空间问题呈现出来,它还有很多实 ...

  6. android: open failed: EACCES (Permission denied)

    1.  问题描述:在Android中,用程序访问Sdcard时,有时出现“java.io.IOException: open failed: EACCES (Permission denied)&qu ...

  7. Java性能提示(全)

    http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.htmlComparing the performance of LinkedLi ...

  8. 如何编写一个PHP的C扩展

    为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多.同样的运算代码,使用C来开发,性能会比PHP要提升数百倍.IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势. 另外C扩 ...

  9. java综合

    java环境变量配置:http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html 1.导入项目 当下载了包含Eclipse 项目的源代 ...

  10. Python小游戏之猜数字

    最近师兄师姐毕业,各种酒席,酒席上最常玩的一个游戏就是猜数字,游戏规则如下: 出题人在手机上输入一个0-100之间的数字,其它人轮流猜这个数字,如果你不幸猜中则要罚酒一杯.每次猜数字,出题人都要缩小范 ...