#!/usr/bin/env python ''' aaa ''' import os import urllib import zipfile import platform import sys import subprocess import tempfile import argparse import ssl try: ssl._create_default_https_context = ssl._create_unverified_context print("==> setup_android.py set ssl context ok") except Exception: pass 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") SDK_MANAGER = os.path.join(ROOT_DIR, "sdk_tools/tools/bin/sdkmanager") 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(): file_name = "sdk-tools-{system}-3859397.zip".format( system=platform.system().lower()) 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, os.path.join(ROOT_DIR, "sdk_tools")) @retry(Exception, tries=5, delay=1, backoff=1) def install_android_sdk(): switches = " --verbose --sdk_root=" + ANDROID_SDK + " " cmd1 = SDK_MANAGER + switches packages = [ "platforms;android-28", "build-tools;29.0.2", "platform-tools", "tools" ] 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)