pythonはgradleを呼び出してAndroidパッケージを実現
3986 ワード
簡単に述べる
通常はJenkinsでapkパッケージを直接実現するのが一番便利ですが、コードが複数の倉庫のコードで組み合わせるとJenkinsの操作も面倒なので、ここでpythonコードで実現しました.バージョンはpython 2です.7の
キーワードgradle python git
パッケージ処理
スクリプトは、プライマリ・エンジニアリング・コードの最新のコミットをプルし、sdkエンジニアリングの最新のコミットをプルし、gradleパッケージ・コマンドを実行し、buildディレクトリの下にあるファイルcopyをターゲット・ディレクトリに実行します.
pythonスクリプト
設計プロセスに従ってpythonコードbuildを作成する.pyは以下の通りです
copytreeeはすべてコピーする方法で、具体的には以下の通りです.
このようにpython buildを直接実行する.py Releaseとかでパッケージングできます
通常はJenkinsでapkパッケージを直接実現するのが一番便利ですが、コードが複数の倉庫のコードで組み合わせるとJenkinsの操作も面倒なので、ここでpythonコードで実現しました.バージョンはpython 2です.7の
キーワードgradle python git
パッケージ処理
スクリプトは、プライマリ・エンジニアリング・コードの最新のコミットをプルし、sdkエンジニアリングの最新のコミットをプルし、gradleパッケージ・コマンドを実行し、buildディレクトリの下にあるファイルcopyをターゲット・ディレクトリに実行します.
pythonスクリプト
設計プロセスに従ってpythonコードbuildを作成する.pyは以下の通りです
#encoding=utf-8
import os
import sys
import subprocess
import platform
from CommUtil import copytree
# mac ,
#
outdir = "/data/webapp/apks"
if platform.system() == "Darwin":
outdir = "outapks"
type = ""
# , debug release
# Qatest , build.gradle
if not os.path.exists(outdir):
os.mkdir(outdir)
if len(sys.argv) > 1:
type = sys.argv[1]
if not type:
type = "qatest"
# sdk clone
# git clone
# git 1.8
mfiles = os.listdir(sys.path[0])
if mfiles.count("android_as") <= 0:
#subprocess.call , shell=Ture
ret = subprocess.call("git clone [email protected]:patient-app/android_as.git", shell=True)
if mfiles.count("JkysSDK") <= 0:
ret = subprocess.call("git clone [email protected]:weixiangwu/JkysSDK.git", shell=True)
# ,cwd git
ret = subprocess.call("git fetch", shell=True, cwd='android_as')
subprocess.call("git checkout devhz", shell=True, cwd='android_as')
subprocess.call("git pull", shell=True, cwd='android_as')
subprocess.call("git fetch", shell=True, cwd='JkysSDK')
subprocess.call("git checkout master", shell=True, cwd='JkysSDK')
subprocess.call("git pull", shell=True, cwd='JkysSDK')
# gradle , clean assemble
ret = subprocess.call("gradle -p android_as clean", shell=True)
if type.startswith("qa"):
ret = subprocess.call("gradle -p android_as assembleQatest", shell=True)
elif type.startswith("pre"):
ret = subprocess.call("gradle -p android_as assemblePreRelease", shell=True)
# , gradle
elif type.lower().startswith("mcpre"):
ret = subprocess.call("gradle -p android_as assembleMcpRelease", shell=True)
if (ret == 0):
ret = subprocess.call(
"tar -zcvf " + outdir + "/channels_patient.tar.gz" + " android_as/Diabetes_pt_225/build/outputs/apk", shell=True)
elif type.lower().startswith("mcptest"):
ret = subprocess.call("gradle -p android_as task assembleMcpTest", shell=True)
if (ret == 0):
ret = subprocess.call(
"tar -zcvf " + outdir + "/channelstest_patient.tar.gz" + " android_as/Diabetes_pt_225/build/outputs/apk", shell=True)
if (ret == 0 and not type.startswith("mcp")):
# , copy
copytree("android_as/Diabetes_pt_225/build/outputs/apk", outdir)
copytreeeはすべてコピーする方法で、具体的には以下の通りです.
import os
import platform
import shutil
def copytree(src, dst, symlinks = False, ignore = None):
if not os.path.exists(dst):
os.makedirs(dst)
shutil.copystat(src, dst)
lst = os.listdir(src)
if ignore:
excl = ignore(src, lst)
lst = [x for x in lst if x not in excl]
for item in lst:
s = os.path.join(src, item)
d = os.path.join(dst, item)
if symlinks and os.path.islink(s):
if os.path.lexists(d):
os.remove(d)
os.symlink(os.readlink(s), d)
try:
st = os.lstat(s)
mode = stat.S_IMODE(st.st_mode)
os.lchmod(d, mode)
except:
pass # lchmod not available
elif os.path.isdir(s):
copytree(s, d, symlinks, ignore)
else:
shutil.copy2(s, d)
if __name__ == '__main__':
print(platform.system())
このようにpython buildを直接実行する.py Releaseとかでパッケージングできます