有一堆工程NativeAndroid程序,要一一編譯部署編譯測試,手頭只有AndroidManifest和Makefile,須要一個個Update,Ndk-build,和發包安裝測試,非常頭疼,也沒搜到和我相似需求的,用batch各類問題,只好換路,Python花了一上午臨時抱佛腳的,若有建議歡迎指教。python
-- Python3.xandroid
-- AndroidNDKapp
-- AndroidSDKide
-- Ant測試
並確保配置好在Path中ui
看註釋spa
#!/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()
#!/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()