1#! /usr/bin/env python 2# Copyright 2018 Google LLC. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6''' 7This script can be run with no arguments, in which case it will produce an 8APK with native libraries for all four architectures: arm, arm64, x86, and 9x64. You can instead list the architectures you want as arguments to this 10script. For example: 11 12 python make_universal_apk.py arm x86 13 14The environment variables ANDROID_NDK and ANDROID_HOME must be set to the 15locations of the Android NDK and SDK. 16 17Additionally, `ninja` should be in your path. 18 19It assumes that the source tree is in the desired state, e.g. by having 20run 'python tools/git-sync-deps' in the root of the skia checkout. 21 22Also: 23 * If the environment variable SKQP_BUILD_DIR is set, many of the 24 intermediate build objects will be placed here. 25 * If the environment variable SKQP_OUTPUT_DIR is set, the final APK 26 will be placed in this directory. 27 * If the environment variable SKQP_DEBUG is set, Skia will be compiled 28 in debug mode. 29''' 30 31import os 32import sys 33 34import create_apk 35import download_model 36 37def make_apk(opts): 38 assert '/' in [os.sep, os.altsep] # 'a/b' over os.path.join('a', 'b') 39 40 skia_dir = os.path.dirname(__file__) + '/../..' 41 create_apk.makedirs(opts.build_dir) 42 assets_dir = skia_dir + '/platform_tools/android/apps/skqp/src/main/assets' 43 gmkb = assets_dir + '/gmkb' 44 resources_path = assets_dir + '/resources' 45 46 with create_apk.RemoveFiles(resources_path, gmkb): # always clean up 47 create_apk.remove(gmkb) 48 create_apk.make_symlinked_subdir(gmkb, opts.build_dir) 49 50 create_apk.remove(resources_path) 51 os.symlink('../../../../../../../resources', resources_path) 52 53 if os.path.exists(assets_dir + '/files.checksum'): 54 download_model.main() 55 else: 56 sys.stderr.write( 57 '\n* * * Note: SkQP models are missing! * * *\n\n') 58 create_apk.create_apk(opts) 59 60def main(): 61 options = create_apk.SkQP_Build_Options() 62 if options.error: 63 sys.stderr.write(options.error + __doc__) 64 sys.exit(1) 65 options.write(sys.stdout) 66 make_apk(options) 67 68if __name__ == '__main__': 69 main() 70