• 背景

  有一堆工程NativeAndroid程序,要一一编译部署编译测试,手头只有AndroidManifest和Makefile,需要一个个Update,Ndk-build,和发包安装测试,很是头疼,也没搜到和我类似需求的,用batch各种问题,只好换路,Python花了一上午临时抱佛脚的,如有建议欢迎指教。

  • 使用环境

-- Python3.x

-- AndroidNDK

-- AndroidSDK

-- Ant

  并确保配置好在Path中

  • 说明

看注释

  • Code
    • #!/usr/bin/python
      # -*- coding: utf-8 -*-
      #用于批量编译NativeAndroid程序
      #AutoBuild all sub native android projects
      #Zephyr 20141203
      import os
      import sys #指定编译目录名
      targetBuildDir = 'jni' #'Android'
      #指定目标Android版本
      targetVersion = 'android-18'
      #Build Configuration调试模式 debug/release
      Configuration= 'debug'
      #是否输出详细编译信息
      VerbosBuildInfo = 1
      #黑名单,如果遇到以下目录,就不再予以遍历
      blackList = ['obj','res','libs','bin','iOS','src'] #全局变量
      curRootDir = os.getcwd()
      dirVec=[] def GetProcessorCount():
      try:
      platform = sys.platform
      if platform == 'win32':
      if 'NUMBER_OF_PROCESSORS' in os.environ:
      return int(os.environ['NUMBER_OF_PROCESSORS'])
      else:
      return 8
      else:
      from numpy.distutils import cpuinfo
      return cpuinfo.cpu._getNCPUs()
      except Exception:
      print('Cannot know cpuinfo, use default 4 cpu')
      return 8 def WalkDir(rootDir, level=1):
      if level==1: print rootDir
      for lists in os.listdir(rootDir):
      path = os.path.join(rootDir, lists)
      if os.path.isdir(path):
      print '│ '*(level-1)+'│--'+lists
      if not lists in blackList:
      if lists == targetBuildDir:
      #print('-----path: '+path)
      #取得父级目录
      parentDir = os.path.dirname(path)
      #print('-----parentDir: '+parentDir)
      dirVec.append(parentDir)
      print('-----添加编译目录:'+parentDir)
      else:
      WalkDir(path, level+1) def DoBuild():
      print('---------开始DoBuild---------')
      numProcessor = GetProcessorCount()
      UpdateCMD = 'android update project -p . -s -t %s' % (targetVersion)
      print('UpdateCMD: '+UpdateCMD)
      isDebug = ( Configuration == 'debug' )
      NDKBuildCMD = 'ndk-build V=%d -j%d NDK_DEBUG=%d' % (VerbosBuildInfo, numProcessor, isDebug)
      print('NDKBuildCMD: '+NDKBuildCMD)
      AntCMD = 'ant %s install' % (Configuration)
      print('AntCMD: '+AntCMD)
      projectCount = 0
      if 1:
      for dir in dirVec:
      androidDir = dir
      print('---------开始Update---------')
      print('所在目录:'+androidDir)
      projectCount += 1
      if 1:
      os.chdir(androidDir)
      os.system(UpdateCMD)
      #依据mk文件相对路径决定是否要进入jni目录
      os.chdir('jni')
      print('==========开始编译')
      os.system(NDKBuildCMD)
      os.chdir('../')
      print('==========装包APK')
      os.system(AntCMD)
      print('==========当前处理完成:'+androidDir)
      #os.chdir(curRootDir)
      #print('---------切回主目录---------')
      projectCount += 1
      print('---------恭喜,完成%d个工程编译,已安装到设备---------' %(projectCount)) #MAIN
      WalkDir(curRootDir)
      DoBuild()
  • Code EN

    •  

      #!/usr/bin/python
      # -*- coding: utf-8 -*-
      #Batch compileNativeAndroid
      #AutoBuild all sub native android projects
      #Zephyr 20141203
      import os
      import sys #Target compile directory
      targetBuildDir = 'jni'
      #Target Android version
      targetVersion = 'android-19'
      #Build Configuration: debug/release
      Configuration= 'debug'
      #Will output detail compile info
      VerbosBuildInfo = 0
      #Blacklist for skip-directory
      blackList = ['obj','res','libs','bin','iOS','src'] #Global
      curRootDir = os.getcwd()
      dirVec=[] def GetProcessorCount():
      try:
      platform = sys.platform
      if platform == 'win32':
      if 'NUMBER_OF_PROCESSORS' in os.environ:
      return int(os.environ['NUMBER_OF_PROCESSORS'])
      else:
      return 8
      else:
      from numpy.distutils import cpuinfo
      return cpuinfo.cpu._getNCPUs()
      except Exception:
      print('Cannot know cpuinfo, use default 4 cpu')
      return 8 def WalkDir(rootDir, level=1):
      if level==1: print rootDir
      for lists in os.listdir(rootDir):
      path = os.path.join(rootDir, lists)
      if os.path.isdir(path):
      print '│ '*(level-1)+'│--'+lists
      if not lists in blackList:
      if lists == targetBuildDir:
      #Get parent directory
      parentDir = os.path.dirname(path)
      dirVec.append(parentDir)
      print('-----add compile directory:'+parentDir)
      else:
      WalkDir(path, level+1) def DoBuild():
      print('---------Begin DoBuild---------')
      numProcessor = GetProcessorCount()
      UpdateCMD = 'android update project -p . -s -t %s' % (targetVersion)
      print('UpdateCMD: '+UpdateCMD)
      isDebug = ( Configuration == 'debug' )
      NDKBuildCMD = 'ndk-build V=%d -j%d NDK_DEBUG=%d' % (VerbosBuildInfo, numProcessor, isDebug)
      print('NDKBuildCMD: '+NDKBuildCMD)
      AntCMD = 'ant %s install' % (Configuration)
      print('AntCMD: '+AntCMD)
      projectCount = 0
      if 1:
      for dir in dirVec:
      androidDir = dir
      print('---------Begin Update---------')
      print('Current directory:'+androidDir)
      projectCount += 1
      if 1:
      os.chdir(androidDir)
      os.system(UpdateCMD)
      #Rely on make file to decide whether cd into jni directory
      #os.chdir('jni')
      print('==========Begin compile')
      os.system(NDKBuildCMD)
      #os.chdir('../')
      print('==========building APK')
      os.system(AntCMD)
      print('==========work done on:'+androidDir)
      #os.chdir(curRootDir)
      #print('---------go back directory---------')
      projectCount += 1
      print('---------Congratulation,%d projects compiled,and deployed on device---------' %(projectCount)) #MAIN
      WalkDir(curRootDir)
      DoBuild()

随手写的自动批量编译部署NativeAndroid程序Python脚本的更多相关文章

  1. Saltstack批量编译部署nginx(多模块)

    最近一直在研究saltstack的同步文件和批量执行命令,随着架构的变大,批量部署的需求也变得明显起来了,我需要用一条命令就部署好nginx和tomcat,并且符合我所有的环境需求,可以直接投入生产环 ...

  2. 随手写的一个检测php连接mysql的小脚本

    最近偶然接触到一点点的php开发,要用到mysql数据库,由于mysql和php版本的关系,php5里面连接函数有mysql_connect(),mysqli_connect()两种,php7中又使用 ...

  3. ansible批量分发免密钥登陆python脚本

    最近看了看强大的号称自动化运维的三大利器之一的--ansible,ok,亲测之后,确实感觉,对于我们这种DBA工作者来说,确实很受益. 值得注意的是ansible要求被管理服务器python版本不低于 ...

  4. [python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序

    1.问题描述: 最近百度总爱做一些破坏用户信任度的事——文库金币变券.网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地. http://yinyueyun.baidu.com/ 可问题是云 ...

  5. python 3 - 写一个自动生成密码文件的程序

    1.你输入几,文件里面就给你产生多少条密码 2.密码必须包括,大写字母.小写字母.数字.特殊字符 3.密码不能重复 4.密码都是随机产生的 5.密码长度6-11 import string,rando ...

  6. windows中实现python,redis服务自动重启(任务计划程序+bat脚本)

    需求:银行电脑无法自动开机,只能 通过 应用相关服务每天自动重启的方式实现 服务更新并且防止服务假死,内存过大 等情况 相关工具:win10系统中,使用windows自带的任务计划程序 和 bat脚本 ...

  7. 项目上使用的每月1日自动导出Zabbix性能数据的python脚本

    基于zabbix-manager python2.7 #!/usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "life&q ...

  8. 分享一个批量修改文件编码的python脚本

    分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...

  9. 用Ant实现Java项目的自动构建和部署

    原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml         本文请勿转载! Ant是一个Apache基金会下的跨平台的构 ...

随机推荐

  1. python time

    Python-time 计算程序运行时间 import time start = time.clock() time.sleep(5) end = time.clock() runtime = end ...

  2. Bash实用技巧:同时循环两个列表

    摘要: 你会学到一种原创的同时循环两个列表的方法.类似于Python或者Haskell的zip函数,非常简洁直观,效果如下: $ paste <( ) <( ) | while read ...

  3. C++ Primer 变量和基本类型

    <C++ Primer 4th>读书摘要 基本上所有的语言都要提供下列特征: • 内置数据类型,如整型.字符型等. • 表达式和语句:表达式和语句用于操纵上述类型的值. • 变量:程序员可 ...

  4. CSS3实现的超酷动态圆形悬浮效果

    在线演示 本地下载 了解代码是如何开发的? 请参考并且播放如下代码轻视频: http://www.gbtags.com/gb/rtreplayerpreview/151.htm

  5. [Java拾遗二]Tomact及Http 部分总结.

    前言:   刚好今天回来的很早, 总结下 Tomcat及Http的基础知识. 1, Tomcat    web相关概念        web:网页的意思,网页资源包括服务器上的所有资源.        ...

  6. Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o

    Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o 1. Criteria,,Criterion ,, 1 <2. 主要的对象黑头配置磊 ...

  7. 微信小程序笔记(二)

    微信小程序环境搭建与开发工具介绍 2-1 开篇介绍及下载工具 1.开发工具下载地址:   http://t.cn/RVKH0HS 2.下载安装对应版本:win32,win64,mac; 2-2 小程序 ...

  8. 从委托、匿名方法到Lambda

    前面讲过委托的知识,本次由委托过渡到Lambda表达式,更易于理解. class Program { static void Main(string[] args) { , , , }; ProcAr ...

  9. MongoDB学习笔记——索引管理

    索引 索引能够提升查询的效率.没有索引,MongoDB必须扫描集合中的所有文档,才能找到匹配查询语句的文档. 索引是一种特殊的数据结构,将一小块数据集保存为容易遍历的形式.索引能够存储某种特殊字段或字 ...

  10. text-size-adjust属性

    在慕课上无意中看到-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%;这两段代码,居然发现自己完全不理解,然后就去问度娘了,以下是一些 ...