隨手寫的自動批量編譯部署NativeAndroid程序Python腳本

  • 背景

  有一堆工程NativeAndroid程序,要一一編譯部署編譯測試,手頭只有AndroidManifest和Makefile,須要一個個Update,Ndk-build,和發包安裝測試,非常頭疼,也沒搜到和我相似需求的,用batch各類問題,只好換路,Python花了一上午臨時抱佛腳的,若有建議歡迎指教。python

  • 使用環境

-- Python3.xandroid

-- AndroidNDKapp

-- AndroidSDKide

-- Ant測試

  並確保配置好在Path中ui

  • 說明

看註釋spa

  • 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()
相關文章
相關標籤/搜索