首页 技术 正文
技术 2022年11月12日
0 收藏 1000 点赞 3,499 浏览 4255 个字
  • 背景

  有一堆工程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 8def 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 8def 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()
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,078
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,553
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,402
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,177
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,814
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898