Index: build/android/gyp/create_device_library_links.py |
diff --git a/build/android/gyp/create_device_library_links.py b/build/android/gyp/create_device_library_links.py |
index 48aa61eea997302ee2efa8ee0a5f41dfe14219f7..5b8ee2b021613941199d38dd6e808deb8d08a33a 100755 |
--- a/build/android/gyp/create_device_library_links.py |
+++ b/build/android/gyp/create_device_library_links.py |
@@ -25,57 +25,76 @@ sys.path.append(BUILD_ANDROID_DIR) |
from pylib import android_commands |
from pylib.utils import apk_helper |
+def RunShellCommand(adb, cmd): |
+ output = adb.RunShellCommand(cmd) |
-def RunLinkCommand(adb, target, link): |
- cmd = ( |
- 'rm ' + link + ' > /dev/null 2>&1 \n' |
- 'ln -s ' + target + ' ' + link + '\n' |
- ) |
- result = adb.RunShellCommand(cmd) |
- |
- if result: |
+ if output: |
raise Exception( |
- 'Unexpected output creating links on device.\n' + |
- '\n'.join(result)) |
+ 'Unexpected output running command: ' + cmd + '\n' + |
+ '\n'.join(output)) |
-def CreateLinks(options): |
+def CreateSymlinkScript(options): |
libraries = build_utils.ReadJson(options.libraries_json) |
- apk_package = apk_helper.GetPackageName(options.apk) |
- adb = android_commands.AndroidCommands() |
- serial_number = adb.Adb().GetSerialNumber() |
+ link_cmd = ( |
+ 'rm $APK_LIBRARIES_DIR/%(lib_basename)s > /dev/null 2>&1 \n' |
+ 'ln -s $STRIPPED_LIBRARIES_DIR/%(lib_basename)s ' |
+ '$APK_LIBRARIES_DIR/%(lib_basename)s \n' |
+ ) |
+ |
+ script = '#!/bin/sh \n' |
+ |
for lib in libraries: |
- host_path = os.path.join(options.libraries_dir, lib) |
- def CreateLink(): |
- link = '/data/data/' + apk_package + '/lib/' + lib |
- target = options.target_dir + '/' + lib |
- RunLinkCommand(adb, target, link) |
+ script += link_cmd % { 'lib_basename': lib } |
+ |
+ with open(options.script_host_path, 'w') as scriptfile: |
+ scriptfile.write(script) |
+ |
- record_path = '%s.%s.link.md5.stamp' % (host_path, serial_number) |
- md5_check.CallAndRecordIfStale( |
- CreateLink, |
- record_path=record_path, |
- input_paths=[host_path]) |
+def TriggerSymlinkScript(options): |
+ apk_package = apk_helper.GetPackageName(options.apk) |
+ apk_libraries_dir = '/data/data/%s/lib' % apk_package |
+ |
+ adb = android_commands.AndroidCommands() |
+ device_dir = os.path.dirname(options.script_device_path) |
+ mkdir_cmd = ('if [ ! -e %(dir)s ]; then mkdir %(dir)s; fi ' % |
+ { 'dir': device_dir }) |
+ RunShellCommand(adb, mkdir_cmd) |
+ adb.PushIfNeeded(options.script_host_path, options.script_device_path) |
+ |
+ trigger_cmd = ( |
+ 'APK_LIBRARIES_DIR=%(apk_libraries_dir)s; ' |
+ 'STRIPPED_LIBRARIES_DIR=%(target_dir)s; ' |
+ '. %(script_device_path)s' |
+ ) % { |
+ 'apk_libraries_dir': apk_libraries_dir, |
+ 'target_dir': options.target_dir, |
+ 'script_device_path': options.script_device_path |
+ } |
+ RunShellCommand(adb, trigger_cmd) |
def main(argv): |
parser = optparse.OptionParser() |
parser.add_option('--apk', help='Path to the apk.') |
+ parser.add_option('--script-host-path', |
+ help='Path on the host for the symlink script.') |
+ parser.add_option('--script-device-path', |
+ help='Path on the device to push the created symlink script.') |
parser.add_option('--libraries-json', |
help='Path to the json list of native libraries.') |
parser.add_option('--target-dir', |
help='Device directory that contains the target libraries for symlinks.') |
- parser.add_option('--libraries-dir', |
- help='Directory that contains stripped libraries ' |
- '(used to determine if a library has changed since last push).') |
parser.add_option('--stamp', help='Path to touch on success.') |
options, _ = parser.parse_args() |
- required_options = ['apk', 'libraries_json', 'target_dir', 'libraries_dir'] |
+ required_options = ['apk', 'libraries_json', 'script_host_path', |
+ 'script_device_path', 'target_dir'] |
build_utils.CheckOptions(options, parser, required=required_options) |
- CreateLinks(options) |
+ CreateSymlinkScript(options) |
+ TriggerSymlinkScript(options) |
if options.stamp: |
build_utils.Touch(options.stamp) |