2019-11-23 20:27:39 +08:00
|
|
|
#!/usr/bin/env python
|
|
|
|
'''
|
|
|
|
aaa
|
|
|
|
'''
|
|
|
|
import os
|
|
|
|
import urllib
|
|
|
|
import zipfile
|
|
|
|
import platform
|
|
|
|
import sys
|
|
|
|
import subprocess
|
|
|
|
import tempfile
|
|
|
|
import argparse
|
2020-10-07 22:45:05 +08:00
|
|
|
import ssl
|
|
|
|
try:
|
|
|
|
ssl._create_default_https_context = ssl._create_unverified_context
|
|
|
|
print("==> setup_android.py set ssl context ok")
|
|
|
|
except Exception:
|
|
|
|
pass
|
2019-11-23 20:27:39 +08:00
|
|
|
from retry import retry
|
|
|
|
|
|
|
|
DIR_PATH = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
|
|
|
|
COCOS2D_X = os.path.abspath(os.path.join(DIR_PATH, "../.."))
|
|
|
|
# ROOT_DIR/cocos2d-x
|
|
|
|
ROOT_DIR = os.path.abspath(os.path.join(COCOS2D_X, ".."))
|
|
|
|
|
|
|
|
ANDROID_NDK = os.path.join(ROOT_DIR, "android-ndk-r16b")
|
|
|
|
ANDROID_SDK = os.path.join(ROOT_DIR, "android-sdk")
|
2021-04-20 20:44:12 +08:00
|
|
|
SDK_MANAGER = os.path.join(ROOT_DIR, "cmdline-tools/bin/sdkmanager")
|
2019-11-23 20:27:39 +08:00
|
|
|
SYSTEM = platform.system().lower()
|
|
|
|
if SYSTEM == "windows":
|
|
|
|
SDK_MANAGER = SDK_MANAGER + ".bat"
|
|
|
|
|
|
|
|
|
|
|
|
def run(command):
|
|
|
|
print("=" * 80)
|
|
|
|
print(command)
|
|
|
|
subprocess.check_call(command.split())
|
|
|
|
|
|
|
|
|
|
|
|
def run_with_yes(command):
|
|
|
|
print("=" * 80)
|
|
|
|
print("yes|" + command)
|
|
|
|
f = tempfile.TemporaryFile("w")
|
|
|
|
repeat_yes = 50
|
|
|
|
f.write("y\n" * repeat_yes)
|
|
|
|
f.seek(0)
|
|
|
|
subprocess.check_call(command.split(), stdin=f)
|
|
|
|
|
|
|
|
|
|
|
|
def unzip(zip_file, directory):
|
|
|
|
print("=" * 80)
|
|
|
|
print("Unzip: " + zip_file + " to " + directory)
|
|
|
|
if SYSTEM == "windows":
|
|
|
|
zipfile.ZipFile(zip_file).extractall(directory)
|
|
|
|
else:
|
|
|
|
# module zipfile ignore priviliges i.e. +x
|
|
|
|
cmd = "unzip -d " + directory + " " + zip_file
|
|
|
|
subprocess.check_output(cmd.split())
|
|
|
|
|
|
|
|
def download(url, zip_file):
|
|
|
|
print("=" * 80)
|
|
|
|
print("Download: " + url + ", file: " + zip_file)
|
|
|
|
try:
|
|
|
|
os.remove(zip_file)
|
|
|
|
except OSError:
|
|
|
|
pass
|
|
|
|
urllib.urlretrieve(url, zip_file)
|
|
|
|
|
|
|
|
|
|
|
|
@retry(Exception, tries=5, delay=1, backoff=1)
|
|
|
|
def install_android_ndk():
|
|
|
|
file_name = "android-ndk-r16b-" + SYSTEM + "-x86_64.zip"
|
|
|
|
url = "https://dl.google.com/android/repository/" + file_name
|
|
|
|
zip_file = os.path.abspath(os.path.join(ROOT_DIR, file_name))
|
|
|
|
|
|
|
|
download(url, zip_file)
|
|
|
|
unzip(zip_file, ROOT_DIR)
|
|
|
|
|
|
|
|
@retry(Exception, tries=5, delay=1, backoff=1)
|
|
|
|
def install_android_sdk_tools():
|
2021-04-20 20:44:12 +08:00
|
|
|
file_name = "commandlinetools-{system}-6858069_latest.zip".format(
|
2019-11-23 20:27:39 +08:00
|
|
|
system=platform.system().lower())
|
|
|
|
url = "https://dl.google.com/android/repository/" + file_name
|
2021-04-20 20:44:12 +08:00
|
|
|
zip_file = os.path.abspath(os.path.join(ROOT_DIR, file_name)) # folder is cmdline-tools
|
2019-11-23 20:27:39 +08:00
|
|
|
|
|
|
|
download(url, zip_file)
|
2021-04-20 20:44:12 +08:00
|
|
|
unzip(zip_file, os.path.join(ROOT_DIR, ""))
|
2019-11-23 20:27:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
@retry(Exception, tries=5, delay=1, backoff=1)
|
|
|
|
def install_android_sdk():
|
|
|
|
switches = " --verbose --sdk_root=" + ANDROID_SDK + " "
|
|
|
|
cmd1 = SDK_MANAGER + switches
|
|
|
|
packages = [
|
2021-04-20 20:44:12 +08:00
|
|
|
'"platform-tools"',
|
|
|
|
'"cmdline-tools;latest"',
|
|
|
|
'"platforms;android-28"',
|
2021-04-20 20:46:32 +08:00
|
|
|
'"build-tools;29.0.2"'
|
2019-11-23 20:27:39 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
cmd = cmd1 + " ".join(packages)
|
|
|
|
run_with_yes(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
def export_environment(ndk_only):
|
|
|
|
with open(os.path.join(ROOT_DIR, "environment.sh"), "a") as myfile:
|
|
|
|
if not ndk_only:
|
|
|
|
myfile.write("export ANDROID_HOME=" + ANDROID_SDK + "\n")
|
|
|
|
myfile.write("export ANDROID_SDK_ROOT=" + ANDROID_SDK + "\n")
|
|
|
|
myfile.write("export ANDROID_NDK_HOME=" + ANDROID_NDK + "\n")
|
|
|
|
myfile.write("export NDK_ROOT=" + ANDROID_NDK + "\n")
|
|
|
|
|
|
|
|
with open(os.path.join(ROOT_DIR, "environment.ps1"), "a") as myfile:
|
|
|
|
if not ndk_only:
|
|
|
|
myfile.write("$env:ANDROID_HOME=\"" + ANDROID_SDK + "\"\n")
|
|
|
|
myfile.write("$env:ANDROID_SDK_ROOT=\"" + ANDROID_SDK + "\"\n")
|
|
|
|
myfile.write("$env:ANDROID_NDK_HOME=\"" + ANDROID_NDK + "\"\n")
|
|
|
|
myfile.write("$env:NDK_ROOT=\"" + ANDROID_NDK + "\"\n")
|
|
|
|
|
|
|
|
def main(ndk_only):
|
|
|
|
if not ndk_only:
|
|
|
|
install_android_sdk_tools()
|
|
|
|
install_android_sdk()
|
|
|
|
install_android_ndk()
|
|
|
|
export_environment(ndk_only)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
parser = argparse.ArgumentParser(description='Install android sdk/ndk')
|
|
|
|
parser.add_argument("--ndk_only", help="Install ndk only", action="store_true")
|
|
|
|
args = parser.parse_args()
|
|
|
|
main(args.ndk_only)
|