五、python脚本打包

真的干货,自己花两天写的,注释很详细,我就不一一说了。适合有点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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值