脚本打包之python打apk

打包平台是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 ---------------------------------------------------------------




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值