真的干货,自己花两天写的,注释很详细,我就不一一说了。适合有点python和android基础的哥们看
# -*- coding: utf-8 -*-
import os
import shutil
#一般情况 修改SDK_PATH 和 BASE_PROJECT_PATH即可
SDK_PATH = "D:/adt-bundle-windows-x86-20140702/sdk/";#sdk的基础路径
BASE_PROJECT_PATH = "D:/testDemo/clientprojects/"; #工程路径
SDK_TOOLS_PATH = SDK_PATH + "tools/"; #sdk的tools目录
SDK_ANDROID_JAR = SDK_PATH + "platforms/android-20/android.jar";#android.jar
PROJECT_PATH = BASE_PROJECT_PATH+"android_projects/sdk/sdk/";
PROJECT_BIN = PROJECT_PATH + "bin/"
OUTPUT_PATH = BASE_PROJECT_PATH+"out";
os.getcwd() # 查看当前工作目录
os.chdir(PROJECT_PATH) # 改变目录,注意双引号和反斜杠
# 初始化一些变量
def readonly_handler(func, path, execinfo):
os.chmod(path, 128)
func(path)
def removeFodler(folderPath):
print(folderPath);
if (os.path.exists(folderPath)):
shutil.rmtree(folderPath, onerror=readonly_handler);
#拷贝文件夹
def copyFodler(srcFolder, destFodler):
if(os.path.exists(srcFolder)):
shutil.copytree(srcFolder, destFodler);
print(srcFolder);
def replaceFolder(srcFolder,destFolder):
if os.path.exists(destFolder)==False:
os.mkdir(destFolder) #创建目录
removeFodler(destFolder);
copyFodler(srcFolder, destFolder);
def getAllStringByFolder(folderPath,appendExtendtion):
libs_string = "";
for lists in os.listdir(folderPath):
if str(lists).find(".jar") != -1:
libs_string=libs_string+"libs/"+lists+appendExtendtion
return libs_string
def replaceFile(srcFile,destFile):
if not os.path.exists(srcFile):
return;
if os.path.exists(destFile):
os.remove(destFile)
shutil.copyfile(srcFile,destFile)
#移除上一次生成的bin文件目录
removeFodler(PROJECT_BIN);
os.system("mkdir bin");
#移除上一次生成的apk
if os.path.exists(ALIGN_PACKAGE_NAME):
os.remove(ALIGN_PACKAGE_NAME);
# 执行javac
print("====javac===");
javacCommond = "javac -encoding UTF-8 -target 1.6 -source 1.6 -bootclasspath " + SDK_ANDROID_JAR + " -d bin src/org/cocos2dx/lua/*.java gen/com/test/testDemo/R.java "#查看你的实际工程来定义
jarFile = "-classpath "+getAllStringByFolder("libs",";");
javacCommond = javacCommond + jarFile;
os.system(javacCommond);
print "=====dex======"
dexCommond = SDK_PATH + "build-tools/android-4.4W/dx.bat --dex --output=" + PROJECT_BIN + "classes.dex " + PROJECT_BIN + " "+getAllStringByFolder("libs"," ")
os.system(dexCommond);
print "====aapt add assets ====="
addAssetsCommond = "aapt p -f -S res -M AndroidManifest.xml -A assets -I " + SDK_ANDROID_JAR + " -F bin/resources.arsc";
os.system(addAssetsCommond);
print "====build apk===="
buildApkCommond = SDK_TOOLS_PATH + "apkbuilder.bat" + " " + PACKAGE_NAME + " -u -z " + PROJECT_BIN + "resources.arsc" + " -f " + PROJECT_BIN + "classes.dex -rf " + PROJECT_PATH + "src -nf " + PROJECT_PATH + "libs/ -rj " + PROJECT_PATH + "libs/"
os.system(buildApkCommond);
print "====signApk===="
signApkCommond = "jarsigner -verbose -keystore " + PROJECT_PATH + "testDemo.keystore -storepass hahaha1234 -keypass hahaha123 -signedjar " + SIGNED_PACKAGE_NAME + " " + PACKAGE_NAME + " " + "testDemo.keystore";
os.system(signApkCommond);
print("====alignApk=====")
alignCommond = SDK_TOOLS_PATH + "zipalign.exe -v 4 " + SIGNED_PACKAGE_NAME + " " + ALIGN_PACKAGE_NAME;
os.system(alignCommond);
print "=========show content==========";
showPackInfoCommond = "aapt l " + ALIGN_PACKAGE_NAME;
os.system(showPackInfoCommond)
print "======remove temp apk======="
if os.path.exists(PACKAGE_NAME):
os.remove(PACKAGE_NAME);
if os.path.exists(SIGNED_PACKAGE_NAME):
os.remove(SIGNED_PACKAGE_NAME);