zoukankan      html  css  js  c++  java
  • 随手写的自动批量编译部署NativeAndroid程序Python脚本

    • 背景

      有一堆工程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()
  • 相关阅读:
    退出程序
    筛选datatable
    1-2 开发环境搭建-Windows平台
    5-1 安全发布对象-发布与逸出
    4-4 线程安全性-可见性
    4-3 线程安全性-原子性-synchronized
    4-2 线程安全性-原子性-atomic-2
    4-1 线程安全性-原子性-atomic-1
    Spring
    Spring
  • 原文地址:https://www.cnblogs.com/Zephyroal/p/4140280.html
Copyright © 2011-2022 走看看