From 43f0341297fea60de8f4dc30e922d9c343b359a1 Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Sat, 8 Apr 2017 23:21:19 +0900 Subject: [PATCH] Add support for Android O Developer Preview 1. --- CHANGELOG.md | 1 + README.md | 2 +- lib/units/device/resources/minicap.js | 14 +++++++--- lib/units/device/resources/minirev.js | 17 +++++++----- lib/units/device/resources/minitouch.js | 2 +- lib/units/device/support/abi.js | 5 ++-- lib/units/device/support/sdk.js | 36 +++++++++++++++++++++++++ package.json | 2 +- 8 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 lib/units/device/support/sdk.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 5da85c22..b944f29c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Enhancements +- Added support for Android O Developer Preview 1 - You can now set screen JPEG quality with the `SCREEN_JPEG_QUALITY` environment variable at launch time. Can be useful for slow networks. - Switched to [yargs](http://yargs.js.org) for option parsing to make it easier to modify the CLI. - Almost all command line options can now be specified with environment variables. diff --git a/README.md b/README.md index d0c4fc9f..3a04f4ef 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Please [contact us][contact-link] for sponsor arrangements. Both recurring and o * OS support - Android - * Supports versions 2.3.3 (SDK level 10) to 7.1 (SDK level 25) + * Supports versions 2.3.3 (SDK level 10) to 7.1 (SDK level 25) and Android O Developer Preview 1 * Supports Wear 5.1 (but not 5.0 due to missing permissions) * Supports Fire OS, CyanogenMod, and other heavily Android based distributions * `root` is **not** required for any current functionality diff --git a/lib/units/device/resources/minicap.js b/lib/units/device/resources/minicap.js index 133c0689..b3d9dff3 100644 --- a/lib/units/device/resources/minicap.js +++ b/lib/units/device/resources/minicap.js @@ -15,7 +15,8 @@ module.exports = syrup.serial() .dependency(require('../support/adb')) .dependency(require('../support/properties')) .dependency(require('../support/abi')) - .define(function(options, adb, properties, abi) { + .dependency(require('../support/sdk')) + .define(function(options, adb, properties, abi, sdk) { var log = logger.createLogger('device:resources:minicap') var resources = { @@ -42,12 +43,17 @@ module.exports = syrup.serial() pathutil.module(util.format( 'minicap-prebuilt/prebuilt/%s/lib/android-%s/minicap.so' , supportedAbi - , properties['ro.build.version.release'] + , sdk.release )) , pathutil.module(util.format( 'minicap-prebuilt/prebuilt/%s/lib/android-%s/minicap.so' , supportedAbi - , properties['ro.build.version.sdk'] + , sdk.previewLevel + )) + , pathutil.module(util.format( + 'minicap-prebuilt/prebuilt/%s/lib/android-%s/minicap.so' + , supportedAbi + , sdk.level )) ]) }, [])) @@ -82,7 +88,7 @@ module.exports = syrup.serial() } function installResource(res) { - log.info('Installing "%s" as "%s"', res.comm, res.dest) + log.info('Installing "%s" as "%s"', res.src, res.dest) function checkExecutable(res) { return adb.stat(options.serial, res.dest) diff --git a/lib/units/device/resources/minirev.js b/lib/units/device/resources/minirev.js index ef8cd1c1..80b74a35 100644 --- a/lib/units/device/resources/minirev.js +++ b/lib/units/device/resources/minirev.js @@ -13,16 +13,19 @@ var Resource = require('./util/resource') module.exports = syrup.serial() .dependency(require('../support/adb')) .dependency(require('../support/properties')) - .define(function(options, adb, properties) { + .dependency(require('../support/abi')) + .define(function(options, adb, properties, abi) { var log = logger.createLogger('device:resources:minirev') var resources = { bin: new Resource({ - src: pathutil.vendor(util.format( - 'minirev/%s/minirev%s' - , properties['ro.product.cpu.abi'] - , properties['ro.build.version.sdk'] < 16 ? '-nopie' : '' - )) + src: pathutil.requiredMatch(abi.all.map(function(supportedAbi) { + return pathutil.vendor(util.format( + 'minirev/%s/minirev%s' + , supportedAbi + , abi.pie ? '' : '-nopie' + )) + })) , dest: [ '/data/local/tmp/minirev' , '/data/data/com.android.shell/minirev' @@ -54,7 +57,7 @@ module.exports = syrup.serial() } function installResource(res) { - log.info('Installing "%s" as "%s"', res.comm, res.dest) + log.info('Installing "%s" as "%s"', res.src, res.dest) function checkExecutable(res) { return adb.stat(options.serial, res.dest) diff --git a/lib/units/device/resources/minitouch.js b/lib/units/device/resources/minitouch.js index d7920468..f0a8d472 100644 --- a/lib/units/device/resources/minitouch.js +++ b/lib/units/device/resources/minitouch.js @@ -56,7 +56,7 @@ module.exports = syrup.serial() } function installResource(res) { - log.info('Installing "%s" as "%s"', res.comm, res.dest) + log.info('Installing "%s" as "%s"', res.src, res.dest) function checkExecutable(res) { return adb.stat(options.serial, res.dest) diff --git a/lib/units/device/support/abi.js b/lib/units/device/support/abi.js index e7fd59f0..92bbdda0 100644 --- a/lib/units/device/support/abi.js +++ b/lib/units/device/support/abi.js @@ -4,7 +4,8 @@ var logger = require('../../../util/logger') module.exports = syrup.serial() .dependency(require('./properties')) - .define(function(options, properties) { + .dependency(require('./sdk')) + .define(function(options, properties, sdk) { var log = logger.createLogger('device:support:abi') return (function() { function split(list) { @@ -13,7 +14,7 @@ module.exports = syrup.serial() var abi = { primary: properties['ro.product.cpu.abi'] - , pie: properties['ro.build.version.sdk'] >= 16 + , pie: sdk.level >= 16 , all: [] , b32: [] , b64: [] diff --git a/lib/units/device/support/sdk.js b/lib/units/device/support/sdk.js new file mode 100644 index 00000000..859d16f8 --- /dev/null +++ b/lib/units/device/support/sdk.js @@ -0,0 +1,36 @@ +var syrup = require('stf-syrup') + +var logger = require('../../../util/logger') + +module.exports = syrup.serial() + .dependency(require('./properties')) + .define(function(options, properties) { + var log = logger.createLogger('device:support:sdk') + return (function() { + var level = parseInt(properties['ro.build.version.sdk'], 10) + var previewDelta = + parseInt(properties['ro.build.version.preview_sdk'], 10) || 0 + var previewLevel = level + previewDelta + + var sdk = { + level: level + , previewDelta: previewDelta + , previewLevel: previewLevel + , release: properties['ro.build.version.release'] + } + + if (sdk.previewDelta) { + log.info( + 'Supports SDK %s (base %s, preview delta +%s)' + , sdk.previewLevel + , sdk.level + , sdk.previewDelta + ) + } + else { + log.info('Supports SDK %s', sdk.level) + } + + return sdk + })() + }) diff --git a/package.json b/package.json index b106efc6..19c9fe92 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "lodash": "^4.14.2", "markdown-serve": "^0.3.2", "mime": "^1.3.4", - "minicap-prebuilt": "^1.3.0", + "minicap-prebuilt": "^1.4.0", "minimatch": "^3.0.3", "my-local-ip": "^1.0.0", "openid": "^2.0.1",