Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2080)

Unified Diff: build/android/gyp/create_device_library_links.py

Issue 14017010: [Android] Use a script on the device for creating library symlinks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/gyp/apk_install.py ('k') | build/java_apk.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « build/android/gyp/apk_install.py ('k') | build/java_apk.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698