initial checkin from subversion
This commit is contained in:
41
platforms/android/cordova/lib/appinfo.js
vendored
Normal file
41
platforms/android/cordova/lib/appinfo.js
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var cachedAppInfo = null;
|
||||
|
||||
function readAppInfoFromManifest() {
|
||||
var manifestPath = path.join(__dirname, '..', '..', 'AndroidManifest.xml');
|
||||
var manifestData = fs.readFileSync(manifestPath, {encoding:'utf8'});
|
||||
var packageName = /\bpackage\s*=\s*"(.+?)"/.exec(manifestData);
|
||||
if (!packageName) throw new Error('Could not find package name within ' + manifestPath);
|
||||
var activityTag = /<activity\b[\s\S]*<\/activity>/.exec(manifestData);
|
||||
if (!activityTag) throw new Error('Could not find <activity> within ' + manifestPath);
|
||||
var activityName = /\bandroid:name\s*=\s*"(.+?)"/.exec(activityTag);
|
||||
if (!activityName) throw new Error('Could not find android:name within ' + manifestPath);
|
||||
|
||||
return packageName[1] + '/.' + activityName[1];
|
||||
}
|
||||
|
||||
exports.getActivityName = function() {
|
||||
return cachedAppInfo = cachedAppInfo || readAppInfoFromManifest();
|
||||
};
|
||||
89
platforms/android/cordova/lib/build.js
vendored
Normal file
89
platforms/android/cordova/lib/build.js
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var shell = require('shelljs'),
|
||||
clean = require('./clean'),
|
||||
path = require('path'),
|
||||
fs = require('fs'),
|
||||
ROOT = path.join(__dirname, '..', '..');
|
||||
|
||||
/*
|
||||
* Builds the project with ant.
|
||||
*/
|
||||
module.exports.run = function(build_type) {
|
||||
//default build type
|
||||
build_type = typeof build_type !== 'undefined' ? build_type : "--debug";
|
||||
var cmd;
|
||||
switch(build_type) {
|
||||
case '--debug' :
|
||||
clean.run();
|
||||
cmd = 'ant debug -f ' + path.join(ROOT, 'build.xml');
|
||||
break;
|
||||
case '--release' :
|
||||
clean.run();
|
||||
cmd = 'ant release -f ' + path.join(ROOT, 'build.xml');
|
||||
break;
|
||||
case '--nobuild' :
|
||||
console.log('Skipping build...');
|
||||
break;
|
||||
default :
|
||||
console.error('Build option \'' + build_type + '\' not recognized.');
|
||||
process.exit(2);
|
||||
break;
|
||||
}
|
||||
if(cmd) {
|
||||
var result = shell.exec(cmd, {silent:false, async:false});
|
||||
if(result.code > 0) {
|
||||
console.error('ERROR: Failed to build android project.');
|
||||
console.error(result.output);
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets the path to the apk file, if not such file exists then
|
||||
* the script will error out. (should we error or just return undefined?)
|
||||
*/
|
||||
module.exports.get_apk = function() {
|
||||
if(fs.existsSync(path.join(ROOT, 'bin'))) {
|
||||
var bin_files = fs.readdirSync(path.join(ROOT, 'bin'));
|
||||
for (file in bin_files) {
|
||||
if(path.extname(bin_files[file]) == '.apk') {
|
||||
return path.join(ROOT, 'bin', bin_files[file]);
|
||||
}
|
||||
}
|
||||
console.error('ERROR : No .apk found in \'bin\' folder');
|
||||
process.exit(2);
|
||||
} else {
|
||||
console.error('ERROR : unable to find project bin folder, could not locate .apk');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.help = function() {
|
||||
console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'corodva', 'build')) + ' [build_type]');
|
||||
console.log('Build Types : ');
|
||||
console.log(' \'--debug\': Default build, will build project in using ant debug');
|
||||
console.log(' \'--release\': will build project using ant release');
|
||||
console.log(' \'--nobuild\': will skip build process (can be used with run command)');
|
||||
process.exit(0);
|
||||
}
|
||||
78
platforms/android/cordova/lib/check_reqs.js
vendored
Normal file
78
platforms/android/cordova/lib/check_reqs.js
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var shell = require('shelljs'),
|
||||
path = require('path'),
|
||||
fs = require('fs'),
|
||||
ROOT = path.join(__dirname, '..', '..');
|
||||
|
||||
// Get valid target from framework/project.properties
|
||||
module.exports.get_target = function() {
|
||||
if(fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) {
|
||||
var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'framework', 'project.properties'));
|
||||
return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', '');
|
||||
} else if (fs.existsSync(path.join(ROOT, 'project.properties'))) {
|
||||
// if no target found, we're probably in a project and project.properties is in ROOT.
|
||||
var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties'));
|
||||
return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', '');
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.check_ant = function() {
|
||||
var test = shell.exec('ant -version', {silent:true, async:false});
|
||||
if(test.code > 0) {
|
||||
console.error('ERROR : executing command \'ant\', make sure you have ant installed and added to your path.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports.check_java = function() {
|
||||
if(process.env.JAVA_HOME) {
|
||||
var test = shell.exec('java', {silent:true, async:false});
|
||||
if(test.code > 0) {
|
||||
console.error('ERROR : executing command \'java\', make sure you java environment is set up. Including your JDK and JRE.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
console.error('ERROR : Make sure JAVA_HOME is set, as well as paths to your JDK and JRE for java.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.check_android = function() {
|
||||
var valid_target = this.get_target();
|
||||
var targets = shell.exec('android list targets', {silent:true, async:false});
|
||||
|
||||
if(targets.code > 0 && targets.output.match(/command\snot\sfound/)) {
|
||||
console.error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.');
|
||||
return false;
|
||||
} else if(!targets.output.match(valid_target)) {
|
||||
console.error('Please install Android target ' + valid_target.split('-')[1] + ' (the Android newest SDK). Make sure you have the latest Android tools installed as well. Run \"android\" from your command-line to install/update any missing SDKs or tools.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports.run = function() {
|
||||
return this.check_ant() && this.check_java && this.check_android();
|
||||
}
|
||||
43
platforms/android/cordova/lib/clean.js
vendored
Normal file
43
platforms/android/cordova/lib/clean.js
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var shell = require('shelljs'),
|
||||
path = require('path'),
|
||||
ROOT = path.join(__dirname, '..', '..');
|
||||
|
||||
/*
|
||||
* Cleans the project using ant
|
||||
*/
|
||||
module.exports.run = function() {
|
||||
var cmd = 'ant clean -f ' + path.join(ROOT, 'build.xml');
|
||||
var result = shell.exec(cmd, {silent:false, async:false});
|
||||
if (result.code > 0) {
|
||||
console.error('ERROR: Failed to clean android project.');
|
||||
console.error(result.output);
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.help = function() {
|
||||
console.log('Usage: ' + path.relative(process.cwd(), process.argv[1]));
|
||||
console.log('Cleans the project directory.');
|
||||
process.exit(0);
|
||||
}
|
||||
95
platforms/android/cordova/lib/device.js
vendored
Normal file
95
platforms/android/cordova/lib/device.js
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var shell = require('shelljs'),
|
||||
path = require('path'),
|
||||
build = require('./build'),
|
||||
appinfo = require('./appinfo'),
|
||||
exec = require('child_process').exec,
|
||||
ROOT = path.join(__dirname, '..', '..');
|
||||
|
||||
/**
|
||||
* Returns a list of the device ID's found
|
||||
*/
|
||||
module.exports.list = function() {
|
||||
var cmd = 'adb devices';
|
||||
var result = shell.exec(cmd, {silent:true, async:false});
|
||||
if (result.code > 0) {
|
||||
console.error('Failed to execute android command \'' + cmd + '\'.');
|
||||
process.exit(2);
|
||||
} else {
|
||||
var response = result.output.split('\n');
|
||||
var device_list = [];
|
||||
for (var i = 1; i < response.length; i++) {
|
||||
if (response[i].match(/\w+\tdevice/) && !response[i].match(/emulator/)) {
|
||||
device_list.push(response[i].replace(/\tdevice/, '').replace('\r', ''));
|
||||
}
|
||||
}
|
||||
return device_list;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Installs a previously built application on the device
|
||||
* and launches it.
|
||||
*/
|
||||
module.exports.install = function(target) {
|
||||
var device_list = this.list();
|
||||
if (device_list.length > 0) {
|
||||
// default device
|
||||
target = typeof target !== 'undefined' ? target : device_list[0];
|
||||
if (device_list.indexOf(target) > -1) {
|
||||
var apk_path = build.get_apk();
|
||||
var launchName = appinfo.getActivityName();
|
||||
console.log('Installing app on device...');
|
||||
cmd = 'adb -s ' + target + ' install -r ' + apk_path;
|
||||
var install = shell.exec(cmd, {silent:false, async:false});
|
||||
if (install.error || install.output.match(/Failure/)) {
|
||||
console.error('ERROR : Failed to install apk to device : ');
|
||||
console.error(install.output);
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
//unlock screen
|
||||
cmd = 'adb -s ' + target + ' shell input keyevent 82';
|
||||
shell.exec(cmd, {silent:true, async:false});
|
||||
|
||||
// launch the application
|
||||
console.log('Launching application...');
|
||||
cmd = 'adb -s ' + target + ' shell am start -W -a android.intent.action.MAIN -n ' + launchName;
|
||||
var launch = shell.exec(cmd, {silent:true, async:false});
|
||||
if(launch.code > 0) {
|
||||
console.error('ERROR : Failed to launch application on emulator : ' + launch.error);
|
||||
console.error(launch.output);
|
||||
process.exit(2);
|
||||
} else {
|
||||
console.log('LANCH SUCCESS');
|
||||
}
|
||||
} else {
|
||||
console.error('ERROR : Unable to find target \'' + target + '\'.');
|
||||
console.error('Failed to deploy to device.');
|
||||
process.exit(2);
|
||||
}
|
||||
} else {
|
||||
console.error('ERROR : Failed to deploy to device, no devices found.');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
337
platforms/android/cordova/lib/emulator.js
vendored
Normal file
337
platforms/android/cordova/lib/emulator.js
vendored
Normal file
@@ -0,0 +1,337 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var shell = require('shelljs'),
|
||||
path = require('path'),
|
||||
appinfo = require('./appinfo'),
|
||||
build = require('./build'),
|
||||
ROOT = path.join(__dirname, '..', '..'),
|
||||
new_emulator = 'cordova_emulator';
|
||||
|
||||
/**
|
||||
* Returns a list of emulator images in the form of objects
|
||||
* {
|
||||
name : <emulator_name>,
|
||||
path : <path_to_emulator_image>,
|
||||
target : <api_target>,
|
||||
abi : <cpu>,
|
||||
skin : <skin>
|
||||
}
|
||||
*/
|
||||
module.exports.list_images = function() {
|
||||
var cmd = 'android list avds';
|
||||
var result = shell.exec(cmd, {silent:true, async:false});
|
||||
if (result.code > 0) {
|
||||
console.error('Failed to execute android command \'' + cmd + '\'.');
|
||||
process.exit(2);
|
||||
} else {
|
||||
var response = result.output.split('\n');
|
||||
var emulator_list = [];
|
||||
for (var i = 1; i < response.length; i++) {
|
||||
// To return more detailed information use img_obj
|
||||
var img_obj = {};
|
||||
if (response[i].match(/Name:\s/)) {
|
||||
img_obj['name'] = response[i].split('Name: ')[1].replace('\r', '');
|
||||
if (response[i + 1].match(/Path:\s/)) {
|
||||
i++;
|
||||
img_obj['path'] = response[i].split('Path: ')[1].replace('\r', '');
|
||||
}
|
||||
if (response[i + 1].match(/\(API\slevel\s/)) {
|
||||
i++;
|
||||
img_obj['target'] = response[i].replace('\r', '');
|
||||
}
|
||||
if (response[i + 1].match(/ABI:\s/)) {
|
||||
i++;
|
||||
img_obj['abi'] = response[i].split('ABI: ')[1].replace('\r', '');
|
||||
}
|
||||
if (response[i + 1].match(/Skin:\s/)) {
|
||||
i++;
|
||||
img_obj['skin'] = response[i].split('Skin: ')[1].replace('\r', '');
|
||||
}
|
||||
|
||||
emulator_list.push(img_obj);
|
||||
}
|
||||
/* To just return a list of names use this
|
||||
if (response[i].match(/Name:\s/)) {
|
||||
emulator_list.push(response[i].split('Name: ')[1].replace('\r', '');
|
||||
}*/
|
||||
|
||||
}
|
||||
return emulator_list;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Will return the closest avd to the projects target
|
||||
* or undefined if no avds exist.
|
||||
*/
|
||||
module.exports.best_image = function() {
|
||||
var project_target = this.get_target().replace('android-', '');
|
||||
var images = this.list_images();
|
||||
var closest = 9999;
|
||||
var best = images[0];
|
||||
for (i in images) {
|
||||
var target = images[i].target;
|
||||
if(target) {
|
||||
var num = target.split('(API level ')[1].replace(')', '');
|
||||
if (num == project_target) {
|
||||
return images[i];
|
||||
} else if (project_target - num < closest && project_target > num) {
|
||||
var closest = project_target - num;
|
||||
best = images[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
module.exports.list_started = function() {
|
||||
var cmd = 'adb devices';
|
||||
var result = shell.exec(cmd, {silent:true, async:false});
|
||||
if (result.code > 0) {
|
||||
console.error('Failed to execute android command \'' + cmd + '\'.');
|
||||
process.exit(2);
|
||||
} else {
|
||||
var response = result.output.split('\n');
|
||||
var started_emulator_list = [];
|
||||
for (var i = 1; i < response.length; i++) {
|
||||
if (response[i].match(/device/) && response[i].match(/emulator/)) {
|
||||
started_emulator_list.push(response[i].replace(/\tdevice/, '').replace('\r', ''));
|
||||
}
|
||||
}
|
||||
return started_emulator_list;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.get_target = function() {
|
||||
var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties'));
|
||||
return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', '');
|
||||
}
|
||||
|
||||
module.exports.list_targets = function() {
|
||||
var target_out = shell.exec('android list targets', {silent:true, async:false}).output.split('\n');
|
||||
var targets = [];
|
||||
for (var i = target_out.length; i >= 0; i--) {
|
||||
if(target_out[i].match(/id:/)) {
|
||||
targets.push(targets[i].split(' ')[1]);
|
||||
}
|
||||
}
|
||||
return targets;
|
||||
}
|
||||
|
||||
/*
|
||||
* Starts an emulator with the given ID,
|
||||
* and returns the started ID of that emulator.
|
||||
* If no ID is given it will used the first image availible,
|
||||
* if no image is availible it will error out (maybe create one?).
|
||||
*/
|
||||
module.exports.start = function(emulator_ID) {
|
||||
var started_emulators = this.list_started();
|
||||
var num_started = started_emulators.length;
|
||||
if (typeof emulator_ID === 'undefined') {
|
||||
var emulator_list = this.list_images();
|
||||
if (emulator_list.length > 0) {
|
||||
emulator_ID = this.best_image().name;
|
||||
console.log('WARNING : no emulator specified, defaulting to ' + emulator_ID);
|
||||
} else {
|
||||
console.error('ERROR : No emulator images (avds) found, if you would like to create an');
|
||||
console.error(' avd follow the instructions provided here : ');
|
||||
console.error(' http://developer.android.com/tools/devices/index.html')
|
||||
console.error(' Or run \'android create avd --name <name> --target <targetID>\' ');
|
||||
console.error(' in on the command line.');
|
||||
process.exit(2);
|
||||
/*console.log('WARNING : no emulators availible, creating \'' + new_emulator + '\'.');
|
||||
this.create_image(new_emulator, this.get_target());
|
||||
emulator_ID = new_emulator;*/
|
||||
}
|
||||
}
|
||||
|
||||
var pipe_null = (process.platform == 'win32' || process.platform == 'win64'? '> NUL' : '> /dev/null');
|
||||
var cmd = 'emulator -avd ' + emulator_ID + ' ' + pipe_null + ' &';
|
||||
if(process.platform == 'win32' || process.platform == 'win64') {
|
||||
cmd = '%comspec% /c start cmd /c ' + cmd;
|
||||
}
|
||||
var result = shell.exec(cmd, {silent:true, async:false}, function(code, output) {
|
||||
if (code > 0) {
|
||||
console.error('Failed to execute android command \'' + cmd + '\'.');
|
||||
console.error(output);
|
||||
process.exit(2);
|
||||
}
|
||||
});
|
||||
|
||||
// wait for emulator to start
|
||||
console.log('Waiting for emulator...');
|
||||
var new_started = this.wait_for_emulator(num_started);
|
||||
var emulator_id;
|
||||
if (new_started.length > 1) {
|
||||
for (i in new_started) {
|
||||
console.log(new_started[i]);
|
||||
console.log(started_emulators.indexOf(new_started[i]));
|
||||
if (started_emulators.indexOf(new_started[i]) < 0) {
|
||||
emulator_id = new_started[i];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
emulator_id = new_started[0];
|
||||
}
|
||||
if (!emulator_id) {
|
||||
console.error('ERROR : Failed to start emulator, could not find new emulator');
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
//wait for emulator to boot up
|
||||
process.stdout.write('Booting up emulator (this may take a while)...');
|
||||
this.wait_for_boot(emulator_id);
|
||||
console.log('BOOT COMPLETE');
|
||||
|
||||
//unlock screen
|
||||
cmd = 'adb -s ' + emulator_id + ' shell input keyevent 82';
|
||||
shell.exec(cmd, {silent:false, async:false});
|
||||
|
||||
//return the new emulator id for the started emulators
|
||||
return emulator_id;
|
||||
}
|
||||
|
||||
/*
|
||||
* Waits for the new emulator to apear on the started-emulator list.
|
||||
*/
|
||||
module.exports.wait_for_emulator = function(num_running) {
|
||||
var new_started = this.list_started();
|
||||
if (new_started.length > num_running) {
|
||||
return new_started;
|
||||
} else {
|
||||
this.sleep(1);
|
||||
return this.wait_for_emulator(num_running);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Waits for the boot animation property of the emulator to switch to 'stopped'
|
||||
*/
|
||||
module.exports.wait_for_boot = function(emulator_id) {
|
||||
var cmd;
|
||||
// ShellJS opens a lot of file handles, and the default on OS X is too small.
|
||||
// TODO : This is not working, need to find a better way to increese the ulimit.
|
||||
if(process.platform == 'win32' || process.platform == 'win64') {
|
||||
cmd = 'adb -s ' + emulator_id + ' shell getprop init.svc.bootanim';
|
||||
} else {
|
||||
cmd = 'ulimit -S -n 4096; adb -s ' + emulator_id + ' shell getprop init.svc.bootanim';
|
||||
}
|
||||
var boot_anim = shell.exec(cmd, {silent:true, async:false});
|
||||
if (boot_anim.output.match(/stopped/)) {
|
||||
return;
|
||||
} else {
|
||||
process.stdout.write('.');
|
||||
this.sleep(3);
|
||||
return this.wait_for_boot(emulator_id);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO : find a better way to wait for the emulator (maybe using async methods?)
|
||||
*/
|
||||
module.exports.sleep = function(time_sec) {
|
||||
if (process.platform == 'win32' || process.platform == 'win64') {
|
||||
shell.exec('ping 127.0.0.1 -n ' + time_sec, {silent:true, async:false});
|
||||
} else {
|
||||
shell.exec('sleep ' + time_sec, {silent:true, async:false});
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Create avd
|
||||
* TODO : Enter the stdin input required to complete the creation of an avd.
|
||||
*/
|
||||
module.exports.create_image = function(name, target) {
|
||||
console.log('Creating avd named ' + name);
|
||||
if (target) {
|
||||
var cmd = 'android create avd --name ' + name + ' --target ' + target;
|
||||
var create = shell.exec(cmd, {sient:false, async:false});
|
||||
if (create.error) {
|
||||
console.error('ERROR : Failed to create emulator image : ');
|
||||
console.error(' Do you have the latest android targets including ' + target + '?');
|
||||
console.error(create.output);
|
||||
process.exit(2);
|
||||
}
|
||||
} else {
|
||||
console.log('WARNING : Project target not found, creating avd with a different target but the project may fail to install.');
|
||||
var cmd = 'android create avd --name ' + name + ' --target ' + this.list_targets()[0];
|
||||
var create = shell.exec(cmd, {sient:false, async:false});
|
||||
if (create.error) {
|
||||
console.error('ERROR : Failed to create emulator image : ');
|
||||
console.error(create.output);
|
||||
process.exit(2);
|
||||
}
|
||||
console.error('ERROR : Unable to create an avd emulator, no targets found.');
|
||||
console.error('Please insure you have targets availible by runing the "android" command').
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Installs a previously built application on the emulator and launches it.
|
||||
* If no target is specified, then it picks one.
|
||||
* If no started emulators are found, error out.
|
||||
*/
|
||||
module.exports.install = function(target) {
|
||||
var emulator_list = this.list_started();
|
||||
if (emulator_list.length < 1) {
|
||||
console.error('ERROR : No started emulators found, please start an emultor before deploying your project.');
|
||||
process.exit(2);
|
||||
/*console.log('WARNING : No started emulators found, attemting to start an avd...');
|
||||
this.start(this.best_image().name);*/
|
||||
}
|
||||
// default emulator
|
||||
target = typeof target !== 'undefined' ? target : emulator_list[0];
|
||||
if (emulator_list.indexOf(target) > -1) {
|
||||
console.log('Installing app on emulator...');
|
||||
var apk_path = build.get_apk();
|
||||
var cmd = 'adb -s ' + target + ' install -r ' + apk_path;
|
||||
var install = shell.exec(cmd, {sient:false, async:false});
|
||||
if (install.error || install.output.match(/Failure/)) {
|
||||
console.error('ERROR : Failed to install apk to emulator : ');
|
||||
console.error(install.output);
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
//unlock screen
|
||||
cmd = 'adb -s ' + target + ' shell input keyevent 82';
|
||||
shell.exec(cmd, {silent:true, async:false});
|
||||
|
||||
// launch the application
|
||||
console.log('Launching application...');
|
||||
var launchName = appinfo.getActivityName();
|
||||
cmd = 'adb -s ' + target + ' shell am start -W -a android.intent.action.MAIN -n ' + launchName;
|
||||
console.log(cmd);
|
||||
var launch = shell.exec(cmd, {silent:false, async:false});
|
||||
if(launch.code > 0) {
|
||||
console.error('ERROR : Failed to launch application on emulator : ' + launch.error);
|
||||
console.error(launch.output);
|
||||
process.exit(2);
|
||||
} else {
|
||||
console.log('LANCH SUCCESS');
|
||||
}
|
||||
} else {
|
||||
console.error('ERROR : Unable to find target \'' + target + '\'.');
|
||||
console.error('Failed to deploy to emulator.');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
38
platforms/android/cordova/lib/install-device
Normal file
38
platforms/android/cordova/lib/install-device
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var device = require('./device'),
|
||||
args = process.argv;
|
||||
|
||||
if(args.length > 2) {
|
||||
var install_target;
|
||||
if (args[2].substring(0, 9) == '--target=') {
|
||||
install_target = args[2].substring(9, args[2].length);
|
||||
device.install(install_target);
|
||||
process.exit(0);
|
||||
} else {
|
||||
console.error('ERROR : argument \'' + args[2] + '\' not recognized.');
|
||||
process.exit(2);
|
||||
}
|
||||
} else {
|
||||
device.install();
|
||||
process.exit(0);
|
||||
}
|
||||
38
platforms/android/cordova/lib/install-emulator
Normal file
38
platforms/android/cordova/lib/install-emulator
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var emulator = require('./emulator'),
|
||||
args = process.argv;
|
||||
|
||||
if(args.length > 2) {
|
||||
var install_target;
|
||||
if (args[2].substring(0, 9) == '--target=') {
|
||||
install_target = args[2].substring(9, args[2].length);
|
||||
emulator.install(install_target);
|
||||
process.exit(0);
|
||||
} else {
|
||||
console.error('ERROR : argument \'' + args[2] + '\' not recognized.');
|
||||
process.exit(2);
|
||||
}
|
||||
} else {
|
||||
emulator.install();
|
||||
process.exit(0);
|
||||
}
|
||||
28
platforms/android/cordova/lib/list-devices
Normal file
28
platforms/android/cordova/lib/list-devices
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var devices = require('./device');
|
||||
|
||||
// Usage support for when args are given
|
||||
var device_list = devices.list();
|
||||
for(device in device_list) {
|
||||
console.log(device_list[device]);
|
||||
}
|
||||
29
platforms/android/cordova/lib/list-emulator-images
Normal file
29
platforms/android/cordova/lib/list-emulator-images
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var emulators = require('./emulator');
|
||||
|
||||
// Usage support for when args are given
|
||||
var emulator_list = emulators.list_images();
|
||||
for(emulator in emulator_list) {
|
||||
console.log(emulator_list[emulator].name);
|
||||
process.exit(0);
|
||||
}
|
||||
29
platforms/android/cordova/lib/list-started-emulators
Normal file
29
platforms/android/cordova/lib/list-started-emulators
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var emulators = require('./emulator');
|
||||
|
||||
// Usage support for when args are given
|
||||
var emulator_list = emulators.list_started();
|
||||
for(emulator in emulator_list) {
|
||||
console.log(emulator_list[emulator]);
|
||||
process.exit(0);
|
||||
}
|
||||
43
platforms/android/cordova/lib/log.js
vendored
Normal file
43
platforms/android/cordova/lib/log.js
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var shell = require('shelljs'),
|
||||
path = require('path'),
|
||||
ROOT = path.join(__dirname, '..', '..');
|
||||
|
||||
/*
|
||||
* Starts running logcat in the shell.
|
||||
*/
|
||||
module.exports.run = function() {
|
||||
var cmd = 'adb logcat | grep -v nativeGetEnabledTags';
|
||||
var result = shell.exec(cmd, {silent:false, async:false});
|
||||
if (result.code > 0) {
|
||||
console.error('ERROR: Failed to run logcat command.');
|
||||
console.error(result.output);
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.help = function() {
|
||||
console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'corodva', 'log')));
|
||||
console.log('Gives the logcat output on the command line.');
|
||||
process.exit(0);
|
||||
}
|
||||
123
platforms/android/cordova/lib/run.js
vendored
Normal file
123
platforms/android/cordova/lib/run.js
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var path = require('path'),
|
||||
build = require('./build'),
|
||||
emulator = require('./emulator'),
|
||||
device = require('./device');
|
||||
|
||||
/*
|
||||
* Runs the application on a device if availible.
|
||||
* If not device is found, it will use a started emulator.
|
||||
* If no started emulators are found it will attempt to start an avd.
|
||||
* If no avds are found it will error out.
|
||||
*/
|
||||
module.exports.run = function(args) {
|
||||
var build_type;
|
||||
var install_target;
|
||||
|
||||
for (var i=2; i<args.length; i++) {
|
||||
if (args[i] == '--debug') {
|
||||
build_type = '--debug';
|
||||
} else if (args[i] == '--release') {
|
||||
build_type = '--release';
|
||||
} else if (args[i] == '--nobuild') {
|
||||
build_type = '--nobuild';
|
||||
} else if (args[i] == '--device') {
|
||||
install_target = '--device';
|
||||
} else if (args[i] == '--emulator') {
|
||||
install_target = '--emulator';
|
||||
} else if (args[i].substring(0, 9) == '--target=') {
|
||||
install_target = args[i].substring(9, args[i].length);
|
||||
} else {
|
||||
console.error('ERROR : Run option \'' + args[i] + '\' not recognized.');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
build.run(build_type);
|
||||
if (install_target == '--device') {
|
||||
device.install();
|
||||
} else if (install_target == '--emulator') {
|
||||
if (emulator.list_started() == 0) {
|
||||
emulator.start();
|
||||
}
|
||||
emulator.install();
|
||||
} else if (install_target) {
|
||||
var devices = device.list();
|
||||
var started_emulators = emulator.list_started();
|
||||
var avds = emulator.list_images();
|
||||
if (devices.indexOf(install_target) > -1) {
|
||||
device.install(install_target);
|
||||
} else if (started_emulators.indexOf(install_target) > -1) {
|
||||
emulator.install(install_target);
|
||||
} else {
|
||||
// if target emulator isn't started, then start it.
|
||||
var emulator_ID;
|
||||
for(avd in avds) {
|
||||
if(avds[avd].name == install_target) {
|
||||
emulator_ID = emulator.start(install_target);
|
||||
emulator.install(emulator_ID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!emulator_ID) {
|
||||
console.error('ERROR : Target \'' + install_target + '\' not found, unalbe to run project');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// no target given, deploy to device if availible, otherwise use the emulator.
|
||||
var device_list = device.list();
|
||||
if (device_list.length > 0) {
|
||||
console.log('WARNING : No target specified, deploying to device \'' + device_list[0] + '\'.');
|
||||
device.install(device_list[0])
|
||||
} else {
|
||||
var emulator_list = emulator.list_started();
|
||||
if (emulator_list.length > 0) {
|
||||
console.log('WARNING : No target specified, deploying to emulator \'' + emulator_list[0] + '\'.');
|
||||
emulator.install(emulator_list[0]);
|
||||
} else {
|
||||
console.log('WARNING : No started emulators found, starting an emulator.');
|
||||
var best_avd = emulator.best_image();
|
||||
if(best_avd) {
|
||||
var emulator_ID = emulator.start(best_avd.name);
|
||||
console.log('WARNING : No target specified, deploying to emulator \'' + emulator_ID + '\'.');
|
||||
emulator.install(emulator_ID);
|
||||
} else {
|
||||
emulator.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.help = function() {
|
||||
console.log('Usage: ' + path.relative(process.cwd(), args[0]) + ' [options]');
|
||||
console.log('Build options :');
|
||||
console.log(' --debug : Builds project in debug mode');
|
||||
console.log(' --release : Builds project in release mode');
|
||||
console.log(' --nobuild : Runs the currently built project without recompiling');
|
||||
console.log('Deploy options :');
|
||||
console.log(' --device : Will deploy the built project to a device');
|
||||
console.log(' --emulator : Will deploy the built project to an emulator if one exists');
|
||||
console.log(' --target=<target_id> : Installs to the target with the specified id.');
|
||||
process.exit(0);
|
||||
}
|
||||
38
platforms/android/cordova/lib/start-emulator
Normal file
38
platforms/android/cordova/lib/start-emulator
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var emulator = require('./emulator'),
|
||||
args = process.argv;
|
||||
|
||||
if(args.length > 2) {
|
||||
var install_target;
|
||||
if (args[2].substring(0, 9) == '--target=') {
|
||||
install_target = args[2].substring(9, args[2].length);
|
||||
emulator.start(install_target);
|
||||
process.exit(0);
|
||||
} else {
|
||||
console.error('ERROR : argument \'' + args[2] + '\' not recognized.');
|
||||
process.exit(2);
|
||||
}
|
||||
} else {
|
||||
emulator.start();
|
||||
process.exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user