打包平台是windows ,环境变量如有疑问请自行搜索
#打包平台是windows ,环境变量如有疑问请自行搜索 import os, sys, os.path import shutil import xml.dom.minidom import time from xml.etree import ElementTree as ET from xml.etree.ElementTree import SubElement from xml.etree.ElementTree import Element from xml.etree.ElementTree import ElementTree curdir = os.path.split(os.path.realpath(__file__))[0] os.chdir(curdir) packageVersion = "1.0.0" versionName = "1.0.0_100" //资源目录 version = "1.0.0" #拷贝资源源路径 ResourcePath = "E://test/resource" packageName = "com.test.game" Android_Root_Path = "E://test/code_android" #拷贝资源目标路径 Android_Res = Android_Root_Path + "/assets" //windows的cmd运行命令 def run_cmd(cmdstr): printlog(cmdstr) ret = os.system(cmdstr) if ret < 0: printlog('run_cmd result = ' + str(ret)) exit(0) else: printlog('run_cmd result = ' + str(ret)) def DownLoad_Resource(Path): //如果有svn或者git更新文件,打包可以同步最新 我这里写的是svn if os.path.isdir(Path): run_cmd('svn cleanup %s' %Path) run_cmd('svn revert --depth=infinity %s' %Path) run_cmd('svn update %s' %Path) else: printlog("resource is NULL") sys.exit(1) DownLoad_Resource(code_Android,code_Android_URL) DownLoad_Resource(version_Release,version_Release_URL) #删除打包的旧资源 shutil.rmtree(Android_Res,True,None) xmlns = 'http://schemas.android.com/apk/res/android' def copy_assert(): if os.path.exists(ResourcePath): copy_tree_overlap(ResourcePath,Android_Res) else: printlog("resource is NULL") sys.exit(1) #把游戏资源拷贝到android工程下 copy_assert() def getOldPackageName(decompileDir): manifestFile = decompileDir + '/AndroidManifest.xml' ET.register_namespace('android', xmlns) targetTree = ET.parse(manifestFile) root = targetTree.getroot() package = root.attrib.get('package') old_package = package return old_package def renameVersionCode(decompileDir, versionCode,versinName): if versionCode is None or versionCode == '' or versinName is None or versinName == '' : return manifestFile = decompileDir + '/AndroidManifest.xml' ET.register_namespace('android', androidNS) targetTree = ET.parse(manifestFile) root = targetTree.getroot() version_code = '{http://schemas.android.com/apk/res/android}versionCode' version_name = '{http://schemas.android.com/apk/res/android}versionName' root.attrib[version_code] = versionCode root.attrib[version_name] = versinName targetTree.write(manifestFile, 'UTF-8') def renamePackageName(decompileDir, packageName): if packageName is None or packageName == '': return manifestFile = decompileDir + '/AndroidManifest.xml' ET.register_namespace('android', 'http://schemas.android.com/apk/res/android') targetTree = ET.parse(manifestFile) root = targetTree.getroot() root.attrib['package'] = packageName targetTree.write(manifestFile, 'UTF-8') # 修改 AndroidManifest.xml中的 versionCode 和 versionName ##修改工程文件包名 android_java_file_path = Android_Root_Path +"/"+"src/com/test/game/test.java" modifyFileContent(android_java_file_path, ".java", getOldPackageName(Android_Root_Path)+".R;", packageName+".R;") ##if os.path.isfile(android_manifest_file): renamePackageName(Android_Root_Path,packageName) #版本号修改 renameVersionCode(Android_Root_Path,packageVersion,version) #执行脚本 bat = Android_Root_Path+"/BuildRelease_apk.bat" if os.path.isfile(bat): run_cmd(bat +" " +"android" + " " + versionName);#运行windows批处理打包脚本 #bat content -------------bat windows -------------------------------------------------------- #切换当前目录 cd /d %~dp0 ant clean ant release @echo off setlocal enabledelayedexpansion if not "%1" == "" ( set platform=%1 set versionName=%2 set hour=%Time:~0,2% if hour leq 9 (set hour=0%TIME:~1,1%) echo !hour! if exist .\ApkOut (rmdir /s /q .\ApkOut) mkdir ApkOut set timestr=%Date:~0,4%_%Date:~5,2%_%Date:~8,2%_!hour!_%Time:~3,2%_!platform! echo !timestr! echo !versionName! copy /Y .\bin\Game-release.apk .\ApkOut\!timestr!_!versionName!_release.apk copy /Y .\bin\Game-release-unsigned.apk .\ApkOut\!timestr!_!versionName!_unsigned.apk ) ----------------------------bat windows ---------------------------------------------------------------