#! /usr/bin/env python # Copyright 2018 Google LLC. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. ''' This script can be run with no arguments, in which case it will produce an APK with native libraries for all four architectures: arm, arm64, x86, and x64. You can instead list the architectures you want as arguments to this script. For example: python make_universal_apk.py arm x86 The environment variables ANDROID_NDK and ANDROID_HOME must be set to the locations of the Android NDK and SDK. Additionally, `ninja` should be in your path. It assumes that the source tree is in the desired state, e.g. by having run 'python tools/git-sync-deps' in the root of the skia checkout. Also: * If the environment variable SKQP_BUILD_DIR is set, many of the intermediate build objects will be placed here. * If the environment variable SKQP_OUTPUT_DIR is set, the final APK will be placed in this directory. * If the environment variable SKQP_DEBUG is set, Skia will be compiled in debug mode. ''' import os import sys import create_apk import download_model def make_apk(opts): assert '/' in [os.sep, os.altsep] # 'a/b' over os.path.join('a', 'b') skia_dir = os.path.dirname(__file__) + '/../..' create_apk.makedirs(opts.build_dir) assets_dir = skia_dir + '/platform_tools/android/apps/skqp/src/main/assets' gmkb = assets_dir + '/gmkb' resources_path = assets_dir + '/resources' with create_apk.RemoveFiles(resources_path, gmkb): # always clean up create_apk.remove(gmkb) create_apk.make_symlinked_subdir(gmkb, opts.build_dir) create_apk.remove(resources_path) os.symlink('../../../../../../../resources', resources_path) if os.path.exists(assets_dir + '/files.checksum'): download_model.main() else: sys.stderr.write( '\n* * * Note: SkQP models are missing! * * *\n\n') create_apk.create_apk(opts) def main(): options = create_apk.SkQP_Build_Options() if options.error: sys.stderr.write(options.error + __doc__) sys.exit(1) options.write(sys.stdout) make_apk(options) if __name__ == '__main__': main()