Android自动打包流程详细图:

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

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

#!/bin/python# build Android application package (.apk) from the command line using the SDK toolsimport osimport reimport sysimport timeimport shutilimport hashlibbuild_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 folderdef 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 md5def 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 Repositorydef 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 folderdef 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 revisiondef 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 timedef get_time():    return time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime(time.time()))# ant builddef ant_build():    os.system('android update project -p . --target android-19')    os.system('ant clean & ant release')# copy apk file to target folderdef 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 filesdef 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()

最后执行:pythonbuild.py即可。

更多相关文章

  1. android 全志a10(2.3.4)开发三 (打包编译文件及生成最终烧录镜像)
  2. Unity3D之移植学习笔记:移植到Android平台
  3. egret 发布android原生项目(一)打包apk
  4. Android多渠道Ant打包详细
  5. Android(安卓)性能优化 APM 平台搭建
  6. Android平台上的11个感应器你都知道吗(转)
  7. C#+Hybrid App(Android)实现微信APP支付
  8. 【BUG修补匠】 Android微信支付返回码-1之坑(首次调用成功第二次
  9. Android(安卓)签名打包

随机推荐

  1. Android布局控件属性
  2. 【转载】【Android】Android(安卓)Camera
  3. android带有文字的图片按钮的两种实现方
  4. android 中 焦点控制
  5. This Android(安卓)SDK requires And...t
  6. Android中文 API (31) ―― TimePicker
  7. Android中Activity启动模式详解
  8. Android(安卓)四大核心组件之Activity[生
  9. android api Demo之自定义Animation,实现3
  10. Android之android exported="false"作用