blob: 71b627ae2e96f3e9f4adc7d592a2f5c7c8727554 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""The android specific platform implementation module."""
from __future__ import print_function
import os
import subprocess
import cr
class AndroidPlatform(cr.Platform):
"""The implementation of Platform for the android target."""
ACTIVE = cr.Config.From(
CR_ADB=os.path.join('{CR_SRC}', 'third_party', 'android_sdk', 'public',
'platform-tools', 'adb'),
CR_TARGET_SUFFIX='_apk',
CR_BINARY=os.path.join('{CR_BUILD_DIR}', 'apks', '{CR_TARGET_NAME}.apk'),
CR_ACTION='android.intent.action.VIEW',
CR_PACKAGE='com.google.android.apps.{CR_TARGET}',
CR_PROCESS='{CR_PACKAGE}',
CR_ACTIVITY='.Main',
CR_INTENT='{CR_PACKAGE}/{CR_ACTIVITY}',
CR_TEST_RUNNER=os.path.join(
'{CR_SRC}', 'build', 'android', 'test_runner.py'),
CR_ADB_GDB=os.path.join('{CR_SRC}', 'build', 'android', 'adb_gdb'),
CR_DEFAULT_TARGET='chrome_public',
GN_ARG_target_os='"android"'
)
def __init__(self):
super(AndroidPlatform, self).__init__()
self._env = cr.Config('android-env', literal=True, export=True)
self.detected_config.AddChild(self._env)
@property
def priority(self):
return super(AndroidPlatform, self).priority + 1
@property
def paths(self):
return []
class AndroidInitHook(cr.InitHook):
"""Android output directory init hook.
This makes sure that your client is android capable when you try
to make and android output directory.
"""
@property
def enabled(self):
return cr.AndroidPlatform.GetInstance().is_active
def Run(self, old_version, config):
_ = old_version, config # unused
# Check we are an android capable client
target_os = cr.context.gclient.get('target_os', [])
if 'android' in target_os:
return
url = cr.context.gclient.get('solutions', [{}])[0].get('url')
if (url.startswith('https://chrome-internal.googlesource.com/') and
url.endswith('/internal/apps.git')):
return
print('This client is not android capable.')
print('It can be made capable by adding android to the target_os list')
print('in the .gclient file, and then syncing again.')
if not cr.Host.YesNo('Would you like to upgrade this client?'):
print('Abandoning the creation of and android output directory.')
exit(1)
target_os.append('android')
cr.context.gclient['target_os'] = target_os
cr.base.client.WriteGClient()
print('Client updated.')
print('You may need to sync before an output directory can be made.')
if cr.Host.YesNo('Would you like to sync this client now?'):
cr.SyncCommand.Sync(["--nohooks"])