12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/usr/bin/env python3
- import os
- import sys
- from urllib.request import urlretrieve
- from zipfile import ZipFile
- def unzip(z, src, dst, binary=False):
- dst = os.path.join(dst, os.path.basename(src))
- with open(dst, 'wb') as f:
- f.write(z.read(src))
- if binary and sys.platform != 'win32':
- os.chmod(dst, 0o755)
- def resolveExecutableName(path):
- return path if sys.platform != 'win32' else path + '.exe'
- def resolvePath(path):
- return os.path.join(os.path.dirname(__file__), path)
- def resolvePlatformPath():
- path = resolvePath('../dist')
- if sys.platform == 'win32':
- return os.path.join(path, 'windows/tools')
- elif sys.platform == 'linux':
- return os.path.join(path, 'linux/bin')
- elif sys.platform == 'darwin':
- return os.path.join(path, 'macos/app/Contents/MacOS')
- def progress(blocknum, blocksize, totalsize):
- bytesdone = min(blocknum * blocksize, totalsize)
- percent = bytesdone * 1e2 / totalsize
- s = '\r%5.1f%% %*d / %d KB' % (percent, len(str(totalsize)), bytesdone / 1024, totalsize / 1024)
- sys.stderr.write(s)
- if bytesdone >= totalsize:
- sys.stderr.write('\n')
- # Prepare
- os.makedirs(resolvePath('../dist/all/tools'), exist_ok=True)
- os.makedirs(resolvePlatformPath(), exist_ok=True)
- # Download Apktool
- print('(1/3) Downloading Apktool...')
- urlretrieve('https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.7.0.jar',
- resolvePath('../dist/all/tools/apktool.jar'), progress)
- # Download and unpack Android Build Tools
- print('(2/3) Downloading Android Build Tools...')
- buildToolsUrl = 'https://dl.google.com/android/repository/build-tools_r33.0.1-{}.zip'
- if sys.platform == 'win32':
- buildToolsUrl = buildToolsUrl.format('windows')
- elif sys.platform == 'linux':
- buildToolsUrl = buildToolsUrl.format('linux')
- elif sys.platform == 'darwin':
- buildToolsUrl = buildToolsUrl.format('macosx')
- urlretrieve(buildToolsUrl, 'build-tools.zip', progress)
- with ZipFile('build-tools.zip') as z:
- unzip(z, 'android-13/lib/apksigner.jar', resolvePath('../dist/all/tools/'))
- unzip(z, resolveExecutableName('android-13/zipalign'), resolvePlatformPath(), True)
- if sys.platform == 'win32':
- unzip(z, 'android-13/libwinpthread-1.dll', resolvePlatformPath())
- os.remove('build-tools.zip')
- # Download and unpack Android SDK Platform Tools
- print('(3/3) Downloading Android SDK Platform Tools...')
- platformToolsUrl = 'https://dl.google.com/android/repository/platform-tools-latest-{}.zip'
- if sys.platform == 'win32':
- platformToolsUrl = platformToolsUrl.format('windows')
- elif sys.platform == 'linux':
- platformToolsUrl = platformToolsUrl.format('linux')
- elif sys.platform == 'darwin':
- platformToolsUrl = platformToolsUrl.format('darwin')
- urlretrieve(platformToolsUrl, 'platform-tools.zip', progress)
- with ZipFile('platform-tools.zip') as z:
- unzip(z, resolveExecutableName('platform-tools/adb'), resolvePlatformPath(), True)
- if sys.platform == 'win32':
- unzip(z, 'platform-tools/AdbWinApi.dll', resolvePlatformPath())
- unzip(z, 'platform-tools/AdbWinUsbApi.dll', resolvePlatformPath())
- os.remove('platform-tools.zip')
|